首页
社区
课程
招聘
[原创]Android未root环境下使用IDA调试
2019-12-20 20:18 9379

[原创]Android未root环境下使用IDA调试

2019-12-20 20:18
9379

引言


        众所周知,IDA在我们调试Android程序的时候是一个很棒的利器,在做调试前我们需要的就是一部root过的移动设备,当然这是很理想的情况,但是现实总是事与愿违的,对于我们大部分人来说可能会碰到各种各样的问题(技术大牛除外),比如说我是开发人员,我不会root、或者是手机不支持root,没有官方和第三方的root包、还有就是刷root的本身就是一件有风险的事情,如果点背的话刷成板砖了等等;即使最后root成功了,可能你在上面花费的时间远远大于你调试软件的时间。针对root手机的不方便性、我来介绍一种不需要root手机直接调试的方法。

前期准备


       1、 配置好JDK, SDK环境变量,并且在开发者模式下开启调试状态

        2、一台未root的手机(我用的是vivo X23)

        3、Android Studio

        4、IDA (我用的汉化的7.0版本)

        5、android:debuggable="true"

直接上干货



        从图片看出我的设备是未root的,没有su权限;接下来我们使用run-as命令操作:



        到达这步我们就有权限操作被调试进程了,下面我们把IDA的远程调试服务拷贝到当前进程目录下,然后对我需要的服务进行提权操作,然后就可以正常运行服务了,具体如下图:



        从图中看到,已经成功连接IDA的服务了,可以从图中看见我导入了两个服务android_server和android_server64,由于我们没有root权限,正常的"adb push"和“cp“指令都是无法使用的,你会得到如下图的结果:



        可以看到我们是没有权限操作的,所以这一就要用到 “Android Studio”了,接下来打开“Android Studio”,打开后你会在右下角看见“Device File Explorer”,在IDE页面的右下角的位置你会看见他具体如图:



        双击打开,你就会发现文件列表,然后找到我们程序的包名,我是在data\data\com.lsg.testnative路径下,然后右击文件夹,选择Upload选项,然后就可以从本地把IDA的服务导入该文件目录下了,具体操作如下图:



        接下来就可以附加所要调试的进程了,由于只有当前进程的权限,所以IDA的进程列表里面只有你自己的用户进程,IDA的具体效果如下图:



        这样就完成了附加调试工作,我们可以尽情的调试我们想要的功能了,需要注意的一点就是程序一定要“android:debuggable = true”,只有这样我们才能用run-as命令,才可以使用Android Studio导入IDA的远程服务文件,这是必要的前提,否则会看见如下的提示:



总结


        可以看出这种方法本质上还是那套附加调试的思路,只是想办法解决了权限的问题,虽然还是会受到一定的限制,比如我们可能需要二次打包apk,可能还需要过掉签名校验、文件校验之类的检测,但不能否定的是这也是一种可行的解决方案,我也相信肯定会在有些特定的场景会用的到,在这里本着学习精神和大家一起分享下,愿我的分享对你有所帮助。


声明:本文是作者原创,如有转载请附上原文链接,盗版必究!



[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2019-12-21 13:15 被梨树生果编辑 ,原因: 修改错别字
收藏
点赞4
打赏
分享
最新回复 (13)
雪    币: 189
活跃值: (154)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
flamepeak 1 2019-12-20 23:02
2
0
很好的文章
雪    币: 12500
活跃值: (3043)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
白菜大哥 2019-12-21 07:45
3
1
强。话说既然选择了ida调试,那些签名校验文件校验之类的,很有必要亲自过一下呀。
雪    币: 13505
活跃值: (4843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tDasm 2019-12-23 14:19
4
0
 3、Android Studio
这个没必要?
雪    币: 35
活跃值: (154)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
衣非录 2019-12-23 15:20
5
0
你可以尝试先push到Sdcard然后在cp到应用沙盒,这样的话应该就不需要AS了
雪    币: 3579
活跃值: (659)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
梨树生果 2019-12-23 18:01
6
0
衣非录 你可以尝试先push到Sdcard然后在cp到应用沙盒,这样的话应该就不需要AS了
cp指令尝试了,仅仅在sdcard下有权限,其他的目录没有权限的
雪    币: 3579
活跃值: (659)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
梨树生果 2019-12-23 18:02
7
0
tDasm 3、Android Studio 这个没必要?
有什么好的方法吗,请指教下
雪    币: 641
活跃值: (399)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
sunzhanwei 2019-12-23 21:19
8
0
我想问一下,如果apk加壳并且有签名校验的话这个方法不行吧.我看好多apk都用的360加壳,这方法好像限制比较多啊.
雪    币: 13505
活跃值: (4843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tDasm 2019-12-24 08:15
9
0
梨树生果 有什么好的方法吗,请指教下[em_1]
/data/local/tmp
雪    币: 3579
活跃值: (659)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
梨树生果 2019-12-24 22:49
10
0
sunzhanwei 我想问一下,如果apk加壳并且有签名校验的话这个方法不行吧.我看好多apk都用的360加壳,这方法好像限制比较多啊.
只要debuggable=true,就可以的,360的加固可能需要过校验的,可能二次打包不会成功,不过你可以动态调试过掉他啊!
雪    币: 3579
活跃值: (659)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
梨树生果 2019-12-24 22:51
11
0
tDasm /data/local/tmp
这个路径是没有权限的,您可以在没有root的机器上试一下
雪    币: 13505
活跃值: (4843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tDasm 2019-12-25 08:21
12
0
梨树生果 这个路径是没有权限的,您可以在没有root的机器上试一下
你是什么安卓系统?我们都可以的(已经经过n次使用证明)。你可以百度一下看是不是有权限。
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_S.W.A.T 2020-3-9 20:36
13
0
您好,我想问一下,我这个ida,他按照您的步骤,在没有root的真机上面,他会出现“Bogus or irresponsive remote server”  ,我网上查到的原因是SELinux安全策略限制,这如何解决呢,他关闭这个必须要root,但是我手头这个机器是老的华为手机,现在又root不了,有其他解决方案么?
雪    币: 7
活跃值: (223)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bluth 2020-3-10 00:04
14
0
直接写APK的时候把文件放到  context.getFileDir() 的目录下 ,就不用upload了吧
游客
登录 | 注册 方可回帖
返回