某APP逆向分析与通讯解密
0x01 初始化
年轻人,你是否因看到这样的逆向结果而感到无力?

你是否为抓不到包而感觉渗透失去了意义?

回归正题,拿到app后初步了解后有下面几个问题:
- 无法抓包
- 做了加固
- 通讯加密
也是常见APP反篡改的手段了,简单记录一下自己是如何解决这些问题的。
0x02 加载中
无法抓包
姿势其实特别多,大部分app的做法都只是反代理,挂vpn是不会拒绝连接的,所以原理上只需要建一个虚拟vpn,使app流量通过这个vpn中转,中间环节解密流量即可。
参考工具
安卓:HttpCanary
苹果:Surge (随便问问有没有师傅组队买surge mac版的授权)

做了加固
已知思路有三,
- 脱壳
- 模拟人工
- Hook包中的相关函数直接进行测试
脱壳前
脱壳方式/工具也是蛮多的,引用一位师傅说过的话:
1.默念一声"我想脱个壳"。
2.启动 APP。
3.启动 frida-server。
4.python main.py。
默数三秒,脱好了。

第二种方式的demo:

第三中方式用的人最多,但是比较麻烦,加壳了找函数不方便,不加壳的话直接看代码硬怼就是行。
脱壳后
dex2jar,然后丢进反编译工具
找核心算法其实很容易,比如直接搜一下加密包中header的特征字段


跟踪到下面的加密部分:
圈起来的为止就是加密的关键点了,点击一下跳过去即可。
传入的第一个字符串是需要加密的值,第二个是密钥。密钥可以在上上图中getEncryptAES(paramRequest)
跟过去找到:

加密算法代码已知,密钥已知,那顺手就可以copy出来自己加解密了:

还可以顺手写成burp插件,方便进行漏洞测试:
注册一个右键菜单方便在repeater里面加解密,注册一个payload处理,方便用于爆破之类的操作。

打包一下就可以扔给burp了。


一切顺利成章。
0x03 加载成功
抓包问题可以以微信为测试目标进行尝试,能抓到微信的其他的基本也就都可以抓到了;脱壳不能指望静态脱壳,还是多考虑怎么从内存中提取出dex来;通讯解密/反校验需要java基础,跟着代码构造出正确的数据包即可,看多了其实也就那么几种算法,各个算法加解密的要素了然于心后还原出解密代码不过copy一下,再解决反编译工具的错误即可;写burp插件也是一个样子,看多了就和套模板,背答案做题目差不多。
解决抓包,解决脱壳,再解决通讯加密后就是常规的web测试方法了,一切变得索然无味。
技术交流:
- WX:TheKingOfGaGaGa
- Github:https://github.com/TheKingOfDuck

也无风雨也无晴