在我的 phone 上找不到 apk 使用的本机库
Can't find native libraries used by apk on my phone
首先,对不起我的英语。这不是我的母语。这是我第一次做这样的事情,所以我边走边学。
上下文: 我试图了解我从 Play 商店安装的游戏如何与服务器通信。更准确地说,如何在对服务器的每个 POST 请求上设置特定参数。
这个名为 'secret' 的 HTTP 参数不能轻易进行逆向工程,因为它是其他参数的一种哈希值,用于检查请求的完整性。
我做了什么:
- 我从 .apk 中提取了 .dex 文件
- 我使用 d2j-dex2jar 提取了 .class 文件。
- 我使用了jd-gui工具来分析源码
我发现了什么:
这是为 'secret' 参数生成值的源代码:
.method public static native secretForString(Ljava/lang/String;)Ljava/lang/String;
.end method
据我了解,由于 native 关键字,java 允许您使用本机库。这些本地库是通过 System.loadLibrary(...)
命令加载的。在 Main.java 文件中,我调用了此命令 System.loadLibrary("Main");
。如果我正确理解它是如何工作的,那么在我的 android phone.[=14= 某处安装了一个名为 libMain.so 的相应 .so 文件]
我 root 我的 OnePlus6 并深入研究文件寻找这个库。
问题:我在 phone 上找不到这个库。 /data/data//
中没有关联的.so文件
问题:
- 你能解释一下我做错了什么/我错过了什么吗?
- 假设我找到了这个库,我是否能够阅读其中的代码,或者我是否需要特定的工具?
- 如果问题 2 的答案是否定的,是否可以创建一个加载此特定库并使用它的小型应用程序?
感谢您花时间帮助我:D
问题 1 的答案:
我发现游戏安装了多个.apk。
我的错误是相信了只给我基础 .apk
的应用程序 Apk Extractor
我通过 SSH 连接到我的 phone 并列出所有已安装的 .apk。我游戏的 /data/app/ 文件夹中安装了几个 .apk !
- 一个专门用于基本源代码(我从 Apk Extractor 获得的那个)
- 一个仅存储本机库的 .apk (libMain.so)
问题 2 的答案:
我使用命令readelf -s libMain.so | grep '<Name of the function>
来检索函数地址。输出是这样的 00000000003c69b4
readelf -h libMain.so
: 给了我构建库的架构,也就是 AArch64。
我下载了用于编译二进制文件的相同工具链:
$> sudo apt-get install binutils-aarch64-linux-gnu
然后用这个命令使用它:
$> aarch64-linux-gnu-objdump -d libMain.so --start-address=0x3c69b4
起始地址值设置为第一个命令的return值
现在我有了需要逆向工程的汇编代码!
首先,对不起我的英语。这不是我的母语。这是我第一次做这样的事情,所以我边走边学。
上下文: 我试图了解我从 Play 商店安装的游戏如何与服务器通信。更准确地说,如何在对服务器的每个 POST 请求上设置特定参数。
这个名为 'secret' 的 HTTP 参数不能轻易进行逆向工程,因为它是其他参数的一种哈希值,用于检查请求的完整性。
我做了什么:
- 我从 .apk 中提取了 .dex 文件
- 我使用 d2j-dex2jar 提取了 .class 文件。
- 我使用了jd-gui工具来分析源码
我发现了什么: 这是为 'secret' 参数生成值的源代码:
.method public static native secretForString(Ljava/lang/String;)Ljava/lang/String;
.end method
据我了解,由于 native 关键字,java 允许您使用本机库。这些本地库是通过 System.loadLibrary(...)
命令加载的。在 Main.java 文件中,我调用了此命令 System.loadLibrary("Main");
。如果我正确理解它是如何工作的,那么在我的 android phone.[=14= 某处安装了一个名为 libMain.so 的相应 .so 文件]
我 root 我的 OnePlus6 并深入研究文件寻找这个库。
问题:我在 phone 上找不到这个库。 /data/data//
中没有关联的.so文件问题:
- 你能解释一下我做错了什么/我错过了什么吗?
- 假设我找到了这个库,我是否能够阅读其中的代码,或者我是否需要特定的工具?
- 如果问题 2 的答案是否定的,是否可以创建一个加载此特定库并使用它的小型应用程序?
感谢您花时间帮助我:D
问题 1 的答案:
我发现游戏安装了多个.apk。 我的错误是相信了只给我基础 .apk
的应用程序 Apk Extractor我通过 SSH 连接到我的 phone 并列出所有已安装的 .apk。我游戏的 /data/app/ 文件夹中安装了几个 .apk !
- 一个专门用于基本源代码(我从 Apk Extractor 获得的那个)
- 一个仅存储本机库的 .apk (libMain.so)
问题 2 的答案:
我使用命令readelf -s libMain.so | grep '<Name of the function>
来检索函数地址。输出是这样的 00000000003c69b4
readelf -h libMain.so
: 给了我构建库的架构,也就是 AArch64。
我下载了用于编译二进制文件的相同工具链:
$> sudo apt-get install binutils-aarch64-linux-gnu
然后用这个命令使用它:
$> aarch64-linux-gnu-objdump -d libMain.so --start-address=0x3c69b4
起始地址值设置为第一个命令的return值
现在我有了需要逆向工程的汇编代码!