ida远程调试手机端过程详解(补充了一些之前帖子忽略的问题)
准备工作:1 一个真正root的开发版手机(稳定版或者发布版,release版也可以,但是后续有其他问题,这里推荐小米,华为,三星等提供官方root镜像的手机,我是红米note 4x刷的)
如果没有root过,那么各位可以到此结束,直接退出了,后面的内容完全无效
验证root的方法
什么是真正root的手机,其实可以比较快的验证一下
找到android的sdk下tools目录
运行monitor.bat文件,稍等一会,并按照提示升级或者配置路径
网上不少人说需要eclipse的ddms,其实完全可以不用,android sdk里面自带了这个,只是大部分的人不知道入口而已
启动这个批处理,那么不久之后,ddms就会启动
正常的情况下,可以看到手机下面的个个进程
如果手机不是真正root的手机,则只能看到手机,无法看到进程
如果看不到,那么可以尝试输入adb root,然后重启monitor再试一次
如果还是不行,说明手机root不完全,或者不支持开发模式
到了这里要么放弃,要么重新刷机
记住,模拟器是没有用的,虽然模拟器可以看到进程,但是后面ida调试的时候,会无法设置断点
小米刷机推荐线刷,去官网下载对应的包去刷
root工具,比如360root什么的,刷出来的,基本都是废的,虽然可以执行root命令,但是monitor看不到进程
搞定这个,后面的步骤就基本顺了
2 ida安装目录下面的IDA 7.0\dbgsrv\android_server这个推送到手机上面去
先adb push IDA 7.0\dbgsrv\android_server /sdcard/
然后进入adb shell,通过su拿到root,再执行mkdir /data/debug创建文件夹
通过cp /sdcard/android_server /data/debug复制到文件夹里面去(注意sdcard上面的文件是无法以root权限执行的,这个是android的限制,不要去尝试了)
然后执行chmod 755 /sdcard/android_server 给权限
执行setenforce 0关闭进程保护
执行/sdcard/android_server 启动远程调试服务器
root@nikel:/data/test # ./android_server
IDA Android 32-bit remote debug server(ST) v1.22. Hex-Rays (c) 2004-2017
Listening on 0.0.0.0:23946...
看到上面类似的内容,那么第二步就ok了
注意,一般来说都是调用这个,ida那个文件夹下面还有一个64位的server,但是基本没有用,我还没有找到能够执行的
如果32位的这个执行报错,那么可以尝试一下64位的
到这里基本手机端就算是OK了
3 如果默认端口你没有更改的话,那么在主机命令行模式下执行
adb forward tcp:23946 tcp:23946
开启端口转发
执行
adb shell "am start -D -n 目标应用包名/启动acitivity"
来开启应用调试状态
打开32位ida(注意这里和上面的server有关,如果上面你的32位不能启动,启动的是64位server,就必须在这里启动64位ida)
选择Go
选择Debugger→Attach→Remote ARMLinux/android remote debuger
找到debuger options按钮,按照自己的需要勾选断点位置
如果前面没有错误,那么会看到一个目标手机进程列表
然后选择你要调试的应用进程(通过ctrl+F可以筛选进程名称)
双击进程行,就可以进入进程状态了
记住,在里面设置好断点,就可以F9放开运行
现在已经准备的差不多了
4 然后最关键的一步来了
在ddms里面找到
这个有红色bug的进程
注意那个8604
在主机命令行输入
jdb -connect com.sun.jdi.SocketAttach:port=8604,hostname=localhost
这个时候,会恢复等待调试的进程
如果断点设置正常,就会被中断在那里
下面就可以开始你的表演了
--------------------------------------------------------------------------------------
这里记录一下杂项
ida一开附加上去的时候,会中断在一个svc的地方
这里是等待调试的一个软中断
在modules里面找到linker(可以用ctrl+f来查找)行,右键选择jump to module base
然后双击刚才右键的linker行
继续查找dlopen
找到__dl__Z9do_dlopenPKciPK17android_dlextinfo函数来设置断点或者__dl_dlopen来设置断点都可以
这样当系统要加载so的时候,就会中断在加载的前面
类似的方法可以拦截很多函数
这个是我拦截成功的截图
后记:如果你在ida调试的过程中遇到问题,可以在下面留言
我看到后会进行答复 感谢楼主写的这么详细.
刚开始试动态调试...结果从晚上9点搞到凌晨4点半.
先把N年不用的三星S4弄出来 死活连不上电脑. USB黄叹号又装驱动又下官方工具.最后查来查去可能是主板坏了.
然后又把三星S2掏出来.弄了几下....装游戏..push驱动.弄着弄着卡死连系统都开不开了.这就快12点了
看到楼主的帖子.我又把小米平板1掏出来.各种刷开发版....结果我以为我的平板是小米平板2结果各种刷不上...下卡刷,线刷...稳定版.开发板.都不行.
后来用第三方工具刷了一个root的开发版.一连电脑.....DDMS看不到进程.快疯了.
别的地方看到说必须安卓4.4以下的系统.但楼主这没说.抱着试一试的心态,又开始搞我的小米平板4.要先解锁..找顶针.插电话卡.绑定设备.下解锁工具.解锁!需要等160多小时....
中午睡醒又继续查.说要在XML里加debug标签=true就行了
然后用反编译把APk标签里加了debug..刚往小米平板1里拖...莫名发现它自动升级了...又升成稳定版.....脑阔疼
从7月10几号开始研究怎么破解U3D手游.一路走过来.各种各样的坑.到IDA这脑袋都大了..又是java层又是服务层啥的...
但想搞定dll必须破解so.so里面代码都是C++.我看不懂.特意找了做C的弟弟给我看..他说你必须要获取几个入参.否则没法写破解脚本.
只有动态一条路了...
然后就研究怎么IDA动态调试.要有root的手机..我就想起以前的三星.又去取手机.取完手机试来试去就是目前这个样子.哎.....
我就不信了..我非要把这个搞定不可. 通过cp /sdcard/android_server /data/debug复制到文件夹里面去(注意sdcard上面的文件是无法以root权限执行的,这个是android的限制,不要去尝试了)
然后执行chmod 755 /sdcard/android_server 给权限
执行setenforce 0关闭进程保护
执行/sdcard/android_server 启动远程调试服务器
大佬这里是不是错了..应该给debug里面的权限吧
我按照步骤执行 这里报错了
root@mocha:/ # /sdcard/amd_ser
/sdcard/amd_ser
tmp-mksh: /sdcard/amd_ser: can't execute: Permission denied
重新给了debug里的可以了
应该改成
然后执行chmod 755 /data/debug/android_server 给权限
执行setenforce 0关闭进程保护
执行/data/debug/android_server 启动远程调试服务器
我来学习一下。 学习了,谢谢 学习学习,谢谢分享 学习学习 厉害了,楼主,好棒啊。 精品,前来学习一下
我来学习一下。 学习学习,谢谢分享 来学习下也不错