某APP逆向分析与通讯解密

0x01 初始化

年轻人,你是否因看到这样的逆向结果而感到无力?

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

回归正题,拿到app后初步了解后有下面几个问题:

  • 无法抓包
  • 做了加固
  • 通讯加密

也是常见APP反篡改的手段了,简单记录一下自己是如何解决这些问题的。

0x02 加载中

无法抓包

姿势其实特别多,大部分app的做法都只是反代理,挂vpn是不会拒绝连接的,所以原理上只需要建一个虚拟vpn,使app流量通过这个vpn中转,中间环节解密流量即可。

参考工具
安卓:HttpCanary
苹果:Surge (随便问问有没有师傅组队买surge mac版的授权)

-w522

做了加固

已知思路有三,

  • 脱壳
  • 模拟人工
  • Hook包中的相关函数直接进行测试

脱壳前

脱壳方式/工具也是蛮多的,引用一位师傅说过的话:

1.默念一声"我想脱个壳"。
2.启动 APP。
3.启动 frida-server。
4.python main.py。

默数三秒,脱好了。

-w880

第二种方式的demo:

-w1225

第三中方式用的人最多,但是比较麻烦,加壳了找函数不方便,不加壳的话直接看代码硬怼就是行。

脱壳后

dex2jar,然后丢进反编译工具

找核心算法其实很容易,比如直接搜一下加密包中header的特征字段

-w450
-w1480

跟踪到下面的加密部分:
7C6DE6AD-DEC5-4D38-8D67-BCD2C7873D14
圈起来的为止就是加密的关键点了,点击一下跳过去即可。

6F2066C9-F42F-4A59-BBFE-E76001CA679D
传入的第一个字符串是需要加密的值,第二个是密钥。密钥可以在上上图中getEncryptAES(paramRequest)跟过去找到:

388D7F7D-0A24-406E-B0A8-194687ECF9D2

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

E32C1720-8214-434B-975F-FD9B65E82F9A

还可以顺手写成burp插件,方便进行漏洞测试:

216107F1-9491-4FE8-ACC4-91E5050D5F51
注册一个右键菜单方便在repeater里面加解密,注册一个payload处理,方便用于爆破之类的操作。

77583F6C-3A67-420B-B86A-4E94CFEF0A85

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

-w1480
-w627

一切顺利成章。

0x03 加载成功

抓包问题可以以微信为测试目标进行尝试,能抓到微信的其他的基本也就都可以抓到了;脱壳不能指望静态脱壳,还是多考虑怎么从内存中提取出dex来;通讯解密/反校验需要java基础,跟着代码构造出正确的数据包即可,看多了其实也就那么几种算法,各个算法加解密的要素了然于心后还原出解密代码不过copy一下,再解决反编译工具的错误即可;写burp插件也是一个样子,看多了就和套模板,背答案做题目差不多。

解决抓包,解决脱壳,再解决通讯加密后就是常规的web测试方法了,一切变得索然无味。

技术交流:

也无风雨也无晴