对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)

在对某app抓包的过程中发现请求报文里有密文字段,想知道下密文传输了什么信息:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第1张图片
如上图所示,请求报文里协议的key为plaintext,但是value值却被加密,逆向分析一下。
首先,用apk改之理打开apk搜索key值:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第2张图片
很容易搜索到了,接着查看其java代码:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第3张图片
同时发现apk做了混淆保护。
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第4张图片
如上图,最终str3也就是plaintext作为key,advara作为value放到了hashmap里面。因此加密前的adVar就是我们想要的数据。搜索encryptRequest()函数:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第5张图片
转换为java源码:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第6张图片
跟进NativeUtils:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第7张图片
发现encryptString方法为native层方法。那么分析libdfjk.so:
首先先进行静态分析:so文件库函数列表里面搜索不到java_com/java_*之类的函数猜测是动态注册。
搜索下jni发现:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第8张图片
能找到jni_onLoad函数,f5伪代码看一下:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第9张图片
自定义的实现方法应该是off_14008这个函数,跟进:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第10张图片
发现自定义的方法名好像和java层一样没有变,应该是开发人员的疏忽。
既然找到了so文件中加密方法的位置,那么进行动态调试。
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第11张图片
moudle list里面找到encryptString方法:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第12张图片
f5看下伪代码:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第13张图片
这就是其加密后返回的字符串。根据伪代码推断,v3寄存器的值用为加密前的源数据。
直接在encryptString处下断点,f8一路跟进:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第14张图片
获取了设备的imei值,并且在打开app时没有提示我要获取权限。

再试一下hook java层的方法:
1)Frida
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第15张图片
hook一下encryptString方法:(动态插桩log应该也能解决,不过hook不用再修改smali重新打包)
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第16张图片
启动frida:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第17张图片
触发逻辑(刷新下首页):
在这里插入图片描述
2)Xposed
与Frida一样,hook相应的方法:
对某app通信协议加密字段的一次分析(IDA Pro动态调试、Frida、xposed Hook)_第18张图片

安装插件后,运行app查看log日志,可以显示明文:
在这里插入图片描述

你可能感兴趣的:(逆向,app协议分析,逆向,协议分析)