记一次APP抓包及分析:
1.分析报文,可知通信方式为HTTPS,有cert,data,sign三个数据段;
2.脱壳反编译,静态分析三段报文的构成方式,此处可用字符串搜索,ddms堆栈调用截取等方式判断调用函数;
3.frida确定调用函数,打印上一步找到的函数参数列表以及返回值,精确找到报文构成函数,此处可以得出a(String str)函数即为报文构成函数,分析此处代码可知,cer数据段为产生随机数的加密值;data数据段为通信数据报文加密值;sign数据段为签名值,构成为 sign=md5(data + "key=" + 随机数)
4.分析data段加密方式,使用jadx,jeb等工具分析data数据段加密方式,此处由 String a2 = c.a(str, str2, "UTF-8")可知data数据调用了c.a函数,跟进可得data数据报文使用了AES/CBC/PKCS5Padding对称加密算法,且明文硬编码key为 qwemoQAPydFvWWLq,初始化向量IV为 wOzCypMUYVuiQO9f,此时即可以加解密报文。
5.伪造报文,由上得知 sign=md5(data + "key=" + 随机数),此时固定随机数就可以伪造报文签名,进而伪造通信报文进行正常的数据通信。使用frida 将a(int i)函数固定为任意16字节字符串,写脚本伪造数据报文即可。
这里需要注意,加密后的报文要进过url编码;md5值需要区分大小写,此时既可以伪造请求报文,进行数据通信。