ida pro调试Apk-附Demo

一、第一种方法 单独调试So不需要更早的代码

首先到ida根目录中的dbgsrv文件,这里有各种类型系统类型的程序,就是在Android系统上开启一个服务或叫端口监听,让安卓系统和ida进行一个连接
Image.png

使用adb push命令将电脑中的文件移动到安卓手机目录中,(理论上任意目录都行,但安卓系统中/data/local/tmp的目录是有执行权限的 可以说权限比较高)

adb push android_server /data/local/tmp

Image.png

在目录中查看

Image.png

接下来就需要将777权限给他
chmod 777 android_serve
Image.png

执行android_server那他这里会监听安卓手机上的23946的端口,如果要改端口就-p 端口号

Image.png

那我们这里就需要去做一个端口转发,将android_server监听的23946端口转发到电脑的23946端口(这里的端口是习惯用的端口,你也可以不转发这个端口 但是前提是端口不能被占用)
adb forward tcp:23946 tcp:23946,如果上面修改了其他端口就要与之对应

Image.png

然后就需要打开需要调试的So文件,到ida程序中做一些设置

找到关键函数先下个断点,这里的断点是App的title处

Image.png

  • Debugger-Debugger options..

Image.png

我这里留了三个,作用都不一样
比如第一个 (在进程入口点上挂
起)挂起就是下个断点 让程序停下来
Image.png

  • Debugger-Process options

Image.png

首先这上面都是默认的,需要填入地址,端口号一般是默认,除非你改了,点击OK
Image.png

  • 然后在选择附加到进程 Attach to process
    Image.png

找到调试的App,点击OK
Image.png

等他加载完按F9,让他执行起来,这里执行的原因是因为默认停下来的地方一般是在libc.so,libc.so是系统库,没必要去调试,在点击App中的设置标题按钮,App就会停在设置的断点处,这样就可以进行单步调试了,手机上点击设置标题

会提示一个消息框,他发现你的so路径,前面那个路径是在安卓系统上面的,后面这个是我本地的,就是说路径不一样,是不是弄错了,直接点击same就可以了,和他说没有

Image.png

然后单步调试到断点的地方,就可以了

Image.png

二、第二种方法 单独调试So需要更早的代码

这里就需要我们在转发完23946端口
做完端口转发还要将App以调试模式将其启用,这里写法也很简单

adb shell am start -D -n com.zhuotong.crackme/.MainActivity

Image.png

Image.png

这里就需要去设置so的断点,配置调试项完后

这里我选择先jdb附加到调试程序,命令如下

jdb.exe -connect com.sun.jdi.SocketAttach:port=,hostname=localhost

这个命令也是转发到本地的,那这个端口是通过ddms判断的
打开我们的ddms,看到用debug模式打开App后 他会变成一个红色的虫子,说明即将被调试(monitor.bat 就是ddms)

Image.png

然后我们执行jdb的命令,然后看App提示框已经没有了
Image.png

然后在进行附加即可

TIPS:

1.如果看不到ddms显示进程

Android 手机中的全局可调试
装好Magisk之后

adb shell "su -c magisk resetprop ro.debuggable 1"
adb shell "su -c stop;su -c start;"

就可以看到了
jdb 是附加 Java 层的,如果你用 am -d 启动的话不附加就跑不了,-D的作用是在运行之前让他挂起,然后等你调试器,可以调试更早的代码(jdb主要是为了调试更早的代码)

adb shell "getprop ro.debuggable"  可以获取到全局可调试状态

案例:
链接:https://pan.baidu.com/s/1w4uWyiYKfQdeqj7I64LFXw
提取码:a6op

本文链接:

https://www.linqi.net.cn/index.php/archives/160/