APK脱壳实录(坠机)

记录一次APK脱壳从无到有的全过程(对于列题不合适,示例apk会获取root权限切断abd连接)

无论是apk的动态调试,还是apk的脱壳的过程,所需要用到的不变的工具就是adb,所以这里先将adb的安装

windows

就去github上面找adb然后下载,最后解压然后把adb.exe文件配置到环境变量中即可。

linux(踩坑了)

就执行一下sudo apt install adb就可以,如果出现说,还有软件包没下载的话,就执行一下sudo apt-get update。

因为看到的一部分脱壳资料的影响,我决定把使用linux环境下的adb进行脱壳尝试。

linux下的adb连接模拟器(也是个人踩坑,但万一有人需要呢)

我们根据其快捷方式打开到其文件夹所在的位置,找到shell文件夹,然后在这里开启终端,一般是adb.exe devices,就可以知道模拟器的端口
img
img
img
可以知道这个正在运行的模拟器的端口,我们最终是通过这个端口进行adb连接的,不过因为我们要使用linux虚拟机进行连接,所以这里我们要使用端口转发进行adb连接。

netsh interface portproxy add v4tov4 listenaddress=v4ip listenport=62026 connectaddress=127.0.0.1 connectport=62026

listenaddress=v4ip:宿主机的本机 IP

listenport=16384:外部访问的端口

connectaddress=127.0.0.1:转发到本地回环地址

connectport=16384:内部 ADB 服务的实际端口

img
img
如上图所示,到这里我们就成功达成让虚拟机连接上模拟器的操作了

remake了

在遇到问题之后又不断学习之后,通过我自己问和学结果,我发现其实在物理机上其实效果好像会更好一点,我之前之所以会选择使用虚拟机连接模拟器是因为我的frida出了一堆问题,在休息脑子一会之后,我搜集资料和动手尝试最终解决了frida中个人遇到的各个问题。

window上下载frida的方式重新再总结一遍

这里我不对frida和frida-tools的版本进行限定和什么稳不稳的说法,在我搜集资料的过程,我发现低版本会有低版本的问题,高本版的问题作者是在不断修复的,所以我个人直接就是pip install进行安装的,不过唯一要注意的是网上不少教程中的指令frida的指令是低版本的,高版本的指令被修改了一部分,参考:https://book.crifan.org/books/reverse_debug_frida/website/common_issue/universal/pause_or_no_pause.html

  1. 下载firda本身,首先是python3的环境,这里不进行细说,因为网上一堆,唯一作提示的就是frida目前支持的版本是python3最高版本是10,高了可能会导致一些莫名其妙的问题,当出现一些网上找不到的莫名其妙的问题可以考虑这个原因喵。win+r唤出cmd,然后pip install frida,有些人可能习惯在pip之前先开代理,但是这里要说,frida开了代理有时候莫名其妙的会在pip过程报错。所以如果pip报错的时候可以尝试关掉代理解决。

  2. 下载frida-tools:然后pip install frida-tools,代理的话也同样可能出现上面提到的问题。如果正常安装就进行下一步。

  3. 下载objection:pip install objection,这个不怎么容易出什么问题,包括上面说的也不容易出。

注:若要指定进行pip低版本的frida和frida-tools的安装,如果pip版本过高可能会导致出问题,如果非得进行低版本的安装,将pip版本降低一点,最好是python3.7对应的pip版本

在下载完所有的工具之后,我们进行frida在脱壳方便的使用,这里我听别人的话用github的寒冰佬的fart进行尝试脱壳。

自己搜索github fart可以下载得到。

1.进行adb的连接
要连接模拟的adb调试,要先知道其adb的端口是什么
img
这里我的是mumu模拟器,得到端口是16384之后直接进行adb连接。
img
这里使用adb connect连接之后,我进入shell看看有没有办法进入root权限。可以进入之后确定基本的权限有了我就尝试把firda运行需要的文件先传入进去。

2.传入并运行frida-server
先看看自己的frida版本。
img
我这里是16.7.11最新的,所以去frida的github上下最新的frida-server,注意一定要下版本一样的frida-server,然后就是查看模拟器架构看看下哪一个架构的。
img
可以这样查看模拟器架构,也可以直接输入:

adb shell getprop ro.product.cpu.abi

这里我的是x86_64所以下对应架构的frida-server。
img
然后把其传入模拟器中的/data/tmp/中,没有tmp文件夹的使用mkdir进行创建。
img
在文件所在处唤起cmd然后把frida-server文件传入到tmp中,最后进行赋予权限

adb push frida-server /data/local/tmp/
adb shell
su
cd data/tmp/
chmod 777 frida-server

赋予权限之后,就可以运行frida-server了。
img
就会进入如上的状态。这个界面不能关,保证服务运行,先进行接口转发。
img

验证一下:
img
可以看到正常回应了,证明frida连接成功。

3.fart脱壳的准备和使用
下载完fart解压之后,会得到如下的文件。
img
可以看到很显眼的一个frida的前缀,把哪个压缩包解压之后可以得到lib文件和脱壳的脚本。
img
得到如上的文件之后我们的前置工作是把lib文件夹里面的文件传入到/data/app中,并进行赋予权限。
img
传入并赋予权限之后我们可以尝试进行脱壳了。
img
先尝试一下连入问题,是可以正常连入的。

运行app进行脱壳尝试
这里的文件是2022的长安杯的apk文件
img

查看包名,使用APK Messenger查看包名
img
有包名了。
运行app,然后使用这个脚本进行脱壳

img

frida -U -N cn.forensix.changancup -l 

img
显示如下:
img
附加脚本到程序上失败了。
img
frida的程序看着也没有断。
一开始我还以为是我的脚本和frida问题,寻寻觅觅又花了很多时间,最终发现是如下的问题:

在题目背景下这个是个勒索软件,但是其运行之后会获取到最高的系统权限的,其拿到之后,就会切断adb的连接,从而使frida也连接不上了,所以并没有出问题,只是这种方法对于这个题目本身就行不通,所以
我坠机了。

posted @ 2025-04-19 22:04  喵老师哒哟  阅读(329)  评论(0)    收藏  举报