在我的手机上找不到 apk 使用的本机库
Posted
技术标签:
【中文标题】在我的手机上找不到 apk 使用的本机库【英文标题】:Can't find native libraries used by apk on my phone 【发布时间】:2020-11-01 05:21:43 【问题描述】:首先,对不起我的英语。这不是我的母语。这是我第一次做这样的事情,所以我在旅途中学习。
上下文:我试图了解我从 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
据我所知,java 允许您使用本地库,这要归功于 native 关键字。这些本机库通过System.loadLibrary(...)
命令加载。在 Main.java 文件中,我调用了这个命令System.loadLibrary("Main");
。如果我正确理解它是如何工作的,那么在我的安卓手机上安装了一个名为 libMain.so 的相应 .so 文件。
我扎根了我的 OnePlus6 并深入研究了寻找这个库的文件。
问题:我在手机上找不到这个库。 /data/data//中没有关联的.so文件
问题:
-
你能解释一下我做错了什么/我失踪了。
假设我找到了库,我可以阅读其中的代码还是需要特定的工具?
如果问题 2 的答案是否定的,是否可以创建一个加载此特定库并使用它的小应用程序?
感谢您花时间帮助我:D
【问题讨论】:
【参考方案1】:问题 1 的答案:
我发现游戏安装了多个 .apk。 我的错误是相信应用程序 Apk Extractor,它只给了我基本的 .apk
我通过 SSH 连接到我的手机并列出所有已安装的 .apk。我的游戏的 /data/app/ 文件夹中安装了几个 .apk !
一个专用于基础源代码(我从 Apk Extractor 获得的那个) 一个仅存储本机库 (libMain.so) 的 .apk问题 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
start-adress 值设置为第一个命令的返回值
现在我有了需要逆向工程的汇编代码!
【讨论】:
以上是关于在我的手机上找不到 apk 使用的本机库的主要内容,如果未能解决你的问题,请参考以下文章
在为arm64 Android手机构建应用程序包时,在ApplicationInfo.nativeLibraryDir中找不到本机库
在我的 `Context` 上找不到 `DbSet` 的 Getter 属性
使用 NUnit+Reflection,在我的 ActiveX 控件上找不到任何事件
Docker Build 在 GitLab 上找不到 GradleWrapperMain 但可以在我的笔记本电脑上使用
为 arm64 Android 手机构建应用程序包时在 ApplicationInfo.nativeLibraryDir 中找不到本机库