[1197]脱壳工具dumpDex、frida_dump、BlackDex

脱壳工具dumpDex的使用详解

dumpDex概述

dumpDex: 一个开源的 Android 脱壳插件工具,需要xposed支持。可以用来脱掉当前市场上大部分的壳。(360加固、腾讯乐固、梆梆加固、百度加固均可脱壳)

支持大多数xposed环境的手机,暂不支持模拟器

github地址:https://github.com/WrBug/dumpDex,可以直接下载release的apk,也可以自行编译打包成apk安装到手机

使用方法:

安装插件,重启手机,打开加固的apk,脱壳的后的dex会在/data/data/对应包路径/dump文件夹下

脱壳原理:

1、根据类名查找当前运行的 APP 是否存在支持的加密壳(360加固、爱加密、梆梆加固、腾讯加固、百度加固);

2、存在支持的加密壳的情况下,根据手机的 Android 版本进行不同的处理,Android 8.0 及以上手机走 NDK 方式,其它低版本手机则走 Hook 方式;

3、Hook 方式,主要是通过 Hook Instrumentation 类的 newApplication() 方法和 ClassLoader 类的 loadClass() 方法,获取 Application 或 Activity 所在的 dex 的数据;

4、将这些数据导出到 APP 所在路径的 dump 子文件夹里的 dex 文件。


识别APP是否加固的小方法

1、将app解压出来查看assets目录下,是否有对应的so文件,这个目录下的so文件名称是可以作为识别是什么加固厂商的方法

2、将app拖到反编译工具,如jadx工具上,通过工具可看出Application的入口类是否被替换,以及是否存在加固厂商的特征

PS:APP的Application类中的attachBaseContext和onCreate这两个函数是最先获取执行权进行代码执行的。这也是为什么很多加固工具的主要逻辑都是通过替换APP入口Application,并自实现这两个函数从而达到加固的效果

Frida 脱壳工具

壳的分类

壳的种类非常多,可以简单的分为以下三类:

  • 一代整体型:采用Dex整体加密,动态加载运行的机制(免费类的壳)
  • 二代函数抽取型:将方法单独抽取出来,加密保存,解密执行(某加密)
  • 三代VMP、Dex2C:独立虚拟机解释执行

Frida-Unpack

firda-unpack 原理是利用frida hook libart.so中的OpenMemory方法,拿到内存中dex的地址,计算出dex文件的大小,从内存中将dex导出,我们可以查看项目中的 OpenMemory.js 文件中的代码更清晰直观地了解

项目地址:https://github.com/GuoQiang1993/Frida-Apk-Unpack

frida -U -f   com.APK进程名   -l. dexDump.js. --no-pause

PS:将 dex 文件并 dump 下来,保存在 data/data/packageName 目录下

frida-dexdump

脱壳后的dex文件保存在PC端main.py同一目录下,以包名为文件名

项目地址:https://github.com/hluwa/frida-dexdump

frida_dump

文件头搜索dex,来脱壳

项目地址:https://github.com/lasting-yang/frida_dump
https://github.com/AloneMonkey/frida-ios-dump

PS:会搜索 dex 文件并 dump 下来,保存在 data/data/packageName/files 目录下

FART

Frida 版的 Fart, 目前只能在 andorid8 上使用该frida版fart是使用hook的方式实现的函数粒度的脱壳,仅仅是对类中的所有函数进行了加载,但依然可以解决绝大多数的抽取保护

项目地址:https://github.com/hanbinglengyue/FART

解压 frida_fart.zip 将目录中的 fart.sofart64.so 推送到 /data/app目录下 并使用 chmod 777 需要以spawn方式启动app,等待app进入Activity界面后,执行fart()函数即可。如app包名为com.example.test,则

frida -U -f com.xxx.test -l frida_fart_hook.js --no-pause

等待app进入主界面,执行fart()

高级用法
如果发现某个类中的函数的CodeItem没有dump下来,可以调用dump(classname),传入要处理的类名,完成对该类下的所有函数体的dump,dump下来的函数体会追加到bin文件当中

PS:于被动调用的脱壳修复,由于代码覆盖率低,不可能触发app中的所有函数的调用,因此,修复的范围有限

BlackDex

BlackDex是一个运行在Android手机上的脱壳工具,支持5.0~12,无需依赖任何环境任何手机都可以使用,包括模拟器。只需几秒,即可对已安装包括未安装的APK进行脱壳。

项目地址:https://github.com/CodingGay/BlackDex

脱壳

  • APP脱壳两个最为关键的要素

    • 内存中dex的起始地址和大小,只有拿到这两个要素,才能够成功dump下内存中的dex
    • 脱壳时机,只有正确的脱壳时机,才能够dump下明文状态的dex。否则,时机不对,及时是正确的起始地址和大小,dump下来的也可能只是密文
  • APP脱壳原理

    • 在壳app解密源apk的dex之后,源apk被加载之前,拦截这个过程中的系统函数,把内存中的dex文件dump拿出来

对于完整的dex文件,采用暴力搜索方式搜索dex035关键特征,对于抹掉头文件信息的dex如抹掉dex035这个的magic bytes 信息,此时就需通过匹配一些特征来进行搜索

工具:https://github.com/dstmath/frida-unpack

  • 需要安装frida环境:https://frida.re
pip3 install frida-tools

adb.exe push C:\xxx\frida-unpack\inject.sh  /data
cd /data
chmod +x inject.sh

# 转发frida端口
adb.exe forward tcp:27042 tcp:27042
adb.exe forward tcp:27043 tcp:27043
adb.exe forward tcp:38089 tcp:38089
# 启动frida并修改监听端口(防止部分app监测默认端口)
adb.exe shell /data/local/tmp/ -l 0.0.0.0:38089
  • AndroidCPU架构
CPU架构描述
armeabi第5代 ARM v5TE,使用软件浮点运算,兼容所有ARM设备,通用性强,速度慢
armeabi-v7a第7代 ARM v7,使用硬件浮点运算,具有高级扩展功能
arm64-v8a第8代,64位,包含 Aarch32、Arch64两个执行状态对应32、64bit
x86intel32位,一般用于平板电脑
x86_64intel64位,一般用于平板电脑
mips少接触
mips64少接触
  • 获取当前模拟器的CPU,好选择frida-server的版本
adb shell getprop ro.product.cpu.abi

adb.exe push E:\xxx\frida-unpack\frida-server-15.1.14-android-x86  /data/local/tmp/

adb.exe shell 
cd /data/local/tmp/
chmod 777 frida-server-15.1.14-android-x86
./frida-server-15.1.14-android-x86

PS: 可能大家会遇到脱壳失败的,多试几次

脱壳失败解决方案:

1、多试几次python main.py -n com.jyzlhkj
2、尝试python main.py -n com.jyzlhkj -p 进程ID号
3、尝试python main.py -n com.jyzlhkj -p 进程ID号 -f
4、非root权限的话,尝试sudo sysctl kernel.yama.ptrace_scope=0 ,或 以root权限运行frida
5、frida版本换一个,不要最新版的

博主是多次尝试第二种方法成功,有好几次运行的时候程序闪退,可能是模拟器的缘故造成的

参考:https://blog.csdn.net/cui_yonghua/article/details/126695502
https://www.jianshu.com/p/aef7cdca8263
https://blog.csdn.net/Ananas_Orangey/article/details/126221618

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用MobSF来判断是否可使用frida-dump工具dump内存,可以按照以下步骤进行操作: 1. 首先,你需要下载并安装MobSF静态分析工具,并打开它。 2. 然后,你需要将App的APK文件导入到MobSF中。可以在MobSF的主界面中选择“Upload”按钮,并选择要分析的APK文件。 3. 分析完成后,你需要点击左侧导航栏中的“Filesystem”选项卡,并查看App中是否存在可疑的文件或目录。例如,是否存在可被其他应用程序读取的文件或目录。 4. 接着,你需要点击左侧导航栏中的“Strings”选项卡,并查看App中是否存在敏感数据,例如密码、密钥等。如果存在敏感数据,那么就可能存在内存数据被dump的风险。 5. 最后,你可以使用MobSF的“Frida”插件来检测App是否可被frida-dump工具dump内存。在MobSF的主界面中,选择“Plugins”选项卡,然后选择“Frida”插件。在插件页面中,你可以输入frida-dump的路径,然后选择“Start”按钮来运行插件。 6. 运行插件后,MobSF会自动运行frida-dump工具,并检测App是否可被dump。如果App可被dump,那么MobSF会给出相应的提示和建议,例如使用加密技术来保护内存数据等。 需要注意的是,frida-dump工具可以用于dump Android设备上的应用程序内存,因此可以被用于攻击。开发人员应该采取一些防范措施,例如使用内存加密技术、禁用日志输出等,来保护敏感数据。另外,定期进行安全评估和测试也是必要的,以确保App中不存在安全漏洞。 总之,使用MobSF来判断是否可使用frida-dump工具dump内存是一种有效的方法,可以帮助开发人员识别App中可能存在的安全问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周小董

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值