好友
阅读权限10
听众
最后登录1970-1-1
|
准备工作:
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 启动远程调试服务器
[Bash shell] 纯文本查看 复制代码 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调试的过程中遇到问题,可以在下面留言
我看到后会进行答复 |
免费评分
-
查看全部评分
|