jdb附加失败 开启调试模式

内容纲要

在上一篇中讲到了关于Android so的动态调试,没看的可以点这里:点击打开链接

我自认为写的还是挺全的,在上文中我们说到关于最后一步jdb附加调试时,很多时候都会出现附加不上的问题,使人很闹心。。。于是这一篇就是专门关于这个问题进行展开的。解决这个问题方法有很多,我是按照自己认为的优良答案顺序展开的,都是借鉴网上的各路大神而总结的。

 

解决篇:

根据android的官方文档,如果调试一个APK,必须满足以下两个条件中的任何一个:

1.APK的AndroidManifest.xml文件中的Application标签包含android:debuggable="true";

2./default.prop中的ro.debuggable的值为1;

 

 

 

Android So动态调试之反jdb附加的解决大法.zip

方法一:

在已经root的手机安装Xposed框架和xinstaller插件

目的:就是利用Xposed的HOOK插件xinstaller开启系统中所有应用的调试功能。

使用方法:

第一步:下载Xposed框架,并激活,再下载xinstaller插件安装;

第二步:开启模块,点击xinstall插件设置专家模式,进入其他设置,开启调试应用,最后在xposed中激活重启,OK!!

关于框架和xinstaller插件会放在附件中。

 

方法二:

修改android:debuggable="true"

用AK反编译以后在AndroidManifest.xml文件中的Application标签中加入android:debuggable="true";然后回编译。

这个方法虽然简单,但是问题多,比如:

第一:有的反编译,签名验证等等。

第二:如果说软件已经爱加密或加壳了,修改XML几乎是不可能的,因为改了也不能回包

于是引入了方法三.

 

方法三:

如果我们在真机,则可以修改根目录下的default.prop文件,将里面的ro.debuggable =1。

第一:  从Google官方网站下载到boot.img;
第二:  使用工具(abootimg,gunzip, cpio)把boot.img完全解开,获取到default.prop;
第三:  修改default.prop;
第四: 把修改后的文件重新打包成boot_new.img;
第五: 使用fastboot工具把boot_new.img刷入设备(fastboot flash boot boot_new.img);

 

优点是可以永远调试,不再担心此问题;

缺点是我没有Nexus 5手机,这个问题很严肃;于是引出了方法四。

 

方法四:

我们没有谷歌的亲儿子,但是我们有神器的小工具。

首先我们看到如图所示ro.debuggable=0;

init进程会解析这个default.prop文件,然后把这些属性信息解析到内存中,给所有app进行访问使用,所以在init进程的内存块中是存在这些属性值的,那么这时候我们可以利用进程注入技术,我们可以使用ptrace注入到init进程,然后修改内存中的这些属性值,只要init进程不重启的话,那么这些属性值就会起效。当然这个工具已经写好,我会放在后main附件中。

解决方法:

第一步:拷贝mprop 到/data/目录下;
第二步:./mprop ro.debuggable 1;
第三步:getprop ro.debuggable;(查看此时ro.debuggable在内存中的值)
第四步:stop;start(重启adbd进程);

注意:

我们在上面的第三步的时候查看好像没有改过来,分析原因为:

该工具是通过ptrace修改init进程中的内存,然而4.X系统强制开启了selinux;因此这个时候我们需要设置Selinux的状态.需要个APK,会放在后面的附件中。

发表回复