hacktricks/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md

92 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 利用可调试应用程序
{{#include ../../banners/hacktricks-training.md}}
# **绕过root和可调试检查**
本节内容是来自帖子 [**https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0**](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0) 的总结
## 使Android应用可调试并绕过检查的步骤
### **使应用可调试**
内容基于 https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
1. **反编译APK**
- 使用APK-GUI工具反编译APK。
-_android-manifest_ 文件中插入 `android:debuggable=true` 以启用调试模式。
- 重新编译、签名并进行zipalign处理。
2. **安装修改后的应用:**
- 使用命令: `adb install <application_name>`
3. **获取包名:**
- 执行 `adb shell pm list packages 3` 列出第三方应用并找到包名。
4. **设置应用以等待调试器连接:**
- 命令: `adb shell am setup-debug-app w <package_name>`
- **注意:** 每次启动应用之前必须运行此命令以确保它等待调试器。
- 为了持久性,使用 `adb shell am setup-debug-app w -persistent <package_name>`
- 要移除所有标志,使用 `adb shell am clear-debug-app <package_name>`
5. **在Android Studio中准备调试**
- 在Android Studio中导航到 _File -> Open Profile or APK_
- 打开重新编译的APK。
6. **在关键Java文件中设置断点**
-`MainActivity.java`(特别是在 `onCreate` 方法中)、`b.java``ContextWrapper.java` 中设置断点。
### **绕过检查**
应用程序在某些时刻会验证是否可调试并检查指示设备已root的二进制文件。可以使用调试器修改应用信息取消设置可调试位并更改搜索的二进制文件名称以绕过这些检查。
对于可调试检查:
1. **修改标志设置:**
- 在调试器控制台的变量部分,导航到: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`
- **注意:** `flags = 814267974` 的二进制表示为 `11000011100111011110`表示“Flag_debuggable”处于活动状态。
![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png)
这些步骤共同确保应用程序可以被调试,并且可以使用调试器绕过某些安全检查,从而便于对应用程序行为进行更深入的分析或修改。
步骤2涉及将标志值更改为814267972其二进制表示为110000101101000000100010100。
# **利用漏洞**
演示使用了一个包含按钮和文本视图的易受攻击应用程序。最初应用程序显示“Crack Me”。目标是在运行时将消息从“Try Again”更改为“Hacked”而不修改源代码。
## **检查漏洞**
- 使用 `apktool` 反编译应用程序以访问 `AndroidManifest.xml` 文件。
- `AndroidManifest.xml` 中存在 `android_debuggable="true"` 表明该应用程序是可调试的,易受攻击。
- 值得注意的是,`apktool` 仅用于检查可调试状态,而不修改任何代码。
## **准备设置**
- 该过程涉及启动模拟器,安装易受攻击的应用程序,并使用 `adb jdwp` 识别正在监听的Dalvik VM端口。
- JDWPJava Debug Wire Protocol允许调试在VM中运行的应用程序通过暴露唯一端口。
- 远程调试需要端口转发然后将JDB附加到目标应用程序。
## **在运行时注入代码**
- 通过设置断点和控制应用程序流程进行利用。
- 使用 `classes``methods <class_name>` 等命令来揭示应用程序的结构。
-`onClick` 方法处设置断点,并控制其执行。
- 使用 `locals``next``set` 命令检查和修改局部变量特别是将“Try Again”消息更改为“Hacked”。
- 使用 `run` 命令执行修改后的代码,成功实时更改应用程序的输出。
这个例子演示了如何操纵可调试应用程序的行为突显了更复杂的利用潜力例如在应用程序上下文中获得设备的shell访问权限。
## 参考文献
- [https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0)
- [https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications](https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications)
{{#include ../../banners/hacktricks-training.md}}