吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 6098|回复: 85

[原创逆向图文] JEB动态调试

  [复制链接]
1122cf 发表于 2020-11-20 17:22 | 显示全部楼层 |阅读模式

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

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

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

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

图片9.png


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

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

图片10.png

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

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

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

图片11.png

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

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

图片12.png

二:逆向分析JAVA代码


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

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

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

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

图片13.png

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

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

图片15.png
在这里可以看到账号和注册码传递进来,首先判断账号是否为空(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设置断点,如下图所示。

图片16.png

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

图片17.png

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

图片18.png


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

图片19.png


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

图片20.png

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

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

图片21.jpg


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

! 图片22.png

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

图片23.png

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

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


图片24.png

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

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

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

图片25.png

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

图片26.jpg


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

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


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

图片28.png

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

图片29.png


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


图片30.png

既然断点设置成功,就说明我们同样可以采用“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  应用程序包名/应用程序入口界面。





图片21.png
图片26.png
微信图片_20200831160958.jpg

评分

参与人数 21威望 +1 HB +64 THX +12 收起 理由
lies + 1
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
创客者V2.0 + 1
459121520 + 1
极速菜 + 1
消逝的过去 + 1
冷亦飞 + 1
liugu0hai + 1 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
河图 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
zwj00544 + 1 + 1
我是好人 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
playboy + 2
ldljlzw + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
crosssss + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
拿着雪糕 + 1 + 1
king51999 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
firstcmm + 1 [快捷评语]--你将受到所有人的崇拜!
乌陵 + 1 + 1 [快捷评语]--评分=感恩!简单却充满爱!感谢您的作品!
Shark恒 + 1 + 50 + 1 [快捷评语]--你将受到所有人的崇拜!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
山海 发表于 2020-11-21 02:40 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
拿着雪糕 发表于 2022-1-29 14:34 | 显示全部楼层

感谢分享,学习一下
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ghostxu 发表于 2022-2-6 18:02 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
NnT74 发表于 2022-2-26 19:51 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
EJxhTi512 发表于 2022-2-27 10:00 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
不苦小和尚 发表于 2022-2-27 10:00 | 显示全部楼层


[快捷回复]-软件反汇编逆向分析,软件安全必不可少!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zBZnSURhcj 发表于 2022-2-27 10:00 | 显示全部楼层

感谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
sjhvBc 发表于 2022-2-27 10:14 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
wqG09452 发表于 2022-2-27 10:47 | 显示全部楼层

我现在已经把楼主作为我的学习目标了!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表