安卓逆向——frida-serve脱壳案例

44 篇文章 3 订阅
30 篇文章 22 订阅

安卓逆向——frida-serve脱壳案例

一、原理

  • 1. -->APP启动
  • 2. -->壳dex先加载起来
  • 3. -->壳负责把源dex文件读出来
  • 4. -->壳把源dex文件解密
  • 5. -->把解密后的dex加载进内存 源dex运行起来

所以在APP启动时,把源dex加载到内存的方法,修改加载的方法,把加载dex的内容保存下来,就是源apk的dex。

 

安卓系统是调用底层的so文件,把dex读取到内存中,

在系统中的 /system/lib/libart.so 文件,拿到电脑端,用ida打开分析,找到对应版本的方法

这里还是 拿上次的案例做测试,软件 

 

环境一 : Android6 

  OpenMemory :OpenMemory 是Android6 把 dex 读进内存的方法

执行后 会出现 几个dex文件,这里需要一个一个用 jadx 打开看,

打开文件 可以看到 和上一篇的dex文件分析是一样的

 

环境二 : Android8 

  OpenCommon:OpenCommon 是Android8 把 dex 读进内存的方法

执行后 会出来几个dex文件,出来的dex个数可能不一样,但是只要正确的dex文件出来了就好

打开文件 可以看到 和上一篇的dex文件分析是一样的

 

注意:不同系统可能存在不同的区别

代码 :

# -*- coding: utf-8 -*-
import frida
import sys

# https://blog.csdn.net/weixin_44032232/article/details/109676945

def on_message(message, data):
    # print(message)
    if message['type'] == 'send':
        # print("*****[frida hook]***** : {0}".format(message['payload']).replace('\n',''))
        print("*****[frida hook]***** : {0}".format(message['payload']))

    else:
        print("*****[frida hook]***** : " + str(message))

### libart.so
# 9.0 arm 需要拦截 _ZN3art13DexFileLoader10OpenCommonEPKhjS2_jRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPKNS_10OatDexFileEbbPS9_NS3_10unique_ptrINS_16DexFileContainerENS3_14default_deleteISH_EEEEPNS0_12VerifyResultE
# 7.0 arm:_ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9_

# android 10: libdexfile.so
# #_ZN3art13DexFileLoader10OpenCommonEPKhjS2_jRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPKNS_10OatDexFileEbbPS9_NS3_10unique_ptrINS_16DexFileContainerENS3_14default_deleteISH_EEEEPNS0_12VerifyResultE

# 获取包名
# package = sys.argv[1]
package = 'com.iCitySuzhou.suzhou001'

print("dex 导出目录为: /data/data/%s" % (package))
device = frida.get_usb_device(-1)
pid = device.spawn(package)
session = device.attach(pid)

OpenMemory_android6 = '_ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9'
Open_android8 = '_ZN3art7DexFileC2EPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPKNS_10OatDexFileE'
src = """
Interceptor.attach(Module.findExportByName("libart.so", "_ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9_"), {
    onEnter: function (args) {
      	//dex文件的起始位置
        var begin = args[1]
        
        //dex文件的前8个字节是magic字段 看dex的文件格式说明
        //打印magic(会显示 "dex 035") 三个字符 可以验证是否为dex文件   dex 035  是换行的
        send("magic : " + Memory.readUtf8String(begin))
        
     	//把地址转换成整型 再加32 
        //因为dex文件的第32个字节处存放的是 dex文件的大小
        var address = parseInt(begin,16) + 0x20

		//把address地址指向的内存值读出来 该值就是dex的文件大小
        //ptr(address)转换的原因是 frida只接受 NativePointer类型指针
        var dex_size = Memory.readInt(ptr(address))
        send("dex_size :" + dex_size)
        
      	//frida写文件 把内存中的数据 写到本地
        var file = new File("/data/data/%s/" + dex_size + ".dex", "wb")

		//Memory.readByteArray(begin, length)
        //把内存里的数据读出来,从begin开始读,取length长度(dex_size文件的大小)
        file.write(Memory.readByteArray(begin, dex_size))
        file.flush()
        file.close()
        var send_data = {}
        send_data.base = parseInt(begin,16)
        send_data.size = dex_size
        send(send_data)
    },
    onLeave: function (retval) {
        if (retval.toInt32() > 0) {
        }
    }
});
""" % (package)

script = session.create_script(src)

script.on("message", on_message)

script.load()
device.resume(pid)
sys.stdin.read()

 

 

### 回答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应用的内部机制。它的强大功能和高效性使其受到广泛的关注和使用,目前已经成为许多安卓开发者逆向工程的首选工具之一。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

.含笑.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值