yinsel 发表于 2024-3-10 19:14

某APP的网络逆向分析过程

本帖最后由 yinsel 于 2024-5-26 23:57 编辑

# 记一次渗透过程中某APP的逆向分析过程

## 0x01 使用`Reqable`抓包

使用`Reqable`配合`JustTrustMe++`Xposed模块对App进行抓包,发现响应加密,看起来像`Base64`和`AES`:

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231535610.png)

没办法只能尝试逆向APP了,用`JEB`打开一看,竟然混淆了类名和方法名:

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231535627.png)

直接去找加密逻辑估计够呛,先用`算法助手`尝试一波解密看看:
## 0x02 使用算法助手尝试解密

环境:光速虚拟机 + `Magisk Delta` + `LSPosed`

勾选对应APP:

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231535681.png)

一顿操作过后查看`算法助手`的日志,找到上方抓到的密文了,密钥等信息也有:

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231535736.png)


![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231535799.png)

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231535862.png)
## 0x03 使用JEB定位加密位置

但是依旧解密后乱码,虽然有的显示了一点明文,但估计后面还有一层处理,查看细节可以发现使用的加密类是`javax.crypto.*`,而这个类使用的加密API是`javax.crypto.Cipher`的`doFinal`方法,再次使用`Jeb`全局搜索`doFinal`查看调用的地方(这里也可以看上方算法助手的调用堆栈也能定位到此处):

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231535914.png)

40处匹配,经过全部筛选后发现有一处看似网络拦截器的地方调用了`doFinal`方法:

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231535964.png)

查看一番果然它对数据进行还进行了`GZIP`解压缩:

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231536012.png)

为了验证一下是否如此,决定采用`Xposed`的方式进行Hook(也可以使用`frida`),Hook`e0.m`的第二个参数:

## 0x04 使用Xposed拦截明文

这里使用的是`YukiHookAPI`,相对于原始的`Xposed API`调用更加简介方便。

编写模块:

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231536075.png)

启动APP开始Hook,成功获取明文:

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231536129.png)

使用在线网站尝试解密:

https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)AES_Decrypt(%7B'option':'UTF8','string':'ecfcgadhgegadgjm'%7D,%7B'option':'Hex','string':'00000000000000000000000000000000'%7D,'CBC','Raw','Raw',%7B'option':'Hex','string':''%7D,%7B'option':'Hex','string':''%7D)Gunzip()&input=aXNzS01FWkxrSFplTDZYOFh5Q3ErcTZSSnRzM2c3emVnZVMyWHkyVW5yM28veExSeVF3ZXIrTjZsaGZhaVpua3FBbTdGc0s0dUFydHhtbHd5TXhtWVlLUm1ZVnFPbExheS83aERKNWZtc009&oenc=65001

https://gchq.github.io/CyberChef/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)AES_Decrypt(%7B'option':'UTF8','string':'ecfcgadhgegadgjm'%7D,%7B'option':'Hex','string':'00000000000000000000000000000000'%7D,'CBC','Raw','Raw',%7B'option':'Hex','string':''%7D,%7B'option':'Hex','string':''%7D)Gunzip()&input=RytXN0NDNnJIa2VHUlUwVWZCTkRkcWRMdmlFZ1kvQ09GNVhMTWVqVnYxZUhac0N3NDdPcHQrc1hnaFR0SE5sK09iTkpGRU05S2JTWVhORzhHZnkxY2NkYjBiZzhJSnlJRk90WlAzRjFybWRBSWZSMGY1L1Erd3NrWFl5KzNwUHRlWng3bnZ2YnlVbUFMVlcyUHFzRHBVTHBTNlNwVENEaHpOZmRNelB1cmhXWjJRaTY2WXdZOXJDajdqQzZNWDkrL1kyY1RzakpwQk9FUS93R0xyZ05SSlhnTjV5M1Z2WFJnd3FDVjh3WGZjMD0&oenc=65001

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231536160.png)

使用`Python`脚本解密:

```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64
import gzip
from io import BytesIO

def decrypt_aes_cbc_pkcs7(key, iv, ciphertext):
    cipher = AES.new(key, AES.MODE_CBC, iv)
    decrypted = unpad(cipher.decrypt(ciphertext), AES.block_size)
    return decrypted

def main():
    while True:
      try:
            encrypted_data = input("密文: ")
            key = b'ecfcgadhgegadgjm'
            iv = b'\x00' * 16
            encrypted_data = base64.b64decode(encrypted_data)

            decrypted_data = decrypt_aes_cbc_pkcs7(key, iv, encrypted_data)
            with gzip.GzipFile(fileobj=BytesIO(decrypted_data), mode='rb') as f:
                decompressed_data = f.read()

            print(decompressed_data.decode('utf-8'))
      except Exception as e:
            print(e)

if __name__ == "__main__":
    main()
```

![](https://redcellsec.cn/resources/images/03-记一次渗透过程中某APP的逆向过程/IMG-03-记一次渗透过程中某APP的逆向过程-20240526231536199.png)

到此分析完毕!
## 0x05 总结

本次APP逆向过程需要熟练各种工具的使用以及环境的配置,如使用`Magisk`,而大部分人的手机都没有`root`,所以得使用虚拟环境,也就是**光速虚拟机**,还有一些诸如`Reqable`、`JEB`、**算法助手**、`YukiHookAPI`这些大佬开发的工具或者技术,感谢这些大佬们开发的工具,如有需要这些工具可以直接关注公众号发消息,免费提供!
## 0x06 相关链接

Reqable:https://reqable.com/zh-CN/

算法助手:https://github.com/Xposed-Modules-Repo/com.junge.algorithmaide

YukiHookAPI:https://highcapable.github.io/YukiHookAPI/zh-cn/

JEB:https://www.pnfsoftware.com/

## 声明

本文所提供的信息仅供学习和研究网络安全技术之用途。读者在使用这些信息时应自行判断其适用性,并对其行为负全责。作者不对任何读者因使用本文中信息而导致的任何直接或间接损失负责。

转载须知:

如需转载本文,请务必保留本文末尾的免责声明,并标明文章出处为**红细胞安全实验室**,同时提供原文链接。未经许可,请勿对本文进行修改,以保持信息的完整性。

感谢各位师傅们的理解与支持。

本公众号不定期更新一些技术文章,还麻烦各位师傅们点点关注,这样才不会错过哦。

yinsel 发表于 2024-3-13 18:53

wfghim 发表于 2024-3-13 16:24
拿不到文件,要密码

下载:https://wwo.lanzoul.com/ig3Zq1r8j8ji 密码:5ibb

oogo 发表于 2024-6-28 21:10

“佬开发的工具或者技术,感谢这些大佬们开发的工具,如有需要这些工具可以直接关注公众号发消息,免费提供”

公众号多少啊 貌似没看到😳

o0蜗牛 发表于 2024-3-11 16:46

本帖最后由 o0蜗牛 于 2024-3-11 16:47 编辑

向大佬学习,俺是一脸懵
这类app大佬想看就能看,我是被拦在门外的{:1_925:}

yinsel 发表于 2024-3-11 18:55

o0蜗牛 发表于 2024-3-11 16:46
向大佬学习,俺是一脸懵
这类app大佬想看就能看,我是被拦在门外的

我也是刚学,一起交流!

meder 发表于 2024-3-11 22:53

感谢分享

yinsel 发表于 2024-3-11 23:48

meder 发表于 2024-3-11 22:53
感谢分享

一起学习

xiaojian40 发表于 2024-3-12 02:07

学习啦.这段时间正好也在学习类似的需求..   

DongFangMingZhu 发表于 2024-3-12 08:24

yinsel 发表于 2024-3-11 18:55
我也是刚学,一起交流!

大佬您好,能不能分享下学习方法、学习路径和学习资源

dhsfb 发表于 2024-3-12 08:40

向高手学习!!!

yinsel 发表于 2024-3-12 10:05

dhsfb 发表于 2024-3-12 08:40
向高手学习!!!

一起学习!

yinsel 发表于 2024-3-12 10:07

DongFangMingZhu 发表于 2024-3-12 08:24
大佬您好,能不能分享下学习方法、学习路径和学习资源

了解下javaapk的基本构成基本的android机制、组件,xposed的API使用,hook的基本原理
页: [1] 2 3 4 5 6
查看完整版本: 某APP的网络逆向分析过程