360加固一键脱壳工具
去年冬天帮一个做电商的加固键脱具朋友处理数据抓取的事,他的壳工APK被人用360加固了,扔给我一句“你搞安全的加固键脱具,帮看看”。壳工我花了两个晚上,加固键脱具最后靠一个叫“360加固一键脱壳工具”的壳工东西把活儿干完了。说实话,加固键脱具这东西名字起得挺直白,壳工但用起来确实省事,加固键脱具不过背后的壳工坑也不少。 360加固在国内移动安全圈子里算是加固键脱具个老面孔了。它的壳工原理不复杂,就是加固键脱具把原始DEX文件加密藏起来,运行时通过一个叫libjiagu.so的壳工native库动态解密加载。你直接反编译APK,加固键脱具看到的classes.dex基本是空壳,真正干活的代码全在加固后的文件里。早年搞逆向的人得手动dump内存、修复DEX头,一套流程下来没几个小时搞不定。 这个一键脱壳工具的核心思路就是自动化那套手动流程。它通常跑在Root过的Android设备或者模拟器上,通过Xposed或Frida hook住系统加载DEX的关键函数,比如 我实际用的时候,工具是个命令行脚本,依赖Frida server。手机是Pixel 3,Android 10,Root用的Magisk。启动目标App,脚本自动attach进程,等了大概十几秒,终端里刷出一行“Dumped to /data/local/tmp/classes.dex”。把文件pull出来扔进Jadx,代码结构清清楚楚,连混淆都没了——因为360加固本身不负责混淆,那是另一回事。 但别高兴太早。这工具对360加固的版本很挑。我试过某个电商App用的是360加固保3.0以上版本,加了反调试和内存校验,脚本刚attach上去进程就崩了。后来换了个老版本的加固样本才成功。所以“一键”这个词有点营销味道,实际上你得先确认目标APK的加固版本,太新的基本没戏。 另一个麻烦是DEX修复。dump出来的内存块不一定从文件头开始,工具得自己找DEX的magic number——就是“dex\n035”那串。有些加固方案会把多个DEX连续放在内存里,工具得能识别边界。我遇到过一次dump出来的文件Jadx打不开,用010 Editor一看,文件头多了16个字节的垃圾数据,手动砍掉才正常。 法律上也得留个心眼。这工具本身开源,GitHub上能搜到,但拿它脱壳别人的商业App,尤其是为了破解或者抄代码,那就不是技术问题了。我那次是朋友自己的App,他丢了签名文件,想从加固后的APK里恢复源码重新打包。这种场景下用用没问题,但别到处炫。 工具的作者更新不算勤快,最后一次commit是去年夏天。360那边倒是隔三差五升级加固方案,现在最新的加固已经用上VMP和指令抽取,光dump DEX根本不够,还得处理native层的代码还原。所以这工具更适合对付2022年之前的360加固样本,新的就别指望了。 如果你手头正好有个老APK要脱,流程大概是这样:准备一台Root手机,装Frida server,把工具脚本push进去,运行,等dump,pull出来,Jadx打开。整个过程快的话五分钟。慢的话,可能卡在反调试上折腾一晚上。技术工具就这样,宣传语永远比实际体验美好那么一点。OpenMemory或者DefineClass。等加固壳把真实DEX解密到内存里,工具立刻把这段内存dump出来,再修复一下文件头,一个能反编译的DEX就到手了。
-
上一篇
-
下一篇