Fart12配套批量修复二代函数抽取壳工具发布


旧版Fart12定制版jadx的弊端

之前寒冰大佬推出的Fart12定制版jadx可以将Fart12脱下来的dex文件与主动调用过程中拿到的函数体bin文件自动重构与合并,修复并合并成新的dex。

修复完之后dex文件大小也会变大,且函数体也由原来的nop变成了真正的函数逻辑代码体。

工具虽然好用,但是还有些局限。比如:

  1. 一次只能修复单个dex文件,效率不高;
  2. 还有就是修复时机的问题,使用不同脱壳点dump下来的dex来修复,有些会出现修复失败的情况。

针对上述的第二点,展开说明一下。理论上来讲,在二代函数体填充壳的脱壳过程中,其实不管哪个时机点dump下来的整体dex,应该内容是一模一样的,或者说在滞后一些的时机dump下来的dex,应该还比稍早时期dump的还要完整一些,因为在App的运行过程中会触发一些函数体的解密和还原。

但是有些时候,使用滞后点dump下来的整体dex来修复的时候,竟然会出现修复失败的情况,那是因为有些壳在整体加载完成后,对内存中的dex结构,进行了一些破坏,以对抗一些整体dump的工具。比如破坏dex的文件头,就可以导致哪怕脱下来之后jadx、geb等逆向工具也识别不出这个dex,也可以对抗如frida-dexdump的工具,对内存中dex文件头的遍历搜索。相关代码如下:

/* https://github.com/hluwa/frida-dexdump/blob/d4b7d24a8ce0dada17fb1ce9849a8c1cffcb2cae/agent/src/search.ts#L115 */

Process.enumerateRanges('r--').forEach(function (range: RangeDetails) {
        try {
            Memory.scanSync(range.base, range.size, "64 65 78 0a 30 ?? ?? 00").forEach(function (match) {
                if (range.file && range.file.path
                    && (range.file.path.startsWith("/data/dalvik-cache/") ||
                        range.file.path.startsWith("/system/"))) {
                    return;
                }
                ...
            });

内存中的dex结构只要是可以不影响App的正常运行,还有很多字段可以随机填充一些无用的垃圾数据,来构造畸形的dex,使得脱下来的dex无法别识别、反编译,这种情况会影响到使用滞后点dump下来的dex进行修复时的成功率。

新工具:Fart12定制自动批量修复脚本发布

介绍新工具之前先打个广告。

Fart12无惧环境检测的原因

Fart12的脱壳ROM没有root,也不是userdebug调试系统,也没有fart等任何字符串特征指纹,也有谷歌应用商店,他就是一个正常的普通人的手机系统。

一行命令自动修复所有的dex

该自动化修复工具专为Fart12脱壳ROM定制,针对赠送的FART10以及FART12脱壳获取的所有dex以及bin文件,可自动化一键修复合并所有dex和bin文件,不再需要一个个进行修复。具体使用流程如下: 

  1. 在使用whitelist.txt文件,完成要修复的类的主动调用后,直接adb pull /sdcard/ooxx/packagename,获取完整目录文件,该目录下有FART10以及FART12脱壳以及修复得到的所有dex、txt、bin文件,目录内容大致如下:

  1. 启动cmd,执行java -jar repireall folderpath即可开始对该目录下的所有dex和bin文件的合并修复,下图为开始修复截图,此时开始逐个对dex使用bin文件进行自动化修复。

  1. 当修复完成后,此时会打印Rrepire all dexfile end!提示,此时代表自动化修复已经结束。

修复后的dex位于当前目录下的repire目录,下图为该目录,以及修复的dex文件截图。

修复完成后,只需要使用jadx、jeb、gda等打开即可。

案例演示完整脱壳修复流程

首先将test.apk安装到Fart12手机中去。

1

$ adb install test.apk

先脱整体壳

安装完成后,长按App的图标,点击“应用信息”,在“权限”一栏,把“文件和媒体”的权限改成“允许管理所有文件”,任何提示都点击“允许”。最终在“已允许”栏目中出现“文件和媒体”。

当然,有些App其实没有申请文件和媒体的权限,脱壳ROM针对这一点已经做了处理。在App安装的时候,会为其申请这个权限,所以不用担心这一点。

这时候再点击打开App,这样整体壳已经脱壳完成。adb进入手机中,可以看到已经在不同时机脱下来的整体dex文件,和类列表txt文件。

1

2

$ cd /sdcard/ooxx/com.yunmai.valueoflife

$ ls

可以在文件夹中直接搜一些AndroidManifest.xml中注册好的四大组件函数名,这些函数名一般是无法被混淆的。例如com.yunmai.valueoflife.MainActivity

使用的命令如下:

1

$ grep -ril "MainActivity" *

那么在8461968_classlist_LoadMethod.txt文件中存在着我们要找的类,那就把8461968_dexfile*.dex拖到电脑上,随便打开一个反编译看下。发现确实大部分类名、方法名都进行了混淆。

切换到smali的tab,可以看到方法体也都是nop,这是典型的抽取壳特征,看不到方法的实际逻辑过程。

那下一步就是解决抽取壳的问题,把函数体恢复出来。

再脱抽取壳

脱抽取壳,采用的是将类加载起来,再dump函数体到bin文件的方式。最后将bin文件里的函数体回填到dex中,组成完整的dex文件,这样上图中的方法逻辑就恢复好了。

并且在脱壳的方案上,选择的是白名单Whitelist的模式。为什么不直接全量脱?这是有讲究的,原因有三:

  1. 有些App比较大,几万几十几万百万个类方法,全量恢复耗时耗力,系统承载不住会将应用kill掉或者自己崩溃。

  2. 有些壳会写一些App用不上的垃圾类,在垃圾类里写一些退出的代码,这些垃圾类在App的正常使用流程中永远不会被加载,此时如果Fart12将其加载了,就踩上了地雷,App崩溃退出。

  3. 有些壳还会对Art的类加载流程中的函数进行hook来感知到哪些类正在被加载,如LoadMethod或LinkCode,一旦发现对类列表的遍历行为即可退出,防止后续主动加载类方法行为的发生。

我们这个案例不存在上述情况,所以先学习一下全量恢复的方法。在/sdcard/ooxx/com.yunmai.valueoflife目录下,执行:

1

$ cat *classlist* >> whitelist.txt

不放心可以看下whitelist.txt中是否已经填满了函数类方法名。

打开logcat,稍微等一会儿,就可以看到日志中出现fart的日志。这时候就是在dump类的函数体文件。

1

2

3

ActivityThread: sleep over and start fart

ActivityThread: try loadClass class:XI.CA.XI.K0$XI

ActivityThread: try loadClass class:XI.CA.XI.XI

可以多次用ls -alit命令查看最新生成的bin文件。

dump过程可以持续数分钟至数小时,直至logcat中出现fart run over字样即dump结束,然后将文件夹整体拖到电脑上。

1

% adb pull /sdcard/ooxx/com.yunmai.valueoflife

重组dex

由于新工具的发布,重组dex变得异常简单,一句命令即可:

1

% java -jar repireall.jar com.yunmai.valueoflife

当然电脑上要提前安装好JDK环境这肯定是必须的。

重组需要一定的时间,工具会自动使用bin文件中的函数体来填入对应的dex文件,重组完成的提示是:Repire all dexfile end!Please enjoy!

重组完成会同目录下生成repire文件夹,内含所有修复好的dex文件。比如我们再看之前缺少函数体的那个dex试试看,就是这样的效果,函数体的业务逻辑已经一览无余。

另外,大家也会有疑问,dex、LoadMethod、OpenCommen三个文件有什么区别呢?

其实他们是在不同的脱壳时机dump下来的整体dex文件,前文也解释了有一些情况会dump下来畸形的dex。所以提供更多的时机,可以有更高的容错,which means:总有一个是对的。

重组dex之在手机上使用FartFix

热心网友(ID:XRU的小跟班)将上述修复工具做成了一个App,叫做FartFix,可以在手机上直接进行修复,不用拖到电脑上修复,免去电脑上安装Java环境之苦。界面如下:

上述主动调用dump函数体的过程结束之后,点击App打开,按要求赋予文件夹读写管理权限,输入要修复的dex所在的路径后,点击开始处理。

1

% adb shell input text /sdcard/ooxx/com.yunmai.valueoflife

该App制作的比较简陋,全程没有任何提示,包括logcat里也没有。稍微多等一会儿,可以发现在/sdcard/ooxx/repire目录下,已经生成了修复完成的dex,如图所示。

接下来即可拖到电脑上进行分析。

壳的检测机制的绕过

上文说到壳有一些方法来检测与对抗Fart12的主动调用,相应的我们也有一些方法,来绕过这些检测。主要有两种方法:

  1. 缩小范围。比如只向whitelist.txt里写入几个、几十个、几百个类名,只脱自己想看的那些类。壳绝无可能阻止业务代码的加载,否则App本身就会崩溃。或者只处理一个dex里面的所有类:

1

$ cp 8461968_classlist.txt whitelist.txt

  1. 跳过检测类。logcat的日志里本身是可以看到崩溃发生时尝试加载的类名的,绕过那个类即可。可以从whitelist.txt中删掉那个类即可。清空其余全部文件,然后点击App重来一遍。

示例APP及脱壳修复后的样本比较大,放在Github上了,可以自取:https://github.com/r0ysue/MobileCTF/tree/main/AndroidAlgorithm/DumpDexAndRepaire/attachment

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/375187.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法练习-二叉搜索树的最小绝对差(思路+流程图+代码)

难度参考 难度:中等 分类:二叉树 难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。且所在课程未提供测试平台,故实现代码主要为自行测试的那种,以下内容均为个人笔记,旨…

代码随想录 Leetcode37. 解数独

题目&#xff1a; 代码(首刷看解析 2024年2月6日&#xff09;&#xff1a; class Solution { private:bool backtracking(vector<vector<char>>& board) {for (int i 0; i < 9; i) {for (int j 0; j < 9; j) {if (board[i][j] .) {for (char k 1; k…

“掌握温度,感知湿度,一触即知!”DHT11温湿度传感器,为您的生活增添一份关怀与精准。#非标协议【下】

“掌握温度&#xff0c;感知湿度&#xff0c;一触即知&#xff01;”DHT11温湿度传感器&#xff0c;为您的生活增添一份关怀与精准。#非标协议【下】 前言预备知识1.DHT11温湿度传感器初识1.1产品概述1.2与51单片机接线1.3数据传送逻辑和数据格式 2.发送时序检测DHT11温湿度传感…

Linux基础-磁盘

1.磁盘分区 1.分区有固定大小 2.直接写在这块盘的磁盘分区表中&#xff08;DPT&#xff09;&#xff0c;和上面装什么操作系统没有任何关系 2.每一个磁盘分区都要先有一个磁盘分区类型 GPT&#xff08;首选&#xff09; MBR 3.磁盘专业术语叫做块设备&#xff08;Block Dev…

numpy基础之切片索引

1 numpy基础之切片索引 多维数组有多个轴&#xff0c;索引下标从0轴开始&#xff0c;每个轴下标用逗号分隔。 比如[m,n,o]&#xff0c;表示0轴上索引为m&#xff0c;1轴上索引为n&#xff0c;2轴上索引为o的下标。 切片索引下标是在指定轴上用冒号选取一定范围的下标。 比如…

mac缩小图片大小的软件有哪些?推荐6款实用软件

mac缩小图片大小的软件有哪些&#xff1f;在处理图片时&#xff0c;我们经常需要调整图片的大小以适应不同的需求。在Mac上&#xff0c;有许多软件可以帮助我们实现这一目标。本文将介绍6款知名的图片缩小软件&#xff0c;让你轻松应对图片大小的调整。 1.改图鸭 这是一款功能…

亿级流量高并发春晚互动前端技术揭秘

前言 2022年1月&#xff0c;京东成为央视总台2022年春节联欢晚会独家互动合作伙伴&#xff0c;双方在红包互动、电商等方面展开全方位深度合作。在除夕当天产生691亿次互动&#xff0c;送出15亿元红包好物。 如何在这种大规模、高并发的场景下&#xff0c;确保系统的稳定性和…

这是一篇学习记录(二) —— RPA应用

RPA可以做数据提取、表单填写和文件移动。RPA 可以在不相关的软件系统中自动执行各种活动和事务&#xff0c;从而释放人力资源&#xff0c;使其优先处理更复杂的任务。 以下是 RPA 在不同领域的典型应用&#xff1a; 金融和银行业&#xff1a;RPA 在金融和会计领域有广泛应用…

Linux实验记录:使用Postfix与Dovecot部署邮件系统

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注&#xff1a; Web服务和FTP文件传输服务虽能实现文…

Stable Diffusion 模型下载:majicMIX reverie 麦橘梦幻

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 非常推荐的一个梦幻风格的大模型&#xff0c;由国人“Merjic”发布&#xff0c;下载量颇高。基于majicMIX_lux合并了一个2.5D模型。它与majicMIX_fantasy有类似的方…

【开源】SpringBoot框架开发城市桥梁道路管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统&#xff0c;支持…

01-Datahub是什么?

Datahub是LinkedIn开源的基于现代数据栈的元数据管理平台&#xff0c;原来叫做WhereHows 。经过一段时间的发展datahub于2020年2月在Github开源。 官网地址为&#xff1a;A Metadata Platform for the Modern Data Stack | DataHub 源码地址为&#xff1a;GitHub - datahub-p…

Java实现视频抽帧

&#x1f913; 1️⃣配置Maven 在pox.xml中加入 <dependencies><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.7</version></dependency> </dependencies…

代码随想录 Leetcode51. N 皇后

题目&#xff1a; 代码(首刷看解析 2024年2月6日&#xff09;&#xff1a; class Solution { private:vector<vector<string>> res;void backtracking(int n, int row, vector<string>& chessboard) {if (row n) {res.push_back(chessboard);return;}f…

论文阅读-面向公平性的分布式系统负载均衡机制

摘要 当一组自利的用户在分布式系统中共享多个资源时&#xff0c;我们面临资源分配问题&#xff0c;即所谓的负载均衡问题。特别地&#xff0c;负载均衡被定义为将负载分配到分布式系统的服务器上&#xff0c;以便最小化作业响应时间并提高服务器的利用率。在本文中&#xff0…

UE5 解析Base64加密的json并解决中文乱码

参考资料: IntelliJ IDEA 设置编码为utf-8编码_idea如何转化utf-8-CSDN博客 【UE4】FString TCHAR_TO_UTF8宏的一些坑-CSDN博客 这是最有用的Unreal Engine FString TArray<uint8> utf-8互转 - 知乎 FString UMyBlueprintFunctionLibrary::LoadStringBase64Decode(FSt…

Tiktok云手机是什么,做tiktok养号有什么优势?

随着抖音海外版的兴起&#xff0c;给跨境电商带来了前所未有的巨大商机&#xff0c;打算做Tiktok带货的跨境商家越来越多了。本文将介绍如何通过tiktok云手机轻松养号涨粉。 账号的安全稳定是做好tiktok的基础&#xff0c;早期大家用的比较多的是实体手机。但是这种方法有几个弊…

人工智能|深度学习——基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统

代码下载&#xff1a; 基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统.zip资源-CSDN文库 1.研究的背景 水下场景目标检测是水下机器人、水下无人机和水下监控等领域中的重要任务之一。然而&#xff0c;由于水下环境的复杂性和特殊性&#xff0c;水下目标检测面临着许多挑…

深度解析 Netty 架构与原理

一共 28661字&#xff0c;耐心看完。 在阅读本文前最好有 Java 的 IO 编程经验&#xff08;知道 Java 的各种 IO 流&#xff09;&#xff0c;以及 Java 网络编程经验&#xff08;用 ServerSocket 和 Socket 写过 demo&#xff09;&#xff0c;并对 Java NIO 有基本的认识&…

Etsy做什么店铺比较靠谱? 什么叫做真人店?

作为Etsy是美国最大的原创手工在线销售平台之一&#xff0c;以其店铺利润高、平台佣金低、平台同质化不严重的优点在跨境电商里颇具竞争力。然而Etsy开店却不是件容易事&#xff0c;原因是Etsy真人店对于环境以及卖家的运营操作要求较高&#xff0c;下面就给各位有意入局Etsy的…