花了一天的时间看某帮,apk使用腾讯加固,脱壳后部分大的函数jadx和jeb都反编译失败,全程靠frida hook观察。主要的2个消息:
pluto/app/antispam app 启动时候触发,动态协商密钥。 这里没有签名可重放
1 客户端生成10个字节的随机字符串,假设叫client_random_key。client_random_key按固定格式拼接好,本地硬编码的密钥des加密, 密文bytetobit再bittoint后,再拼上各种本地的环境信息post到服务端
2 服务端返回的数据inttobit再bittobyte后用client_random_key[0:5] + '#G4'作为密钥des解密,得到2个串server_random_key_1, server_random_key_2
3 拿server_random_key_2直接计算md5,假设叫sign_slat,用于业务请求的签名
4 固定串md5 + 版本号md5 + server_random_key_2格式化计算md5后 前后15位交换, 假设叫A。 (A + md5(A))的结果 前后60个字符交换,最后得到rc4的密钥,假设叫base_rc4_key
search/submit/picsearchnew 功能函数,带签名,带时间戳
1 请求的时候 md5(sign_slat格式化 + multipart的key,value字典序排序后拼接成字符串)作为请求包的签名
2 服务端返回的每个内容item都独立一个密钥。 base_rc4_key先解密密钥数组,拿着sub_rc4_key去解密item,再base64_decode后再次用base_rc4_key解密,再gzip解压拿到数据。(非常的绕,直接吐血)
有些地方感觉比较不错
1 动态协商密钥
2 http multipart anti