jeb动态调试apk(解决模拟器连接问题)

本来jeb动态调试apk是件简单的事,个人觉得比AndroidStudio操作起来简单许多,步骤如下:
1、jeb打开apk,分析源码,下好断点;
2、启动模拟器,安装好apk;
3、adb命令连接模拟器,启动apk,adb shell am start -D -n (包名)/(.主窗体)
4、jeb附加对应的进程,开始愉快的调试。
看着很简单,很开心,操作起来却遇到模拟器连接的问题,jeb总是无法发现模拟器,找了半天资料,结合自己实践,终于找到了正确的打开方式;
给个实例:
1、打开apk,下好断点;
在这里插入图片描述
2、adb让app跑起来;
在这里插入图片描述
在这里插入图片描述
3、双击进程开始调试,
在这里插入图片描述
4、模拟器里输入,通过按钮触发断点;
在这里插入图片描述
在这里插入图片描述
5、单步F6运行程序,变量定义为了int,所以显示如下;
在这里插入图片描述
实际应该为string,所以要手动修改,
在这里插入图片描述
变量不可以随便修改类型,这里如果修改v1为string则程序报异常错误会退出;
继续运行程序,变量会自动改回为int;
在这里插入图片描述
到关键位置在改变量值为string,即可查看信息,这与ida的动态调试思路一样的;
在这里插入图片描述
网上很多教程到这里就结束了,看着确实很开心,愉快,但其实下面的坑不解决,是走不到看到flag这步的。。。
坑一:模拟器连接问题
我这里用的是雷电模拟器,其他模拟器同理,之前经常会出现用adb连接模拟器时,总会报点小错误,如:
在这里插入图片描述
虽然也可以正确连接,但看着还是不爽,明明就一个模拟器,为什么要显示2个,其中一个还不在线呢,其他模拟器也有类似情况。后来测试才知道,原来模拟器启动时自带的adb也启动了,你在调用外部的adb时,因为端口占用问题,就会出现上述的情况,一劳永逸的办法就是启动任务管理器,将模拟器自带的adb进程结束,然后整个世界就安静了,现在只有你自己的adb在连接模拟器,完全掌控的感觉真好。
坑二:jeb连接模拟器问题
当模拟器已经在我们的adb完全掌控的情况下,发现jeb还是无法发现模拟器,这又是为什么呢?查阅资料,重启模拟器、jeb多次,终于发现了问题所在,原来时adb没有注册为系统环境变量。之前用adb都是到对应目录下直接dos命令就操作了,哪想的还需要注册什么环境变量,其实仔细想想,jeb是通过什么和模拟器通信的呢,不像ida还要拷贝个文件啥的,所以jeb就是通过adb和模拟器进行通信的,adb如果不注册为环境变量,jeb无法正常启动adb命令,当然也就无法发现模拟器了。
解决了上面2个坑,确保jeb和模拟器之间的通信顺畅,调试也就变得像大多数教程一样看着简单了。

在啰嗦一点:jeb有debug 模式 和 普通模式 这里给的实例是debug模式,还有一种是普通模式,即直接在模拟器里双击打开app,然后jeb直接附加进程进行调试,不需要用adb来启动app; debug 模式 和 普通模式的区别在于 启动过程 普通模式:无法调试界面的 创建,即 onCreate 函数 debug 模式:可以调试 界面的 onCreate 函数,即刚开始创建界面是就开始调试