hacktricks/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md

73 lines
4.4 KiB
Markdown
Raw Normal View History

# 反向工程本地库
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
2022-04-28 16:01:33 +00:00
支持HackTricks的其他方式
2022-04-28 16:01:33 +00:00
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASSHackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details>
**有关更多信息,请查看:[https://maddiestone.github.io/AndroidAppRE/reversing\_native\_libs.html](https://maddiestone.github.io/AndroidAppRE/reversing\_native\_libs.html)**
Android应用程序可以使用本地库通常用C或C++编写用于性能关键任务。恶意软件创建者也使用这些库因为它们比DEX字节码更难逆向工程。本节强调针对Android定制的反向工程技能而不是教授汇编语言。提供了ARM和x86版本的库以确保兼容性。
### 关键点:
- **Android应用程序中的本地库**
- 用于性能密集型任务。
- 用C或C++编写,使逆向工程具有挑战性。
- 以`.so`共享对象格式存在类似于Linux二进制文件。
- 恶意软件创建者更喜欢本地代码以增加分析难度。
- **Java本机接口JNI和Android NDK**
- JNI允许在本地代码中实现Java方法。
- NDK是用于编写本地代码的Android特定工具集。
- JNI和NDK将Java或Kotlin代码与本地库连接起来。
- **库加载和执行:**
- 使用`System.loadLibrary`或`System.load`将库加载到内存中。
- 在加载库时执行JNI_OnLoad。
- Java声明的本机方法链接到本机函数实现执行。
- **将Java方法链接到本机函数**
- **动态链接:** 本地库中的函数名称与特定模式匹配,从而实现自动链接。
- **静态链接:** 使用`RegisterNatives`进行链接,提供函数命名和结构的灵活性。
- **反向工程工具和技术:**
- 工具如Ghidra和IDA Pro有助于分析本地库。
- `JNIEnv`对于理解JNI函数和交互至关重要。
- 提供练习以实践加载库、链接方法和识别本机函数。
### 资源:
- **学习ARM汇编**
- 建议深入了解底层架构。
- 推荐来自Azeria Labs的[ARM汇编基础知识](https://azeria-labs.com/writing-arm-assembly-part-1/)。
2022-04-28 16:01:33 +00:00
- **JNI和NDK文档**
- [Oracle的JNI规范](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html)
- [Android的JNI技巧](https://developer.android.com/training/articles/perf-jni)
- [开始使用NDK](https://developer.android.com/ndk/guides/)
2022-04-28 16:01:33 +00:00
- **调试本地库:**
- [使用JEB反编译器调试Android本地库](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
2022-04-28 16:01:33 +00:00
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASSHackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter**上关注我们 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
2022-04-28 16:01:33 +00:00
</details>