首页
社区
课程
招聘
[原创]JEB动态调试
发表于: 2020-10-23 18:02 17291

[原创]JEB动态调试

2020-10-23 18:02
17291

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

动态调试有两种方法:Jeb调试和AndroidStudio+smalidea插件动态调试。

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

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

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

打开JEB工具,将该“zhuceji.apk”文件拖入“项目”窗口,自动开始反编译。反编译完成后,包含以下4项信息,如下图所示。
Manifest:配置文件
Bytecode:字节码
Certificate:证书
Resources:资源文件

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

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

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

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

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

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

1.快捷键Q:将定位到的smali转换为伪代码。具体操作就是在工程目录中,单击选中“MainActivity”文件按“Q”即可。

2.快捷键Ctrl+B:在Smali中鼠标单击选中行后添加断点,再按一次取消断点。
在做JEB的动态调试前,必须先静态分析APP执行流程。

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

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

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

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

再判断账号的长度是否为0 ,如果长度为0,就return返回一个false,方法执行结束;不为0,继续执行。

最后判断注册码是否为空(null)以及它的长度是否为16。如果为空或不为16,就return返回一个false,执行结束。不为空且长度为16,继续执行。

将传进来的账号进行MD5运算,里面还有一个for循环一直对运算的结果进行一个拼接,每次+2。拼接完成以后还调equalsIgnoreCase进行了一个比较,如果该方法的返回值为false ,就说明输入的注册码错误,反之,返回值为true,就说明注册码是正确的。

Jeb动态调试有两种方式:

一种是普通模式调试,另外一种是debug模式启动程序调试。

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

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

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

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

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

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

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

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

这时,上排灰色的图标会变亮,这些图标是JEB调试的常用功能,如下图所示。

绿色三角:恢复程序运行。

红色正方形:结束调试。

后面四个黄色的箭头依次分别为:单步步入、单步步过、返回、运行到光标所在位置。

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

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

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

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

通过以上的调试,得出正确的注册码为:"200c5d8e953336bd",如下图所示。

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

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

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

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

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

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

本次主要学习了Jeb动态调试相关内容:
1.调试快捷键:
“Q”→ 将smali转换为伪代码
“Ctrl+B”→设置断点


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 9
支持
分享
最新回复 (7)
雪    币: 805
活跃值: (2698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
    楼主,可否分享教程中提到的软件及工具?
2020-10-27 01:13
0
雪    币: 1996
活跃值: (3899)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
3
老伙计 楼主,可否分享教程中提到的软件及工具?
主要是JEB工具,然后应用程序是我自己写的,需要可以私信我
2020-10-27 09:59
0
雪    币: 7278
活跃值: (5356)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2020-10-29 15:59
0
雪    币: 3093
活跃值: (1969)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
一共工具使用都能拿来打广告 => 易锦XX niuability
2020-11-11 15:22
3
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
 楼主能发下app吗? 不能私信
2023-5-18 21:22
0
雪    币: 156
活跃值: (1352)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
支持一下
2023-5-18 23:56
0
雪    币: 5675
活跃值: (31916)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢分享
2023-5-19 09:11
1
游客
登录 | 注册 方可回帖
返回