在我解释这种情况时,请耐心等待。
也许 10 天前,我接受了对 Android 应用程序进行逆向工程的挑战。从头开始学习,我安装了 ADB、Apktool、Android Studio、Notepad++ 和 Smali 高亮等。我的方法是在 Android Studio 中编写反映 APK 工作原理的测试程序,然后用 Apktool 反编译以帮助我进行 Smali 修改。我已成功修改应用程序以记录所有 HTTP 请求、标头、cookie 并将数据发布到 android 日志。
我的下一个挑战是弄清楚应用程序中的一个重要算法是如何工作的。这就是难倒我的原因。在过去的 3 或 4 天里,我大部分时间都在分析 Smali 代码,但几乎没有任何进展。显然,该算法是在具有 .so 扩展名的本机库中完成的(如果不是大部分的话,至少是部分)。
逆向工程最令人沮丧的事情之一是社区太小。网络上的资源很少(至少与其他事物相比)。我可能咬得比我能咀嚼的还要多。我总是尝试超出我技能水平的困难项目。对于这项任务,我想我需要非常熟悉 ARM,并且必须使用 IDA Pro 来分析 .so 文件?解释一下我的知识水平:
- 我在 Windows 中使用 Ollydbg 的经验很少(我对寄存器和 CMP、JMP、ADD 命令等略有了解)
- 我没有使用 IDA Pro 的经验。我对逆向工程还很陌生,但我在简单的 Smali 修改方面取得了成功,因为它在某些情况下很简单。
- 我知道基本的 Java(需要明确的是,我不是一个完整的初学者,变量、for 循环、数组、类(在某种程度上)对我来说是第二天性)
- 我知道基本的 C++ 如果不超过基本的
- 我做过很多 VB.NET 编程。
- 我觉得自己对 Python 非常了解。
所以我有编程经验,但不是真正的逆向工程。我怎么会想办法理解这个复杂的本地库(当我对本地库/JNI 几乎一无所知时)?这里的专业人士能否给我一些具体的例子,说明我如何达到知识水平足以完成我的目标?我不想放弃,因为这是一项艰巨的挑战。请给我一些建议,告诉我如何才能取得足够的进步以完成我的目标。我想我需要学习 IDA Pro 以及 ARM 的工作原理。
谢谢