WX读书Sign分析
目标:定位到:
weread.encrypt.EncryptUtils,nativeGetSignatures方法
写一个HOOK调试一下,
返回64位,猜测可能是经过了sha256的加密。
定位到libencrypt.so
主要函数为 Java_weread_encrypt_EncryptUtils_nativeGetSignatures,其中调用 weread::GenSignature(n) 生成签名。
然后主动调用调试一下,发现我们提交的数组经过sort排序
找到盐:5***1
但是为什么提交的数组,4个参数为什么是5个进行append
发现其使用 weread::RemapString(n) 进行字符串重映射,通过256字节的查找表进行转换
把表抄一下就好了:
def transform_string(input_str):
byte_Index = [0x34, 0xCA, 0x55, 0x40, 0x1D, 0xB6, 0x93, 0xC6, 0x31,
0x30, 0x29, 0x35, 0x32, 0xA7, 0xB8, 0x11, 0xC2, 0xB5,
0x16, 0xFA, 0x8B, 0xB1, 0x24, 0xA4, 0x10, 0x90, 4,
# ... 完整256字节表
0xB7, 0x15]
encoded_bytes = []
for char in input_str:
index = ord(char)
if index < 0 or index >= len(byte_Index):
raise ValueError(f"字符 '{char}' (ASCII: {index}) 超出查找表范围")
encoded_byte = byte_Index
encoded_bytes.append(encoded_byte)
return ''.join()接着看,发现进行两次SHA256哈希计算,每次哈希前都进行自定义重排序:
1.计算校验和:通过异或运算生成一个0-10的校验值
2.数据重排序:根据校验值对输入字节进行循环位移
根据IDA代码翻译即可,不会就问AI
感谢分享 感谢分享
页:
[1]