最近热爱健身, 用了一款app, 想分析一下这款app
今天是2025年五月, 我下载了一个历史版本. 大概是 2024年12月的一个版本. 打开app, 提示要更新, 并且是强制更新.
使用 frida hook 看看, nop掉弹窗
1 | Java.perform(function () { |
执行完后 黑屏, 有的时候执行完后 确实没有弹窗了, 但是app 其他功能无法使用. 无奈只好换新版本.
这次找到了一个较新的版本. 结果打开后就显示 ‘检测到该应用在hook环境中运行’, 然后程序就退出了.
此时我想 反编译一下 这个app,然后直接nop 掉检测. 于是我 jadx 打开app, 然后我看到了 com.netease.nis.wrapper, 这一款就是加了壳, 网易易盾.
于是我打算脱壳, 但是程序一打开, 不到一秒就直接退出了, 还没来得及暴力搜索 dex呢.
这可怎么办啊, 我想这换一种脱壳方式把?
等等, 过root 检测, 可以试试 Magisk + Shamiko。 我按照操作试了一下, 果然ok了, 程序不会再退出了.
贴上链接
按照教程 做到 ‘4、开启Shamiko模块’ 这一步 就可以过root检测了
为了防止失效, 我将网页缓存了一份
magisk_root.html
然后我用自己的手机号登录, 发现登录失败, 只能接收语音验证码 继续登录, 但是我的手机并没有收到语音验证.
所以我找了一个 小X分身工具, 结果刚打开, app又退出了, 提示 “检测到在双开app中运行”
我怀疑语音验证的包是不是真的发出去了, 否则我怎么接收不到语音验证呢? 我们抓包看看.
可能是有 ssl panning
我们用 lsposed 下装个 just trust me 看看.
结果app闪退, 提示 当前app在hook环境中运行.
emmm 还有什么方法能快速分析呢, 试试看 frida 把.
frida hook 结果闪退.
试试看 Strong frida. 结果也是闪退. frida hook 看看是加载了哪个so。然后程序退出的.
1 | var android_dlopen_ext = Module.findExportByName(null, "android_dlopen_ext"); |
原来罪魁祸首在这里. 这里更加确定是网易的盾了.
应该是这个so, 检测frida 然后就退出了. 一般 native层都是新开一个线程去检测的. 我们hook libc 的 pthread_create 的方法看看.
1 | var soaddr = null; |
可以看到, 加载了 libnesec.so 文件后, 这些 pthread_create 依此被调用
这些线程都有可能是检测frida的线程. 我们从后往前一个个试, patch pthread_create 方法.
我的运气很不好 试到最后一个, 他才是 检测frida 的线程
1 | var soaddr = null; |
ok 现在可以看到 frida没有退出了。
到这里, 发现app还是无法抓包. 我们 adb logcat 看看
1 | adb logcat | grep 20667 # 过滤 20667 进程的输出. |
打印如下
我们把这一段 copy给 chatgpt, 看看它能否帮我们生成frida hook 代码.
我们就用这段代码试试, 把这段代码插入到 patch thread_create 之后
1 |
|
然后我们 执行
1 | frida -U -f com.xxx.xxxx -l hook.js |
发现charles 可以正常抓包了.
想脱壳试试, 反正目前frida 也可以正常使用了.
试了 hook openMemery 似乎失败了, android 10 下签名变了.
1 | https://github.com/hluwa/frida-dexdump |
补充 最近遇到了一个 360的壳. 没有anti-frida
先使用 frida-dexdump 脱壳.
1 | frida-dexdump -FU |
部分报错
1 | ERROR:frida-dexdump:[-] Error: access violation accessing 0x7b6f5e7000 |
jadx 打开发现, 只脱下了一些非源代码的三方包.
接着试试 FRIDA-DEXDump
保证apk 运行, 然后执行如下脚本
1 | python3 main.py |
发现报错如下
1 | [Except] - Error: access violation accessing 0x7b6f5dc000 |
跟 frida-dexdump 效果差不多.
最后我们试试 frida_dump
1 | frida -U -f com.xxxxxxx -l dump_dex.js |
jadx 打开后发现成功脱壳.