android 逆向 21 / 38
- app OAuth api_sign 分析
- app sig 参数加密分析 unidbg 模拟黑盒调用
- app sign so 加密参数破解|unidbg
- sgmain x-sign 分析 - unidbg
- androidAsync fridaManager sgmain 70102 rpc 远程调用
- app edata 参数 so aes 加密分析破解|unidbg
- frida 加载 sekiro dex 文件 实现与服务端交互
- frida sekiro 实现 sgmain 70102 远程 rpc 调用
- xposed sekiro hook 获取 wx 万能 key
- unidbg console debugger 使用
- unidbg hook inline hook 使用
- app 公众号文章列表 so 加解密算法分析还原 | 简单分析
- app 公众号文章列表 so 加解密算法分析还原 | 加密 rsa base64 分析
- app 公众号文章列表 so 加解密算法分析还原 | 加密 zip aes 分析
- app 公众号文章列表 so 加解密算法分析还原 | response 内容解密分析
- app sign so 加密算法分析还原|简单分析
- app sign so 加密算法分析还原|so 算法分析
- app sign so 加密算法分析还原|so sub_126AC 函数算法还原
- app so signkeyV1 参数分析
- ida 动态调试 android so 文件|基础入门环境搭建
- app so newSign 参数分析破解
- app tzRgz52a 参数分析破解
- app sign-v2 签名算法 aes 加解密分析
- app so 加密参数分析|protocbuf 分析
- mxtakatak android app 加解密分析
- android app so 加密算法分析破解|mtgsig unidbg
- android app so 加密算法分析破解|siua unidbg
- android app nsign so 加密算法分析
- android app sig 参数 so 加密逻辑逆向分析
- android app so sig 加密参数 unidbg
- 狗狗音乐登陆协议加密参数逆向分析
- android sign so 加密参数分析|unidbg
- android app X-SS-QUERIES 参数分析
- unidbg android app xgorgon 加密参数 leviathan
- sgmain 6.4.x xsign 加密算法分析研究
- sgmain 6.4.x xminiwua 加密算法分析研究
- 某 app mas 算法分析还原 cms so
- 某东登陆协议 tlv 逻辑分析
仅供学习研究 。请勿用于非法用途,本人将不承担任何法律责任。
前言
某物
newSign
参数分析
charles 抓包
就是这个 newSign
, 一个 hash
值
反编译分析
全局搜索一下,
打开 jeb
搜索一下这个类,jeb
分析比较方便一点,进入 RequestUtils.c
函数
这里调用了 RequestUtils.f, AESEncrypt.encode
函数
RequestUtils.f
函数是标准的 md5
AESEncrypt.encode
函数调用了 NCall.IL
函数
NCall.IL
函数是在 GameVMP
, so
里,实际上真正的加密逻辑是在 libJNIEncrypt.so
文件里,也就是上上图的 encodeByte
函数,俺也没搞懂里面的逻辑是啥,本想分析下 GameVMP.so
的,但是奈何里面对抗 ida
手段有点多,没搞定就直接放弃了(哪位老哥了解的,还望不杏赐教)
so 分析
分析下 libJNIEncrypt.so
在导出窗口里可以看到函数也不多,其中就有 aes
函数,符号都没去,加密方式是 aes-128-ebc-pkcs#5
,因为 so
的对抗不好处理,就是用 frida hook
看看,输入输出
frida hook
function hook() {
var javaString = Java.use('java.lang.String');
var AESEncrypt = Java.use('com.duapp.aesjni.AESEncrypt');
AESEncrypt.encode.overload('java.lang.String').implementation = function (a) {
console.log('AESEncrypt.encode.a: ', a);
var res = this.encode(a);
console.log('AESEncrypt.encode.res: ', res);
return res;
}
AESEncrypt.encodeByte.implementation = function (a, b) {
console.log('AESEncrypt.encodeByte.a: ', a);
console.log('AESEncrypt.encodeByte.a: ', javaString.$new(a));
console.log('AESEncrypt.encodeByte.b: ', b);
var res = this.encodeByte(a, b);
console.log('AESEncrypt.encodeByte.res: ', res);
return res;
}
}
function hookSo1() {
var AESBase = Module.findExportByName('libJNIEncrypt.so', 'AES_128_ECB_PKCS5Padding_Encrypt')
Interceptor.attach(AESBase, {
onEnter: function (args) {
console.log('-------------参数 1-------------');
console.log(hexdump(args[0]));
console.log('-------------参数 2-------------');
console.log(hexdump(args[1]));
},
onLeave: function (retValue) {
console.log('-------------返回-------------');
console.log(hexdump(retValue));
}
})
}
function main() {
Java.perform(function () {
hook();
hookSo1();
})
}
setImmediate(main);
// frida -UF -l hook.js
以上是 hook
代码,手机开启抓包,启动 hook
脚本,随便点点
AESEncrypt.encodeByte
函数的参数一,是请求的 params
,参数二目前不知道是啥
返回值是 aes
的加密结果,前面 java
层分析到,最后还有个 md5
验证一下
上面分别是 charles
抓的包,跟 cyberchef
运算的结果相同,那就确定了标准的 md5
再来看看 libJNIEncrypt.so -> AES_128_ECB_PKCS5Padding_Encrypt
函数,参数一是 url params
,参数二长度是 16 个字节,猜测是 aes-key
返回的结果正是 aes
加密的结果,使用 cyberchef
验证一下
正是标准的 aes
解密结果也是相同的
最后
分析结束,本想着拿这个 app 来练练 ida 动态调试的,没想遇到了很多对抗 ida 的手段,甚是烦恼啊,哪位大佬有这方面的经验,希望可以留言,在下愿意付费请教
白白嫩嫩
2022-03-26大佬 那个so为什么不是GameVMP 现在知道了吗
会爬山的小脑虎
2022-03-27@白白嫩嫩 没研究了,
嗄嗄
2021-11-22charles抓不到包,python执行报400 😭
会爬山的小脑虎
2021-11-22@嗄嗄 抓包你可以装个 xposed 插件,屏蔽 ssl,python 400 应该是参数问题
疯子
2021-11-15分析的真不错, 跟着大佬学知识
会爬山的小脑虎
2021-11-15@疯子 111111