使用 frida+dexdump对apk脱壳

1.发展背景

转载注明出处:https://blog.csdn.net/weixin_38819889/article/details/123880076

APP 加固发展到现在已经好几代了,从整体加固到代码抽取到虚拟机保护,加固和脱壳的方案也逐渐趋于稳定。随着保护越来越强,脱壳机们也变得越来越费劲,繁琐。但是毕竟道高一尺,魔高一丈,市面上有很多手段可以进行脱壳操作今天介绍的是使用Frida的一个脚本来dump apk的Dex

2.脱壳原理

得益于FRIDA, 在 PC上面进行内存搜索、转储都变得十分方便,再也不需要考虑什么Xposed、什么Android开发、什么代码注入,只需要关注如何去搜索想要的东西,于是依赖一个几十行代码的小脚本,就可以将大部分内存中的 dex 脱下来。对于完整的 dex,采用暴力搜索 dex035 即可找到。而对于抹头的 dex,通过匹配一些特征来找到。

非常感谢葫芦娃大佬的开源工具,使用起来很方便,。
项目地址: https://github.com/hluwa/FRIDA-DEXDump

3. 以某apk为例

先把这个开源项目下载到本地,如图,这里是mac的目录:
在这里插入图片描述

然后用一些查壳工具,看看该apk到底使用了什么加固。
缺图先欠着pass

之后需要开启我们手机的frida服务
在这里插入图片描述
再之后把目录切换到 frida_dexdump 所在的路径,同时把待脱壳的apk打开,也是就是变成主activity,最后直接运行 python3 main.py
在这里插入图片描述
倒数三秒钟就把壳脱下来了,可以看到一个个dex文件,就是我们想要的。
在这里插入图片描述

4.合并dex-重打包

最最后,就是把脱下来的许许多多的dex重新合并打包,这里推荐一个很好用的合并工具,感谢qinless大佬提供的。

代码如下,需要自取。

import os
import zipfile
import argparse

def rename_class(path):
    files = os.listdir(path)
    dex_index = 0
    if path.endswith('/'):
        path = path[:-1]
        print(path)
    for i in range(len(files)):
        if files[i].endswith('.dex'):
            old_name = path + '/' + files[i]
            if dex_index == 0:
                new_name = path + '/' + 'classes.dex'
            else:
                new_name = path + '/' + 'classes%d.dex' % dex_index
            dex_index += 1
            if os.path.exists(new_name):
                continue
            os.rename(old_name, new_name)
    print('[*] 重命名完毕')

def extract_META_INF_from_apk(apk_path, target_path):
    r = zipfile.is_zipfile(apk_path)
    if r:
        fz = zipfile.ZipFile(apk_path, 'r')
        for file in fz.namelist():
            if file.startswith('META-INF'):
                fz.extract(file, target_path)
    else:
        print('[-] %s 不是一个APK文件' % apk_path)

def zip_dir(dirname, zipfilename):
    filelist = []
    if os.path.isfile(dirname):
        if dirname.endswith('.dex'):
            filelist.append(dirname)
    else:
        for root, dirs, files in os.walk(dirname):
            for dir in dirs:
                # if dir == 'META-INF':
                # print('dir:', os.path.join(root, dir))
                filelist.append(os.path.join(root, dir))
            for name in files:
                # print('file:', os.path.join(root, name))

                filelist.append(os.path.join(root, name))

    z = zipfile.ZipFile(zipfilename, 'w', zipfile.ZIP_DEFLATED)
    for tar in filelist:
        arcname = tar[len(dirname):]

        if ('META-INF' in arcname or arcname.endswith('.dex')) and '.DS_Store' not in arcname:
            # print(tar + " -->rar: " + arcname)
            z.write(tar, arcname)
    print('[*] APK打包成功,你可以拖入APK进行分析啦!')
    z.close()

if __name__ == '__main__':
    args = {
        'dex_path': '脱壳后dex路径',
        'apk_path': '原始带壳apk路径',
        'output': '脱壳后apk路径'
    }

    rename_class(args['dex_path'])
    extract_META_INF_from_apk(args['apk_path'], args['dex_path'])
    zip_dir(args['dex_path'], args['output'])

效果如下:
在这里插入图片描述
之后就会把apk打包成功,就可以拖入jadx反编译查看源代码了。
完事手工✋🏻。

参考文献:
https://blog.csdn.net/qq_41179280/article/details/112526331

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: Frida-dexdump是一款用于Android应用程序脱壳的工具。它基于Frida框架,可以在运行时动态地注入代码,从而实现对应用程序的监控和修改。通过使用Frida-dexdump,用户可以获取应用程序的dex文件,进而进行反编译和分析。这对于安全研究人员和逆向工程师来说是非常有用的。 ### 回答2: Frida-Dexdump是一种脱壳工具,它使用Frida库提供的动态注入技术来实现脱壳。它可以帮助安全研究人员分析Android应用程序中的可执行文件(dex文件),以便他们能够防止应用程序的非法复制或修改。 Frida-Dexdump的主要优点是它不需要修改目标应用程序的源代码,因为它是通过在应用程序运行时动态注入实现的。这个过程非常简单,只需要在设备中安装Frida-server,然后运行Frida-Dexdump即可。脱壳过程中,它会将dex文件从目标内存中复制到本地磁盘,然后对该文件进行解密、反编译和分析。 此外,Frida-Dexdump还提供了一些其他有用的功能,例如提取应用程序进程的内存信息和文件系统信息,以及可以监视应用程序的API调用、函数调用和网络请求等操作,有助于发现应用程序中的漏洞和安全问题。 总之,Frida-Dexdump是一种非常有用的脱壳工具,它给安全研究人员提供了一个方便而有效的方式,来分析Android应用程序中的DEX文件,并发现和解决其中的安全问题。但需要注意的是,在使用该工具时,需要严格遵守法律法规,不得将其用于非法用途。 ### 回答3: Frida-Dexdump是一款非常强大的脱壳工具,它是基于Frida框架开发的,能够帮助开发者轻松地从安卓应用程序中提取dex文件,帮助开发者进行逆向分析,加深对程序的理解。 Frida-Dexdump的主要功能是从本地已安装的应用程序中提取dex文件,并将其保存到本地文件系统中,使其方便地进行后续分析。这个脱壳工具不仅能够脱壳Native方法,还可以有效地防止抓包等应用安全风险。 使用Frida-Dexdump非常容易,只需要在Frida Server启动的情况下,通过命令行来启动即可。可以利用命令行参数去指定你需要脱壳的应用程序包名,然后Frida-Dexdump就会自动使用Frida去hook这个被指定的应用程序,并提取它的dex文件。 Frida-Dexdump采用了一种非常高效的脱壳技术,它能够轻松地解析目标程序的内存结构,获取有关dex文件的相关信息,并且还能够将提取的dex文件保存在指定的本地文件系统中,方便开发者进行后续分析。值得一提的是,Frida-Dexdump支持多种不同的目标程序,包括应用程序、Framework、动态库等。 总的来说,Frida-Dexdump是一款非常强大的脱壳工具,可以帮助开发者轻松地进行逆向分析,深入探究Android应用的内部机制。它的强大功能和高效性使其受到广泛的关注和使用,目前已经成为许多安卓开发者逆向工程的首选工具之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值