文章目录
- 查看所有设备
- 在IDA里面找到android_server(dbgsrv目录)
- 提权
- 运行android_server服务端进行监听
- 端口转发
- 打开DDMS:观察程序的端口号
- 打不开monitor.bat报错(Androidstudio/tools)
- 报错1
- 原因
- 报错2
- 原因
- 总结monitor.bat所需的jdk
- 挂起程序
- 注意
- 打开ida,进行调试
- 由于目标计算机积极拒绝,无法连接。 when connecting to 127.0.0.1:23946
- 因为没进行端口转发
- 进程列表:选择要调试的程序(可以ctrl+f,搜索包名)
- 进入后勾选三项:
- 补充:
- 挂载、释放(放手)
查看所有设备
adb devices
在IDA里面找到android_server(dbgsrv目录)
adb push C:\Program Files\IDA Pro 7.5 SP3\dbgsrv\android_server data/local/tmp/android_server
adb push C:\Program Files\IDA Pro 7.5 SP3\dbgsrv\android_server64 data/local/tmp/android_server64
提权
adb shell
su
cd data/local/tmp
chmod 777 android_server64
chmod 777 android_server
运行android_server服务端进行监听
端口号默认是:23946
补充:运行andorid_server
并且修改端口号:./android_server -p端口号
端口转发
因为android_server监听的是23946,所以呢,我们转发端口也就需要转发23946
adb forward tcp:23946 tcp:23946
打开DDMS:观察程序的端口号
打不开monitor.bat报错(Androidstudio/tools)
报错1
原因
因为你的jdk
不是64bit的
报错2
!ENTRY org.eclipse.osgi 4 0 2021-06-16 15:16:45.533
!MESSAGE Application error
!STACK 1
java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
原因
因为你的jdk不是1.8的
总结monitor.bat所需的jdk
- 版本不能太高(最好是1.8,也就是JAVASE8)
- 必须是64bit,不能是32bit
挂起程序
adb shell am start -D -n 包名/类名
adb shell am start -D -n com.example.ichunqiu_2/com.example.ichunqiu2.P_ichunqiu
注意
这里的包名和类名不一定一样,(不一样的时候不能省略,不能写成这样)
adb shell am start -D -n com.example.ichunqiu_2/.P_ichunqiu
打开ida,进行调试
- 打开ida,选择debugger -第二项-Remote ARMlinux(第四项)
- 添加hostname和port:
hostname:主机号(默认127.0.0.1)
port:端口号(之前android_server运行时的端口号或者端口转发的端口号)
如果出现以下原因
由于目标计算机积极拒绝,无法连接。 when connecting to 127.0.0.1:23946
因为没进行端口转发
在cmd里面输入adb forward tcp:23946 tcp:23946
进程列表:选择要调试的程序(可以ctrl+f,搜索包名)
进入后勾选三项:
- Suspend on process entry point程序入口点 断下
- Suspend on thread start/exit线程的退出或启动 断下
- Suspend on library load/unload库的加载和卸载 断下
补充:
可以直接在这里F9(左上角有一个三角形)运行程序,然后放手;
也可以,直接执行第九步,然后IDA运行程序
挂载、释放(放手)
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=端口号
补充:此时观察DDMS
,被调试的程序前面有一个绿色的虫子;