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

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

再试一下hook java层的方法:
1)Frida
在这里插入图片描述
hook一下encryptString方法:(动态插桩log应该也能解决,不过hook不用再修改smali重新打包)
在这里插入图片描述
启动frida:
在这里插入图片描述
触发逻辑(刷新下首页):
在这里插入图片描述
2)Xposed
与Frida一样,hook相应的方法:
在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/weixin_42011443/article/details/102537215