逆向工程android原生打包器

逆向工程 C++ 安卓 C 爪哇
2021-07-04 23:15:07

我正在尝试对 android 应用程序进行逆向工程,该应用程序在/data/data/{package}文件夹中有 4 个文件

├───app_dexprotector
│       823517D25836B88F1C499C02370A047E.dat
│       823517D25836B88F1C499C02370A047E.dex
│
├───app_outdex
│       libdexprotector.bpqn57.12456.so
│
├───cache
└───lib
        libiconv.so
        libzbarjni.so

并且所有文件都相同,除了 app_outdex 文件,当我启动应用程序时,app_dexprotector文件夹将被修改,之后将在 app_outdex 上创建一个文件,然后将立即删除我使用Termuxinotify-wait以及有趣的部分创建该文件的副本总是文件的大小不同我搜索了应用程序的java代码,只有一个应用程序类具有巨大的字节码数组和一个像这样的本机方法:

    public static native int tfAHDD(Object obj, int I, int i2, int i3, int i4, int i5, int i6, int i7, int i8);

整个班级这么长,但这只是因为字节数组,这是班级的链接,我的主要问题是为什么文件每次都有不同的大小,为什么没有其他本机方法?应用程序将如何运行这个方法,最后我如何分析这个 .so 文件

1个回答

您无法使用标准反编译器分析本机函数,因为本机函数未在 Java 字节码(Java 本机关键字和方法)中实现。

您必须使用常见的 x86 反汇编程序(如 IDA、JEB)来分析本机函数。

首先,搜索System.loadLibrary调用,查看加载了哪个本地库(应该在静态块中)

找到本机库后,您必须使用 IDA 之类的反汇编程序打开它,然后进入导出部分:

在此处输入图片说明

在这里你可以看到你的原生函数的实现。

当然,您不能在这里指望 Java 字节码,而只能指望 C 伪代码(如果您的分解器支持它)

在此处输入图片说明