目录
1.抓包,确认需要逆向的参数
通过不同栏目的接口抓包,得出结论:
时间戳:
tmtimestamp | 1722239449559 |
不变的参数
tmrandomnum | 80f5u2uhef5o37nf |
需要逆向:
tmencryptkey | e8d9ceb8a770b35ec58142ed16ce3fa9 |
tm_encrypt_data | FnSHDTIf012UFMdp11XAnW5gG4x9x....... |
2.通过jadx反编译
可以看出,该apk妥妥的360加固
3.使用frida破壳
小编这里使用frida抓了4次内存中的包,在拖入jadx后没有一个可以搜索到加密字段或者url路径的,只有两种可能,一是被混淆了,二是破壳不成功。
4.使用可以嗅探加密的工具进行加密值的逆推
4.1 首先搜索tm_encrypt_data的值,可以得到是一个AES-CBC的加密
4.2 这里出现了新的值 key和iv,通过再次的发请求抓加密,key和iv是变化的,也就是说现在加密参数多了key和iv。
这里对key和iv进行逆推,得出结论:
key = md5_encrypt(to_base64(headers['tmtimestamp']) + md5_encrypt((headers['tmrandomnum'])))[:16].encode()
iv = md5_encrypt(to_base64(headers['tmrandomnum']) + md5_encrypt((headers['tmtimestamp'])))[:16].encode()
4.3同理对tmencryptkey参数逆推
headers['tmencryptkey'] = md5_encrypt(to_base64(md5_encrypt((headers['tmtimestamp'])))[:-1]+ "3ZDNmcmU5ZzVmY210aTN57d3fre9g5fcmti3y")
至此所有参数的加解密逻辑已经完成!!!
5.总结
对于棘手的app,apk逆向开发时间>>其数据价值,考虑工具解决。这个app也是将base64以及掐头去尾的小操作玩到了极致。