安卓逆向加密篇(二):某应用数据加密逆向分析过程

一.前言

近日对某APP进行网络请求接口分析时,发现接口请求数据是明文没有加密,但响应数据加密了,如下图。按照之前的经验对其逆向分析,并记录下该次逆向分析过程。

二.逆向过程

1.先看被加密的字符串,结尾带有"==",先使用Base64尝试解密一下,想必也不会这么简单,果然解密得到的是乱码。

2.查壳发现该APP并没有加壳,那就好办一点了,拖进jadx工具来分析。

接口返回数据结构是json,并且只有一个"data"字段,得到响应数据之后APP是要将数据转成json并且获取"data"字段解密,因此先尝试搜索"data"看看,有几个结果比较有嫌疑,但进去看并没有什么价值。

 该APP使用了Retrofit网络库,接口设计应该会很规范,于是再从接口Api入手,随便搜索一个接口"/api/block/list",发现所有的接口都被定义在一个ApiService了,找一个就行了

 注意接口的返回类型,里面是MultiVideosResp类,并不是原始字符串类型,进入该类看看

 使用过Retrofit进行网络请求的都知道,如果响应是一个自定义类,那么json字段和对象的属性是相对应的,但是这个MultiVideosResp并没有"data"属性,去看看它的父类BaseBean

在这里发现这个类定义了"data" 属性,所以响应数据中的"data"字段的值,也就是加密的字符串会赋给这个类的"data" 属性,查看getData()的调用,找到一个地方

到这里就弄清楚了,先是Retrofit响应数据赋给BaseBean,然后再经Rxjava处理,将data解密后去构建目标类,也就是MultiVideosResp类,解密类的具体代码就不展示了,拿一个加密字符串尝试解密,结果如下图:

至此,逆向结束。

三.结语

总的来说, 整个逆向过程并不曲折,基本凭经验逆向调用栈,这也是一种常见的逆向思路,我称之为自顶向下的分析方法。在这里例子,还可以采用至底向上的分析方法,那就是直接去搜加密类Cipher,这是Java的原生类,基本常见的加密方式都要用到这个类,然后从加密/解密的方法向上查看调用栈来确定是不是由该方法加密/解密。

本教程基于本身需求经验编写,只供参考学习,不足之处还请指正,欢迎伙伴们来一起探讨交流!

猜你喜欢

转载自blog.csdn.net/wsfsp_4/article/details/128690030
今日推荐