前言
注意:本教程只用于学习交流 请勿利用其行不法之事 分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
准备
sunny
frida
ida
jadx-gui
jeb
ida
unidbg
一、抓包
app:联不通
加固:梆梆企业版
通过抓包发现提交数据和返回数据均已加密
二、脱壳反编译定位
定位到以上位置
frida hook 明文
{“orderCache”:“{“commonActivityState”:“1”,“commonId”:“xxxxx”,“eleActivityState”:“0”,“eleAmount”:“0”}”,“toolExpand”:“{“toolActivityId”:”“,“toolActivityState”:“0”,“toolCode”:“ZL”,“toolId”:“ZL”}”,“fromToolExpand”:“{“toolActivityId”:”“,“toolActivityState”:“0”,“toolCode”:“ZFB”,“toolId”:“ZFB”}”,“tradeOrderNo”:“xxxxxxx”,“commReqHeader”:{“commonReqExtendStr”:“xxxxx”,“trace_id”:“xxxxxx”,“tokenId”:“”,“payUid”:“xxxxxx”,“appVer”:“11.0601”,“iMei”:“”,“channel”:“225”,“rptId”:“”,“userTokenId”:“xxxxxx”,“did”:“xxxxx”,“mac”:“02:00:00:00:00:00”}}
1.unidbg模拟
搭台子 代码如下(示例):
zglt(){
emulator = AndroidEmulatorBuilder.for64Bit().setProcessName("com.sinovatech.unicom.ui").build(); // 创建模拟器实例
final Memory memory = emulator.getMemory(); // 模拟器的内存操作接口
memory.setLibraryResolver(new AndroidResolver(23)); // 设置系统类库解析
try {
vm = emulator.createDalvikVM(TempFileUtils.getTempFile("/zglt/base.apk")); // 创建Android虚拟机
} catch (IOException e) {
throw new RuntimeException(e);
}
vm.setJni(this);
vm.setVerbose(true); // 设置是否打印Jni调用细节
DalvikModule dm = null;
try {
dm = vm.loadLibrary(TempFileUtils.getTempFile("/zglt/libJMEncryptBox.so"), true);
} catch (IOException e) {
throw new RuntimeException(e);
}
dm.callJNI_OnLoad(emulator);
2.调用
报错 补环境
继续补
继续
继续
补
补
补
ok 成功出结果