在对apk进行分析时,有时候我们需要对apk进行调试。
介绍
android:debuggable="true" 的作用
在 Android 开发中,android:debuggable="true"
是 AndroidManifest.xml 文件中 <application>
标签的一个属性,用于指定应用程序是否可以以调试模式运行。以下是它的作用和注意事项:
声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
作用
-
允许调试:
-
设置
android:debuggable="true"
后,应用程序可以通过调试工具(如 Android Studio 的调试器或 adb 调试)附加调试进程。 -
开发者可以实时查看变量、调用栈和其他调试信息。
-
增强日志输出:
-
在调试模式下,应用程序可能会输出更多的日志信息,方便排查问题。
-
启用调试专用工具:
-
一些调试工具(如 Stetho、LeakCanary)需要该属性为
true
才能正常工作。
默认行为
-
当使用 debug 构建(
buildTypes.debug
)时,android:debuggable
默认值为true
。 -
当使用 release 构建(
buildTypes.release
)时,android:debuggable
默认值为false
。
安全注意事项
-
禁止在生产环境中设置为
true
: -
如果在发布的应用中保留
android:debuggable="true"
,可能会暴露敏感信息(如日志、API 密钥)。 -
攻击者可以通过反向调试工具(如 Frida)轻松调试和修改应用的运行时行为。
-
检查打包设置:
-
在发布之前,确保使用
release
构建并验证android:debuggable
被设置为false
。 -
代码审查:
-
在代码审查过程中检查是否有手动设置
android:debuggable
属性的情况。
让apk变可调试
https://xdaforums.com/t/cant-edited-build-prop.4555745/
android 14之后改了判定机制,原来的ro.debuggable属性已经没用了,新的全局调试条件改成了ro.build.type=eng或者ro.build.type=userdebug并且persist.debug.dalvik.vm.jdwp.enabled=1
LSPosed 插件 XAppDebug
toggle app debuggable
https://github.com/Palatis/XAppDebug
我 小米 MIUI14 android13 没成功
刷安卓镜像的时候刷入userdebug版本
userdebug 版本的安卓系统,默认有 root 权限,ro.debuggabl=1 即所有apk都可以调试。
ro.debuggable设置为1
注意 修改ro.debuggable=1,可能导致某些系统不能启动,需要重新刷 img
手动设置
让apk变可调试 https://blog.csdn.net/qq_30496695/article/details/80425676
关闭 selinux
XXX:/ # getenforce //获取当前SELinux状态
Enforcing
XXX:/ # setenforce 0 //临时关闭SELinux状态
XXX:/ # getenforce //获取SELinux状态
Permissive
XXX:/ # setenforce 1 //永久开启SELinux状态
XXX:/ # getenforce
Enforcing
XXX:/ #
https://blog.csdn.net/tkwxty/article/details/103938287
注意点:
-
上述的方法是临时关闭SELinux,机器重启以后还是会恢复的
-
上述命令一定要在Root模式下运行,且必须是终端没有对setenforce进行限制,否则会报如下的错误
getprop ro.debuggable
setprop ro.debuggable 1
目前android13 高版本会报错
工具 mprop
https://blog.csdn.net/qq_42403906/article/details/126446369
https://github.com/wpvsyou/mprop
修改Android prop工具,copy对应cup型号的脚本文件至设备内存中,运行./mprop [某个prop的key] [希望修改后的value]
七年前的项目,对高版本android可能不支持。
个人测试,MIUI14 android13 不成功
使用:
adb push mprop /data/local/tmp # 将下载好的 mprop 工具放入 /data/local/tmp 当中
adb shell
su
cat default.prop | grep debug # 查看default.prop里面的配置值,此处是 0
getprop ro.debuggable # 获取ro.debuggable 此处应该是 0
cd /data/local/tmp
chmod 777 mprop # 修改权限
./mprop ro.debuggable 1 # 修改 ro.debuggable 1 的值为 1
cat default.prop | grep debug # 查看default.prop里面的配置值,此处是应该还是 0
getprop ro.debuggable # 获取 ro.debuggable 此处应该是 1
修改完成后,执行命令adb shell getprop | findstr debuggable查看手机的ro.debuggable参数值。
提示:[ro.debuggable]: [1]
即成功。
使发布的Android应用程序可调试
反编译-修改-重打包
适合没有壳的apk,如果有壳,apk反编译可能出错。需要脱壳,然后修改着apk入口,比较麻烦。
https://gist.github.com/nstarke/615ca3603fdded8aee47fab6f4917826
原文始发于微信公众号(进击的HACK):apk 变得可调试 debuggable=true
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论