type
status
date
slug
summary
tags
category
icon
password
目的:探究某次元的信息加密方式

抓包

notion image
如图,在应用中我们搜索一点东西,能抓到这些内容,在句号之前是固定344长度的数据,句号后面是不固定长度的数据,可以猜测这些内容是我们搜索出来的东西的密文。句号之前固定长度的数据应该是key

flutter恢复

notion image
我们解包apk可以发现它是flutter框架的app,那程序的主要内容都在libapp.so里面,这个文件内容庞大且没有符号表,手动定位我们需要的函数是不现实的。

blutter配置使用

这时候就需要用上我们的blutter工具
直通车https://github.com/worawit/blutter
下好过后进入blutter目录执行初始化环境的脚本
这一步是为了避免出现ICU库报错
然后需要GIT和CMAKE,并在VS的工具中把CMAKE相关扩展都装上
其他问题没遇到,不知道还有没有其他环境支持
使用
把flutter框架的apk解包
然后就能得到如下文件
notion image
其中,ida_script文件夹下的addNames.py就是我们用来恢复符号表的关键
在IDA中打开我们的libapp.so,然后File -> Script file / Alt + F7,选择刚刚的addNames.py文件即可

逆向

刚刚我们已经恢复了符号表,那就需要在libapp.so中定位关键逻辑了
前文提到过我们猜测那里是加密后的数据,那就搜索Encrypt或者Decrypt函数
notion image
notion image
根据函数名,几乎可以确定加密主体有AES和RSA,
然后我们知道是native层的函数,函数地址也知道,逐条分析逆向的难度也不小,可以用frida尝试去hook
最终我们可以在decrypt的0x822d84处函数hook出密文和明文
  • 这里函数后面的hex数据都是在libapp.so的基地址上的偏移量
notion image
那么这个函数就肯定有用,我们多hook几次仔细看看hook日志
可以发现,我们每次hook这个函数,启动程序后frida一共会hook两次arg0和返回值分别为
notion image
notion image
arg0的值是固定的,都是密文,返回值一共有两次,第一次是固定16字节的字符串,第二次是明文
tips:AES的key一般是16字节
分别去hook 822d84里的函数
notion image
这个是就是关键加密函数,且是根据刚刚的hook结果,我们知道第一次这个函数返回16字节的key,第二次返回明文。所以我们要根据这个函数去追
notion image
交叉引用可以发现只有8ab12c调用了两次,那么这就是最关键的整个加密函数
hook出来的完整密文,以"."分开,前面334字节是key,后面是加密数据
理一下这里面的内容,可以得到:
这里就有两个问题,RSA要解密需要私钥;AES解密需要确定其模式,找到key以及可能需要iv
我们先去尝试处理key

过程1 处理key

0x8ab12c函数里我们按0x822d84函数两次调用作分割
由于第二次调用返回值已经是明文了,那么我们只需要关注第一次调用之前和第一次、第二次调用之间的内容
notion image
这个函数名尤为扎眼,分配RSAkey,那么hook这个函数试试
notion image
这个函数的传入参数就是RSA的私钥,破案了
我们取长一点,把完整私钥提取出来,且hook了好几次,确定了私钥是固定的
得到完整私钥:
写脚本试试解密key,试了几个填充方式过后发现为PKCS1_no_padding
这里刚好是16字节的数据

过程2 得到明文

16字节的数据,结合hook 822d84函数时两次调用第一次返回值为16字节数据,可以猜测这个16字节就是第一次调用的返回值
验证
我们重新hook一组
notion image
密文对上了,那么我将前面334字节密文key解密,应该就和左边hook的结果一致
notion image
没问题,我们推测成功
这个十六字节的数据大概率就是解密加密数据时的AES key
notion image
通过1,能发现是有分配IV的,那么可以确定是AES-CBC模式
而在设想中,AES的key我们已经找到,那么就需要找IV,这里的2有reverse,比较扎眼,hook试试
notion image
可以发现,确实只是把key做了一个反向操作
第一次调用和第二次调用822d84之间,把其他疑似函数都hook尝试了,没有找到我们需要的iv
那么,我们又可以来猜,AES的key和iv就是互为反向的16字节字符串
notion image
尝试成功,转成UTF-8导出
notion image

总结

还是比较复杂的过程,hook和看逻辑给我看麻了,不过最后搞成功
把加密数据提取出来,以"."为分界线分为key_enccipher,最终逻辑为:
 
Frida-labs本地大模型部署
Loading...
Sh4d0w
Sh4d0w
漫长学习路ing
最新发布
360加固复现学习
2025-6-15
java反射机制
2025-6-14
classLoader机制
2025-6-14
dex文件结构
2025-6-14
APP启动流程
2025-6-14
JNI学习
2025-6-14
公告
Welcome to Sh4dw’s blog!
敬请指导,Q 467194403