加固加壳脱壳分析(3)_实战手动脱壳某家加固

手动脱壳准备

一个加固的Apk文件
frida环境
一台Root手机

手动脱壳准备

本次的脱壳目标就是一个叫每日优先的软件
我在论坛里分析了很久 最后发现这个软件适合用来练手

目标就是脱出完整的dex文件分析源码

整个目录结构

我们用jdax打开

请添加图片描述

可以看到没有我们要找的目标包和类,所以软件dex被加壳保护起来了。

分析哪家的壳

百度搜索 secneo.apkwrapper找到了这个加固厂商为梆梆加固

可以通过这个分析加固特点了

核心加固技术:

1.防逆向(Anti-RE) 抽取classes.dex中的所有代码,剥离敏感函数功能,混淆关键逻辑代码,整体文件深度加密加壳,防止通过apktool,dex2jar,JEB等静态工具来查看应用的Java层代码,防止通过IDA,readelf等工具对so里面的逻辑进行分析,保护native代码。

2.防篡改(Anti-tamper) 每个代码文件、资源文件、配置文件都会分配唯一识别指纹,替换任何一个文件,将会导致应用无法运行,存档替换、病毒广告植入、内购破解、功能屏蔽等恶意行为将无法实施。防调试(Anti-debug) 多重加密技术防止代码注入,彻底屏蔽游戏外挂、应用辅助工具,避免钓鱼攻击、交易劫持、数据修改等调试行为。

3.防窃取(Storage Encryption) 支持存储数据加密,提供输入键盘保护、通讯协议加密、内存数据变换、异常进程动态跟踪等安防技术,有效防止针对应用动、静态数据的捕获、劫持和篡改。

编写脱壳脚本

核心思想 就是运行时的dex文件从内存里面dump里下载下来

hook框架选择

我们选择frida来进行hook

hook点研究

通常的hook点都是拦截dex解密加载过程的方式

其实可以选择内存中存放dex文件的位置,也就是内存检索DEX文件

具体参考 https://mp.weixin.qq.com/s/n2XHGhshTmvt2FhxyFfoMA

具体的检索流程

1.遍历当前进程所有可以读的内存段

2.判断所谓的内存段到底是不是dex

3.把文件dump下来

1.检索遍历进程内存

使用函数 Process.enumerateRanges('r--') 枚举读出可以读出的内存区块

这个函数返回一个列表 我们可以遍历这个内存区块列表

找出基址和内存大小

2.过滤内存区块

Memory.scanSync函数可以加载内存区块传入 基址 大小 第三个参数是 过滤大小

使用正则过滤加载自己需要的大小

比如这个"64 65 78 0a 30 ?? ?? 00" 的意思就是 只加载这个区间的内存 也就是所谓的dex内存地址

3.检索遍历进程内存

开始过滤符合要求的dex

过滤掉系统的dex文件

if (range.file && range.file.path
                        && (range.file.path.startsWith("/data/dalvik-cache/") ||
                            range.file.path.startsWith("/system/"))) {
                        return;
                    }

我们这里只过滤一下就是大小要大于0x70,为什么呢 因为dex head大小就是0x70

function verify_dex(dex_ptr, range) {
    if (range != null) {
        var range_end = range.base.add(range.size);
        // verify header_size 
        if (dex_ptr.add(0x70) > range_end) {
            return false;
        }
        // 这里+0x3C 是 string_ids_off, 也就是 string_ids 段的偏移位置 这里的值要正好等于0x70
        return dex_ptr.add(0x3C).readUInt() === 0x70;
    }
    return false;
}

4.返回真正的dex文件地址和大小

前面已经拿到了想要的内存开始地址,但是dex的大小还是没有拿到

这个dex文件大小需要额外的获取

在header头信息里面的0x20字段写了dex文件大小

直接读取即可

var dex_size = dex_ptr.add(0x20).readUInt();

测试脚本功能

现在可以测试这个基础脚本了

基本上可以拉下来我们需要的dex文件

后面直接使用jadx即可查看内容了

其他的细节问题

修复dex文件错误,适配一些对dex文件的魔改情况

后面讲解

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值