首先声明: 此次逆向只为学习交流使用,切勿用于其他非法用途,关键代码均已打码
简介:
上一篇主要是分享frida的一个介绍和使用, 现在我们使用frida来对一个安卓app进行一个实战破解, 本篇分享讲到一些java逆向,和简单的so分析,我大致讲一个app的逆向过程,有不懂的可以关注公众号留言,我会一一回复。
分享内容主要是为学习交流, 也希望可以大佬们一起学习,探讨。
工具(环境):
- APP
- charles
- Frida
- JADX
- IDA pro
逆向分析:
通过charles抓包分析看到, app走的都是post请求, 发现请求data里有个newSign,看着像md5, 请求headers 没啥重要信息, 那我们今天分析一下这个newSign是怎么来的。
使用JADX打开app
先使用搜索大法,看一下newSign,是否在代码中出现。
通过搜索大法, 跟出了这么一段代码, 因为我们想要的数据基本都是走的post请求,所以我们看第一个判断里, 是调用了RequestUtils 中的a函数和b函数。
用frida objection 看一下requestsUtils 类下的函数, 看到,方法下有4个函数,但是具体用到的只有两个,我们具体hook一下函数看一下返回值
通过hook发现,这个函数返回值和我们抓包一样
这是函数java层具体代码, 最后可以看到,把两个参数进行了一个aes加密,然后再md5。ok, 真相越来越近,继续往下跟AESEncrypt类都做了什么操作, 因为这个类里调用的都是AESEncrypt.b函数,所以我们直接去跟这个函数就好。
这里可以看到加载了so,还有N多个nativ函数,这些可以先不管,我们先hook一下b函数,传进来的参数都是什么。
传进来的两个参数,第一个是对象,可以先不管,因为根本没有用到,第二个 有没有觉得很眼熟!是的,就是data里的key和value相加的一个字符串, 其实到这里,根据上面的java层代码,我们已经可以猜出个大概,通过调用native 方法 getByteValues 获得一个 密钥,然后进行一个取反的操作,然后一起扔到so里做了些处理,然后aes加密扔了出来, 因为我们不知道是使用哪种模式,所以我们打开ida看一下so文件
打开so ,具体过程就不详述了, 最后是跟到这个函数,基本可以知道是一个aes 16位的加密了, 咱们最后用frida hook一下看看吧~~
ok 到这里,加密基本就已经清晰明了了, 这个密钥我看过了,是可以固定的。
请求body > 进行一个字符串操作 > aes加密 > md5 = newSign
接下来就可以用代码进行模拟一下,我用的是python其实啥都行。
python代码,通过。
通过之前我们对Frida用法的了解和掌握, 破解一个简单的app就非常简单了,
代码放到了我的公众号 爬虫攻城狮 回复 newSign
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/373250.html