今天,七夕,单身23载的程序汪,默默地写着博客~
上一次的逆向分析案例中讲了如何去分析某酒店的APP登陆请求,为了进一步学习如何逆向分析以及学习其他公司的网络传输加解密,本次案例将继续就登陆请求的数据加密进行分析,实现从网络抓包的密文到明文的转换,这次成为炮灰的是某点评的APP~
首先,分析的步骤还是和上一次分析某酒店的APP那样:
反编译-->找关键代码-->分析请求代码加解密原理-->验证密文到明文准确性。
分析步骤的重点主要是第3步和第4步,而且这两步往往是相互结合的,就有点像软件上的单元测试一样,每分析完一个加解密的地方就编写相应的测试代码去验证是否是分析中得到的加解密原理。
本次用到的工具有:APKTool(反编译),Sublime Text(smali阅读器),Xposed(hook方法,验证是否调用),Cydia Substrate(hook方法),Android Studio(编写Xposed和Cydia的hook模块),Eclipse(编写测试代码验证加解密原理),wireshark(抓包),IDA PRO(看so库),测试机。
说明:1、和上次不同,之后的分析我基本不会再用dex2jar和jd-gui这两个工具,为什么呢?因为它从smali转java不可靠,错的地方很多,只能辅助用,而且现在对smali语法已经比较熟悉,所以一般会直接看smali文件进行分析,嗯,这是进步~
2、为什么用了Xposed进行hook了,还要用Cydia来hook?因为APK反编译后,若体积较大,往往会分割成几个smali子文件夹,Xposed只能hook第一个smali文件夹下的smali文件,第二个smali文件夹下的smali文件是无法hook得到的,原因不明;其次,Cydia还能hook本地方法,也就是标记为native的方法。那为什么还用Xposed呢?这个我表示实在惭愧,Cydia最近才用,还不是很熟悉。。。
3、Xposed和Cydia都需要手机root过,而且最好不要同时安装在同一部手机,因为有可能会死机,或者发生日志输出冲突等情况。
明确需求:分析登陆请求数据的加密原理。
开始:
----------------------------------------------------------
利用APKTool对目标APK反编译,并用Sublime Text打开:
我们可以看到在整个反编译的工程文件夹下有三个smali的文件夹,其中第二个和第三个smali文件夹下的smali文件是无法用Xposed工具来hook的,所以需要用到Cydia Substrate。
通过关键字符串找关键代码,我们可以从登陆请求的网络抓包观察,输入账号密码后,在wireshark的过滤器输入“login”,按登陆的那一瞬间看看wireshark:
我们可以抓到一个TCP包,那么打开这个TCP流看看:
从抓包的TCP流可以看到有一段明文头(json格式)和拼接了一大段密文,很好,那段密文就是我们要解密的~
这里,我们可以推断,登陆没有用HTTP协议,所以我们可以推测登陆请求是用Sock