Exploiting a debuggeable application

利用可调试应用程序

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

绕过root和可调试检查

本文节选自文章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。

  1. 安装修改后的应用程序:

  • 使用命令:adb install <application_name>

  1. 检索包名:

  • 执行adb shell pm list packages –3以列出第三方应用程序并找到包名。

  1. 设置应用程序等待调试器连接:

  • 命令: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>

  1. 在Android Studio中准备调试:

  • 在Android Studio中导航至_File -> Open Profile or APK_。

  • 打开重新编译后的APK。

  1. 在关键Java文件中设置断点:

  • MainActivity.java(特别是在onCreate方法中)、b.javaContextWrapper.java中设置断点。

绕过检查

应用程序在某些点会验证是否可调试,并检查是否存在指示设备已root的二进制文件。可以使用调试器修改应用程序信息、取消调试标志并更改搜索二进制文件的名称以绕过这些检查。

对于可调试检查:

  1. 修改标志设置:

  • 在调试器控制台的变量部分中导航至:this mLoadedAPK -> mApplicationInfo -> flags = 814267974

  • 注意: flags = 814267974的二进制表示是11000011100111011110,表示“Flag_debuggable”已激活。

这些步骤共同确保应用程序可以进行调试,并且可以使用调试器绕过某些安全检查,从而更深入地分析或修改应用程序的行为。

第2步涉及将标志值更改为814267972,其二进制表示为110000101101000000100010100。

利用漏洞

演示使用一个包含按钮和文本视图的易受攻击应用程序。最初,应用程序显示“Crack Me”。目标是在运行时将消息从“Try Again”更改为“Hacked”,而无需修改源代码。

检查漏洞

  • 使用apktool对应用程序进行反编译,以访问AndroidManifest.xml文件。

  • 在AndroidManifest.xml中存在android_debuggable="true"表明应用程序是可调试的且易受攻击。

  • 值得注意的是,apktool仅用于检查可调试状态,而不修改任何代码。

准备设置

  • 过程涉及启动模拟器、安装易受攻击的应用程序,并使用adb jdwp识别正在侦听的Dalvik VM端口。

  • JDWP(Java调试线协议)允许通过公开唯一端口调试在VM中运行的应用程序。

  • 远程调试需要端口转发,然后将JDB附加到目标应用程序。

在运行时注入代码

  • 通过设置断点和控制应用程序流程来执行利用。

  • 使用classesmethods <class_name>等命令来揭示应用程序的结构。

  • onClick方法设置断点,并控制其执行。

  • 使用localsnextset命令来检查和修改局部变量,特别是将“Try Again”消息更改为“Hacked”。

  • 使用run命令执行修改后的代码,成功实时更改应用程序的输出。

此示例演示了如何操纵可调试应用程序的行为,突显了更复杂利用的潜力,例如在应用程序上下文中获取设备上的shell访问权限。

参考资料

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

支持HackTricks的其他方式:

最后更新于