JEB动态调试

往期推荐

Method Profiling

方法栈跟踪

Log插桩调试smali代码

DDMS工具使用

调试逆向分为动态分析技术和静态分析技术。静态分析技术是指**者利用反汇编工具将二进制的可执行文件翻译成汇编代码,通过对代码的分析来**软件;而动态调试则是指**者利用调试器跟踪软件的运行,寻求**的途径。
动态调试有两种方法:Jeb调试和AndroidStudio+smalidea插件动态调试。

一:JEB工具介绍

JEB是一款功能强大的为安全专业人士设计的Android、应用程序反编译工具。用于****或审计APK文件,可以提高效率减少许多工程师的分析时间。

首先下载JEB工具,下载完成后解压安装包, 解压后运行安装目录下的jeb_wincon.bat文件。

本次以“zhuceji.apk”文件作为案例,再下载“zhuceji.apk”文件,打开雷电模拟器安装该APK,点击运行。弹出两个编辑框“用户名”和“***” 以及一个注册按钮,如下图所示。

JEB动态调试

打开JEB工具,将该“zhuceji.apk”文件拖入“项目”窗口,自动开始反编译。反编译完成后,包含以下4项信息,如下图所示:

Manifest:配置文件
Bytecode:字节码
Certificate:证书
Resources:资源文件

JEB动态调试

探究:如果无法打开JEB工具怎么办?

简单来讲,就是检查JDK环境变量,是否配置JAVA_HOME。具体可以查看JDK环境配置教程。

接下来双击“Bytecode”,右侧打开了两个窗口,工程目录(Bytecode/Hierarchy)和反汇编窗口(Bytecode/Disassembly),如下图所示。

JEB动态调试

为了方便后面的静态分析和动态调试,通过拖拽窗口的方式,调整UI界面。在工程目录(Bytecode/Hierarchy)中双击指定的文件,就会跳转到反汇编窗口(Bytecode/Disassembly)里面smali代码对应的位置。

比如这里选中“MainActivity”双击则会跳转到对应的位置,也可以直接双击指定字段或者方法跳转到对应的位置,如下图所示。

JEB动态调试

二:逆向分析JAVA代码

为了方便操作,平时都会使用快捷键,在这里介绍两个快捷键:

1.快捷键Q:将定位到的smali转换为伪代码。具体操作就是在工程目录中,单击选中“MainActivity”文件按“Q”即可。
2.快捷键Ctrl+B:在Smali中鼠标单击选中行后添加断点,再按一次取消断点。

在做JEB的动态调试前,必须先静态分析APP执行流程。

在工程目录中,选中“MainActivity”文件按“Q”将smali转换为伪代码,然后找到它的onCreate函数,这个函数的作用就是初始化当前代码绑定的一些事件,如下图所示,分析的这个”注册”按钮的点击事件。

JEB动态调试

这个onClick函数就是我们需要分析的“点击事件”,紧接着就是一个if判断,可以看到“edit_username”,它获取到了我们账号编辑框里的内容以及***的内容,接着调用了当前类里面的一个checkSN这个方法,我们看这个方法实现了那些功能,如下图所示。

JEB动态调试

然后直接双击checkSN这个方法就会跳转到对应的实现位置,如下图所示。

JEB动态调试

在这里可以看到账号和***传递进来,首先判断账号是否为空(null),如果为空,就return返回一个false,方法执行结束;不为空,继续执行。

再判断账号的长度是否为0 ,如果长度为0,就return返回一个false,方法执行结束;不为0,继续执行。
最后判断***是否为空(null)以及它的长度是否为16。如果为空或不为16,就return返回一个false,执行结束。不为空且长度为16,继续执行。
将传进来的账号进行MD5运算,里面还有一个for循环一直对运算的结果进行一个拼接,每次+2。拼接完成以后还调

equalsIgnoreCase进行了一个比较,如果该方法的返回值为false ,就说明输入的***错误,反之,返回值为true,就说明***是正确的。

三:Jeb动态调试

Jeb动态调试有两种方式:
一种是普通模式调试,另外一种是debug模式启动程序调试。

1.普通模式调试

(1)在smali代码中找到checkSN方法,鼠标点击该方法的第一条指令,
按快捷键Ctrl+B设置断点,如下图所示。

JEB动态调试

(2)运行设备上被调试的应用,这节课里也是“zhuceji.apk”,再点击菜单栏上“Debugger”选项下的“Start”按钮开始调试,如下图所示。

JEB动态调试

(3)点击”start”按钮后,会弹出一个弹窗,在这里点击“确定”按钮,如下图所示。

JEB动态调试

(4)之后就会弹出一个“Attach”窗口:
Machines/Devices:选中要调试设备,即设备名称。
Processes:选中要调试的应用程序对应的进程,即Flags为D的进程,也就是进程列表,可通过点击Flags 排序的方式快速选中。点击下“attach”按钮开始调试,如下图所示。

JEB动态调试

(5)点击“attach”附加成功后,可以看到调试界面中有增加的窗口,如下图所示。
VM/Threads 是线程窗口。
VM/Breakpoints 是查看断点窗口。
VM/Locals是寄存器窗口,使用它查看对应寄存器的值,但是上排的工具还是灰色无法使用。

JEB动态调试

(6)再次打开“zhuceji.apk”,分别输入“用户名”为“易锦大学”,“***”为“1234567890123456”,用户名和***可以自拟,如下图所示。

此时点击“注册”按钮,程序就会在我们设置断点的位置断下来,如下图所示。

JEB动态调试

查看是否断点成功,下段点的位置变为深蓝色,这就表示成功断下。寄存器窗口,显示当前寄存器的信息。如下图所示。

JEB动态调试

这时,上排灰色的图标会变亮,这些图标是JEB调试的常用功能,如下图所示。
绿色三角:恢复程序运行。
红色正方形:结束调试。
后面四个黄色的箭头依次分别为:单步步入、单步步过、返回、运行到光标所在位置。

JEB动态调试

通过之前的分析,我们知道checkSN方法会对我们输入的“用户名”和“***”进行一系列的判断:判断账号不是不为空(null),判断账号的长度不为0 ,判断***的不为空(null)且长度为16。如果均满足条件,然后就会对我们输入的用户名进行MD5运算,获取摘要信息。将MD5后的摘要信息转换为字符串存放在v3寄存器里面 。要查看v3寄存器里面存放的字符串内容,需要修改它的数据类型,将int类型改为string类型。v3寄存器存放的字符串长度为32,对这个字符串进行处理,如下图所示。

注意:查看完寄存器的值后记得把它的数据类型改回int类型,否则程序会崩溃。

JEB动态调试

这里看到他加密出来的值为:“2693cd1ae58a54a161599de9130fa864”,把这个值传递进去,进行一个for循环,看到这里就是循环 v4的值每次都加2,然后goto到68这个位置,判断是否取这个32位的循环,取完后会在0000007c这个位置进行一个比较,最后把运行取值存放在v6寄存器中,这里需要转换为string类型,后面的“200c5d8e953336bd”就是正确的***。

注意:jeb反编译中的smali代码和androidkiller 反编译的smali代码的格式区别

通过以上的调试,得出正确的***为:“200c5d8e953336bd”,如下图所示。

JEB动态调试

现在把这个字符串输入到***编辑框里面,点击“注册”按钮,提示“注册成功”,如下图所示。

JEB动态调试

2. debug模式调试

debug模式调试和普通模式调试区别在哪里?在程序启动过程中,程序入口界面和入口点里的函数执行时机非常早。要调试此类函数,就需要使用debug模式启动。

首先打开雷电模拟器,保证需要调试的apk已经安装。在cmd里面输入adb shell am start -D -n 应用程序包名/应用程序入口界面,回车执行该命令,如下图所示。

JEB动态调试

我们可以看到模拟器弹出了一个弹窗,等待被调试,如下图所示。

JEB动态调试

在onCreate方法打一个断点,设置断点的方法和普通模式相同。点击菜单栏“Debugger”选项下的“Start”按钮开始调试,如下图所示。

JEB动态调试

附加成功后,可以看到成功在onCreate方法断下,如下图所示。

JEB动态调试

既然断点设置成功,就说明我们同样可以采用“debug”模式进行调试,也可以得到和普通模式一样的结果,步骤一样就不再重复。

小结;

本次主要分享Jeb动态调试相关内容:

1.调试快捷键:
“Q”→ 将smali转换为伪代码
“Ctrl+B”→设置断点

2.普通模式调试的步骤:
(1)找到checkSN方法 ,Ctrl+B设置断点。
(2)运行被调试的应用,点“Debugger”选项下的“Start”按钮开始调试。
(3)点击弹窗里“确定”按钮。
(4)点击“Attach”窗口下方的“attach”按钮开始调试
(5)输入“用户名”“***”,点击“注册”按钮,程序会在设置断点的位置断下来了。
(6)分析调试得到正确的“***”。

3.debug模式调试的命令:
adb shell am start -D -n 应用程序包名/应用程序入口界面。

今天的内容到这人就已经分享完成了,喜欢就点个关注呗,给博主一点动力啊

如果你也对安卓逆向感兴趣。可以加下方的群,大家一起讨论问题,或者扫描下方二维码,关注回复 “安卓逆向” 获取免费教程

安卓逆向交流学习:1139349849
vx:Yjxiaox

JEB动态调试