Frida脱壳怎么搭

极客

Frida脱壳怎么搭?别急,这篇手把手教你从零配好环境!

说实话,第一次听到“Frida脱壳怎么搭”这个问题的时候,我脑子也是嗡嗡的,那会儿刚接触安卓逆向没多久,天天看别人说什么Hook、什么脱壳,感觉自己像个丈二和尚——摸不着头脑,后来折腾了好几个晚上,踩了无数的坑,才总算把Frida这套东西给跑通了,今天我就把自己摸索出来的经验,用大白话跟你唠唠,Frida脱壳到底怎么搭,保准你跟着做就能少走弯路!

Frida脱壳怎么搭

先搞明白,Frida到底是个啥玩意儿?

你可别一上来就闷头装环境,得先搞清楚自己在干嘛对吧?Frida说白了,就是一个动态代码插桩工具,啥意思呢?就是它能让你在App运行的时候,往里面“塞”自己的代码,偷看它到底在干啥,脱壳呢,就是利用这个能力,把加固后的App在内存里解密出来的原始Dex给“抠”出来。

所以啊,Frida脱壳怎么搭,核心就是两件事:一是把Frida的环境装好,二是写个能 dump 内存Dex的脚本。 听起来简单吧?嘿,坑多着呢!

环境搭建:PC端和手机端一个都不能少

PC端(也就是你电脑上)

首先你电脑上得装Python,建议用Python 3.8以上,别问为什么,问就是新版本兼容性好,然后打开命令行,直接一句:

pip install frida-tools

哎,别急,这里有个坑!你电脑上装的frida版本,必须和手机上的frida-server版本一模一样! 我第一次就是电脑装的16.x,手机端随便下了个12.x,结果死活连不上,报什么“unable to connect to remote frida-server”,气得我差点砸键盘。

所以装完之后,用 frida --version 看一眼版本号,记下来,等下手机端要用。

手机端(真机或者模拟器都行)

手机得Root,这个是前提,没Root的话你得用那种自带Root的模拟器,比如某神模拟器或者某Mumu,然后去Frida的GitHub Release页面,下载对应你手机架构的frida-server,怎么看架构?命令行里 adb shell getprop ro.product.cpu.abi 一下就知道了,一般是 arm64-v8a

下载完解压,推送到手机:

adb push frida-server /data/local/tmp/
adb shell
su
cd /data/local/tmp
chmod 755 frida-server
./frida-server &

搞定!这时候你在电脑上运行 frida-ps -U,如果能列出一堆进程名,恭喜你,Frida脱壳的环境已经搭好一大半了!

脱壳脚本怎么写?别怕,就那么几行

环境通了之后,就是写脚本了,Frida脱壳怎么搭的“搭”字,其实也包含搭脚本的意思,网上有很多现成的脱壳脚本,比如那个著名的 frida-dexdump,你直接:

pip install frida-dexdump
frida-dexdump -U -f com.xxx.app

它就能自动帮你把内存里的Dex给dump出来。你得知道它背后干了啥,不然出了问题你都不知道咋回事。

简单说,脚本的逻辑就是:枚举内存中所有符合Dex文件头(就是那个 dex\n035 或者 dex\n037 的magic)的内存段,然后把它们读出来保存成文件,核心API就是 Memory.scanMemory.readByteArray

我自己手写过一个简化版的,大概长这样:

Java.perform(function() {
    var modules = Process.enumerateModules();
    modules.forEach(function(module) {
        // 扫描内存中的dex magic
        Memory.scan(module.base, module.size, "64 65 78 0a 30 33 35 00", {
            onMatch: function(address, size) {
                console.log("发现Dex: " + address);
                var dexSize = address.add(0x20).readU32();
                var dexData = Memory.readByteArray(address, dexSize);
                // 保存文件...
            },
            onComplete: function() {}
        });
    });
});

是不是也没那么玄乎?当然啦,实际脱壳还会遇到抽代码、Dex混淆这些问题,但那是后话了,咱先把“搭”这一步搞定再说。

几个让我头大的坑,你可千万别踩

  1. 版本不匹配:再说一遍!PC和手机的frida版本必须一致,不然连都连不上。
  2. frida-server没权限:一定要 su 之后再运行,不然它会告诉你“permission denied”。
  3. 端口转发问题:有时候USB连不上,试试 adb forward tcp:27042 tcp:27042 手动转一下。
  4. 反调试检测:有些App会检测Frida,你一附加它就崩,这时候得配合Magisk的Zygisk或者用一些反反调试的脚本,那是进阶玩法了。

Frida脱壳怎么搭其实就三步

第一步,电脑装frida-tools,手机推frida-server,版本对齐。 第二步,手机Root并启动frida-server,电脑 frida-ps -U 测试连通。 第三步,用现成的 frida-dexdump 或自己写脚本,扫描内存dump Dex。

怎么样,是不是比你想象的简单?其实很多东西就是一层窗户纸,捅破了就豁然开朗,我当初也是被“Frida脱壳怎么搭”这个问题卡了好几天,现在回头看,真恨不得抽自己两巴掌——早该沉下心来一步步来的。

好了,今天就唠到这儿,如果你也在折腾Frida脱壳,希望这篇啰里啰嗦的文章能帮到你,有啥问题欢迎留言,咱们一起研究!记住啊,环境搭好只是第一步,后面的路还长着呢,别急,慢慢来!

文章版权声明:除非注明,否则均为极客网安-咸鱼原创文章,转载或复制请以超链接形式并注明出处。

目录[+]