在字符串里可以直接看到目标比较值: 000A9CD32B9E4D0D563A190E6B2DC2923ADA53F5BEF22A7A 主逻辑里一共用了 4 个数字: 344, 21, 89, 233 对 {} 内的内容依次进行: RC4(key="344") 与 "21" 循环异或 与 "89" 循环逐字节相加 用 SHA256("233") 的前 16 字节作为 TEA key 加密 转大写十六进制后与目标常量比较 因此只需要逆向还原: 目标 hex 转字节 TEA 解密 去填充 循环减去 "89" 循环异或 "21" RC4 解密,key="344" 还原后得到明文: deaIoihuwuasyIleolyclrt 所以最终...
找“答错了”\u7b54\u9519\u4e86 输入与generatePassword()生成的密码比较 正确密码 = 设备 ID(Build.ID) + “touko_secret_salt” 然后UTF-8 编码后计算 MD5 哈希 再转十六进制字符串并截取前 8 位 这个8位的应该就是要输入的 或者说直接hook一下 调试 上面的当我没说 搜”答错了“的unicode找到 Mainactivity 这个里面有一个判断 只要把判断改了就行 叫checkpassword 结果异或一下 xor v1 v1 安装到模拟器里应该就能用了 改一下字符方便看出到底改没改
做了一个异或 上面是旧的 下面是新的 enc= 0x69, 0x79, 0x63, 0x70, 0x67, 0x75, 0x48, 0x52, 0x0A, 0x01, 0x02, 0x01, 0x52, 0x06, 0x0B, 0x1E, 0x50, 0x0A, 0x56, 0x02, 0x1E, 0x07, 0x05, 0x05, 0x06, 0x1E, 0x52, 0x02, 0x0A, 0x00, 0x1E, 0x52, 0x55, 0x05, 0x0B, 0x02, 0x07, 0x0A, 0x56, 0x0B, 0x55, 0x55, 0x01, 0x4E 写脚本 答案...
这是判断 上面还有一个长度的判断 要36位的flag 找到一个东西 ZJPCCTF&&AHPCCTF 像密钥? 将sub_7FF7460CE630()命名为main 开始改函数名 附件到时候看看能不能扔文件夹里 string3 hex=46A02ADF2AAA76C0E59F25E3EB375065568CEAE188BF06D48F3F873737E72E0E6E52452D 这个没问题,运行也不会动 key=(错了) [ 0xAB,0xEF,0x92,0x80,0x85,0xD7,0xD7,0xC0, 0x7B,0x9C,0x16,0x65,0xC1,0x6E,0xE7,0x0E,...
import base64 def rc4_decrypt(cipher_data, key_bytes): """ RC4 解密函数(严格匹配反汇编逻辑) :param cipher_data: 密文(bytes类型) :param key_bytes: 原始16字节密钥(bytes类型) :return: 明文(bytes类型) """ # === 1. RC4 KSA 阶段(对应 sub_1400015D0) === S = list(range(256)) # 对应 byte_140013140(S盒) j = 0 key_len = len(key_bytes) # 固定为16 # 模拟反汇编中"循环填充密钥+S盒置换"逻...