本机环境
1.mumu模拟器 2.httpdecrypt(https://github.com/lyxhh/lxhToolHTTPDecrypt) 3.frida 12.11.17 4.Mac os 10.15.5
|
分析过程
1. 使用mumu模拟器连接adb
adb kill-server && adb server && adb shell
|
安装时使用4.3.2版本 5.0版本报错
The client is using an unsupported version of the Socket.IO or Engine.IO protocols
|
pip install flask-socketio==4.3.2
|
2. 对注册功能抓包

可以看到securityCode以及post内容均为加密内容
3. 运行httpdecrypt

找到目标app 将app包名com.xxx.xxx填入框中并点击Confirm
4. 然后点击Hooks功能
在Match中输入刚才的包名 点击Confirm


5. 重新进行注册功能操作
根据数据包中的参数,找到对应的方法

com.xxx.xxx.ybblibrary.comm.commTools.tool.EncryptionTool$AES.encrypt(argType0 : object argType1 : string)
|

com.xxx.xxx.ybblibrary.comm.commTools.tool.EncryptionTool.EncoderByMd5(argType0 : string)
|

com.xxx.xxx.ybblibrary.comm.commTools.tool.EncryptionTool$AES.decrypt(argType0 : object argType1 : string)
|
6. 查看加密函数
com.xxx.xxx.ybblibrary.comm.commTools.tool.EncryptionTool$AES.encrypt(argType0 : object argType1 : string)
|
有两个参数 一个是对象 一个是字符串 我们还需要知道对象的具体的参数类型
在Finds中搜索函数的类名
com.xxx.xxx.ybblibrary.comm.commTools.tool
|
- 点击Confirm
- 找到方法名EncryptionTool$AES encrypt
- 可以看到其具体的参数类型

加密函数中参数对象的具体的类型为static
代码生成
1.转到toBurp模块 2.然后点击Confirm 3.点击add 由于这个加密函数有两个参数 所以需要自己编辑代码(默认只有一个参数) 4.由于对象参数是static类型 所以选择static类型 动态的选择instance类型
|

1. 在custom中会生成代码

arg0是传过来的加密字符串 arg1是Android的Context的对象
var context = Java.use('android.app.ActivityThread').currentApplication().getApplicationContext();
|
最终代码
'use strict';
var rpc_result = null; var rpc_result_ios = null; rpc.exports = {
tagf0f1c91ca14d835ab8ae6e62346a447d02: function(arg0, arg1){ Java.perform(function () { try{ var context = Java.use('android.app.ActivityThread').currentApplication().getApplicationContext(); var EncryptionTool$AES0224190b5b0f850f45017089f29e6428 = Java.use("com.xxx.xxx.ybblibrary.comm.commTools.tool.EncryptionTool$AES"); rpc_result = EncryptionTool$AES0224190b5b0f850f45017089f29e6428.decrypt(context,arg0); // send(JSON.stringify({"aa":"bb","aa1":"bbb"})+'-cusoto0oom0sc0ri0pt-') }catch(e){send("tagf0f1c91ca14d835ab8ae6e62346a447d02, " + e + "-er00roo000r-")} }); return rpc_result; }, // Added Function tag24239e10fd5afd01a5459978c4306b1f02: function(arg0, arg1){ Java.perform(function () { try{ var context = Java.use('android.app.ActivityThread').currentApplication().getApplicationContext(); var EncryptionTool$AES2b8ecc9bd5061994b912287f6411ac57 = Java.use("com.xxx.xxx.ybblibrary.comm.commTools.tool.EncryptionTool$AES"); rpc_result = EncryptionTool$AES2b8ecc9bd5061994b912287f6411ac57.encrypt(context,arg0); // send(JSON.stringify({"aa":"bb","aa1":"bbb"})+'-cusoto0oom0sc0ri0pt-') }catch(e){send("tag24239e10fd5afd01a5459978c4306b1f02, " + e + "-er00roo000r-")} }); return rpc_result; }, // Added Function
}
|
2.loadScript
点击左上角loadScript
3.在burpsutie中进行设置
下载burp插件HTTPDecrpyt并进行安装
https://github.com/lyxhh/lxhToolHTTPDecrypt/releases
选择到encrypt 然后右键发送到toBurp模块

选择加密后的数据 然后根据配置的方法进行解密


参考链接
http://www.ironheart.top/index.php/archives/22/
https://xz.aliyun.com/t/7130
https://www.t00ls.net/articles-51070.html#tls4