tj_xxtea加解密算法求助

我打不开h365的链接说下架了好像你可以提供一下apk吗

87色漫的密钥我解出来了是4712c40187d96d808b42d94574060d6b

顺带一提你能提供一下这个解密工具的源码吗这个加密方式使用repo.mapping对文件名进行了混淆我看看做一个python版的扩展性好一点可以顺带恢复

额找到原因了我的IP是日本的似乎因为版权问题毕竟宝可梦是日本的。。。
image
梯子我没有快的。。。所以能提供google网盘或者其他不限速网盘链接的话最好了,百度网盘也行

H365的密钥我解出来了是94e1e4efb4ddea414f6d65484680a829

87比h365多一个角色。。。

幻想三国志700d8393dc866673b14e358c8e6ebfac

你发的那个python2代码里都有,看不懂就让ai转一下就行了

感谢分享密钥

AI总是报错
Error during decryption: Invalid data, illegal PKCS#7 padding. Could be using a wrong key.
:sweat_smile:

口袋xxtea加密.zip (8.6 MB)

tj_xxtea_decrypt.zip (4.1 MB)

带不带整理都发一下,以防万一,修复了一点显示问题

感谢大佬分享~(是我搞错了…)

我检索了一下好像现在没有您说的这几个文件了 就是您这个地址下载的ipa

额如果你是奔着视频来的我可以告诉你完全没必要从游戏里下视频,糊的要死直接google或者小红车搜Rinhee就可以找到原视频,至于R18的spine你解密后可以直接找到

so.zip (5.9 MB)
大佬这种找不到生成密钥的日期是什么原因呢 :sweat_smile:


1745690608565

import hashlib

# 逆向出的查表数据
byte_D375B6 = [
    0x75, 0x39, 0x21, 0x7E, 0x62, 0x03, 0x63, 0x09, 0x33, 0x09,
    0x21, 0x4F, 0x39, 0x1F, 0x50, 0x62, 0x21, 0x09, 0x02, 0x25,
    0x5D, 0x53, 0x29, 0x09, 0x0A, 0x21, 0x7E, 0x62, 0x02, 0x57,
    0x21, 0x5D, 0x02, 0x50
]

byte_D375D5 = [
    0x15, 0x28, 0x69, 0x79, 0x7C, 0x3E, 0x0B, 0x21, 0x36, 0x6F,
    0x66, 0x4E, 0x62, 0x2D, 0x77, 0x60, 0x73, 0x2A, 0x29, 0x0D,
    0x44, 0x37, 0x6B, 0x5C, 0x00, 0x5A, 0x0F, 0x0C, 0x5E, 0x64,
    0x1A, 0x65, 0x57, 0x6E, 0x4D, 0x7A, 0x47, 0x74, 0x40, 0x43,
    0x02, 0x72, 0x45, 0x18, 0x5F, 0x32, 0x10, 0x08, 0x71, 0x11,
    0x16, 0x6C, 0x30, 0x17, 0x14, 0x4B, 0x05, 0x63, 0x25, 0x35,
    0x7F, 0x1E, 0x3B, 0x26, 0x01, 0x0E, 0x6A, 0x59, 0x13, 0x09,
    0x2B, 0x50, 0x70, 0x03, 0x27, 0x53, 0x5B, 0x5D, 0x56, 0x68,
    0x54, 0x2F, 0x23, 0x6D, 0x2C, 0x46, 0x1B, 0x4A, 0x12, 0x78,
    0x1C, 0x4C, 0x4F, 0x61, 0x75, 0x51, 0x3F, 0x52, 0x20, 0x67,
    0x39, 0x04, 0x48, 0x24, 0x55, 0x34, 0x31, 0x33, 0x3D, 0x22,
    0x76, 0x42, 0x7D, 0x1D, 0x1F, 0x06, 0x7B, 0x2E, 0x3C, 0x0A,
    0x58, 0x19, 0x41, 0x7E, 0x38, 0x3A, 0x49, 0x07
]


def decode_company_name():
    """通过查表解码隐藏的公司全名"""
    decoded_bytes = [byte_D375D5[b] for b in byte_D375B6]
    return bytes(decoded_bytes).decode('latin1')


def to_confuse(s):
    """字符替换规则"""
    s = s.upper()
    return s.replace('_', '+').replace('.', ';').replace('6', ';')


def generate_key(version="2.1.1.0"):
    # 常量定义
    COMPANY_SHORT = "iJnaiT"  # 伪代码中硬编码的短名称
    DATE_STRING = "basestring"  # 伪代码中插入的日期

    # 1. 解码公司全名
    company_full = decode_company_name()  # 结果为"TianJi Information Technology Inc."

    # 2. 处理版本号(去掉最后的小版本)
    version_main = version[:version.rfind('.')] if '.' in version else version

    # 3. 构建第一阶段字符串
    phase1_str = f"lua5.1 {COMPANY_SHORT} .Luajit{company_full}"

    # 4. 字符混淆处理
    processed_phase1 = to_confuse(phase1_str)

    # 5. 第一次MD5
    md5_phase1 = hashlib.md5(processed_phase1.encode('utf-8')).hexdigest()

    # 6. 构建第二阶段字符串
    phase2_str = f"{md5_phase1}{DATE_STRING}{version_main}{COMPANY_SHORT}"

    # 7. 二次混淆处理
    processed_phase2 = to_confuse(phase2_str)

    # 8. 反转字符串
    reversed_str = processed_phase2[::-1]

    # 9. 最终MD5生成密钥
    final_key = hashlib.md5(reversed_str.encode('utf-8')).hexdigest()

    return final_key


if __name__ == "__main__":
    # 测试输出
    test_version = "2.1.1.0"
    print(f"Version: {test_version}")
    print(f"Generated Key: {generate_key(test_version)}")

    # 验证解码结果
    print(f"\nDecoded Company Name: {decode_company_name()}")

Version: 2.1.1.0
Generated Key: 4da9ff133725f50eb90514198fbd7be0

Decoded Company Name: .cnI ygolonhceT noitamrofnI iJnaiT

使用 cyb464b6大佬的工具解密
image
你提供的加密文件样本解密后

顺带一提公司短名在IDA默认是以10进制的ascii显示的需要转字符串直接选中按快捷键R就行

感谢,(我以为日期是数字形式 :sweat_smile:)