针对某投资app协议字段及其加密方式的一次分析(Android Studio+smalidea)

在抓取某投资app的更新数据包时,发现数据字段进行了加密,:
在这里插入图片描述
如上图所示,请求包与返回的数据包均被加密,分析一波加密的方式。
先放进apk改之理里面,查看下其文件目录:
在这里插入图片描述
没有lib文件夹,说明字段的加密都在java层完成,这样就减轻了分析的难度(所以开发时尽量加密方式放在so层。。。)。
先搜索下key值:
在这里插入图片描述
查看其java代码:
在这里插入图片描述
根据函数名称显而易见,是对请求参数的加密,也就是对:
在这里插入图片描述
的字段信息进行加密。
跟进p2sDiyou,参数猜测因该是明文信息:
在这里插入图片描述
使用了AES加密的方式,跟进AESencrypt.encrypt2PHP方法,看参数名称第一个应该是密钥,第二个是传递进来的参数并处理:
在这里插入图片描述
看到了java中常用的AES加密方法,第一个参数为密钥,第二个为明文信息。
全局搜索SEND_AES_KEY字段:
在这里插入图片描述
全局搜索“sak”字段:
在这里插入图片描述
密钥直接写在了androidManifest.xml文件中。密钥为;3jm$>/p-ED^cVz_j~.KV&V)k9jn,UAH。

紧接着通过AS+smaliIdea的方式来动态调试下smali文件:(参考链接:https://blog.csdn.net/u013736724/article/details/53292855)
第一步:得到apk反编译后的smali文件
在这里插入图片描述
第二步:导入AS中,然后根据上述链接教程设置一下
第三步:再p2sDiyou函数处下断点
在这里插入图片描述
f7进入p2sDiyou方法:
对应的java源码是:
在这里插入图片描述
smali代码为:
在这里插入图片描述
从java源码里面可以看到p2sDiyou方法的参数就是明文信息,对应到smali代码中可以看到参数保存在v2寄存器中:
查看v2寄存器的值:
在这里插入图片描述
即为明文信息。
从p2sDiyou方法中可以看到,encrypt2php方法加密的第一个参数为密钥,上文已经得到其密钥信息,第二个参数为明文信息经过base64编码后的数据,从smali代码中可以看到保存在v1寄存器中,验证一下加密的结果是否和charles中抓到的密文信息一致。
v1寄存器值如下:
在这里插入图片描述
验证一下,AES加密如果不指定加密模式以及填充方式,默认为AES/ECB/PKCS5。
在这里插入图片描述
紧接着对返回的数据解密方式进行分析:
在这里插入图片描述
在这里插入图片描述
解密密钥为:
在这里插入图片描述
密文为+5pt3NX39dTHudZNypQ9fIuRe2s72wKLtGxTG1D4jA8VaS3fwQxFEJtW+GNSygkaSWMWrcaIaynxXyovbeE/JdQWcKfv03UxK+F+4LsadDrcLvzjwY4u6K6WF7LmtQV1BcTI1gs8Nw6WtaKnwt6d6LyloK/E7WriXpCz1rYra6wjgMmi3WL8ZxDzk1jqf56GEQ7KmB+Uf99S9WfSlRHPESD368IKHYU+pyH6Ke5xlfvMn1rtaigKd7zSV3OyuGl3
解密后可得明文。
在这里插入图片描述
在这里插入图片描述
xmdy协议字段类似。另外在动态调试时可能或出现Unable to evaluate the expression Cannot find source class for current stack frame的错误,可以右键作为String查看。

猜你喜欢

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