安卓逆向015之JEB静态分析与动态调试(注册机)

1、基础信息

静态分析是指:


逆向从业者利用工具将二进制可执行文件翻译为汇编代码,

通过汇编代码来看这个逻辑从而达到分析程序的需求。

动态调试是指:


使用调试器跟踪软件的运行,查看其父节点、子节点等寻找突破的关键点。

2、JEB的使用

下载直接百度或者谷歌“ JEB 逆向下载 ”即可。

解压打开jeb,双击打开即可		//需要有java的环境

在这里插入图片描述


弹出的CMD窗口会爆一个错误,版本兼容问题,直接无视即可。

在这里插入图片描述


JEB主要就是一个安全反汇编的软件

打开一个案例,即注册机,这个界面是不是像很多的辅助软件,

在这里插入图片描述


在JEB打开也很简单,直接拖进去,很类似AK。

从上到下,依次是配置文件、证书、字节码、资源文件。

在这里插入图片描述


双击打开第三个的“字节码”,直接是“伪代码”,

此时可以通过快捷键“Q”,来切换Smali代码与java代码。		//有的版本是tab

“CTRL+B”下断点,不能在java代码处下断点。


选择“MainActivity/Source”,看到三个熟悉的变量,

即“ 按钮、激活码、用户名 ”,直接对应来“注册机”软件。

在这里插入图片描述

3、开始分析


第一个框,是调用了父类。

在这里插入图片描述


第二个框,

获取输入的用户名与激活码,并做判断,返回一个布尔值。

在这里插入图片描述


先给V7设置默认值为“false”,如果arg11=空,返回V7。

在下边两行,判断arg11的长度不为空,且arg12不为空且arg12的长度为16,

则进入逻辑,下图的大框,其中的小框是在做md5的算法,具体不需要了解。

在这里插入图片描述


直接向下看,找重点。

看到if判断括号的内容是否成立,但是不要忘记前边的“! ”,

即条件不成立,返回V7(false),条件成立程序继续执行,

先给V7赋值为true,在返回,找到重点之后,我们就可以直接下断点了。

在这里插入图片描述


直接按“Q”,切换为smali代码  下断点,之后可以一步步向下跟着逻辑走。

在这里插入图片描述


向下看看,找到判断的地方,

在这里插入图片描述


不确定,在按“Q”,查看java代码,直接回来,就是这里。

在这里插入图片描述

在这里已经可以推断出,这个V8里边存的就是判断激活码的布尔值(即是true还是false)。

开始动态调试,

在这里插入图片描述


点击“debug”,会弹出框,让你选择模拟器,

弹出两个模拟器,雷电模拟器的bug。(此时就开了一个模拟器)

在这里插入图片描述

先打开任务管理器,将“adb.exe”干掉。

在这里插入图片描述


输入“adb devices”来看看到底是多少,这里是5568.

在这里插入图片描述


选择5568模拟器后,找到对应的软件,直接attach。

在这里插入图片描述


等待一会,直接加载成功,

在这里插入图片描述


但是寄存器为什么没有值呢?

因为还没有输入对应的账户与注册码,进行触发。

在这里插入图片描述

激活码一定要输入16位,用户名随意。之后点击注册。

在这里插入图片描述

此时,程序停了,寄存器也有值了

在这里插入图片描述


此时,上边的光标也解封了,

点击红箭头指的地方,让程序一步一步向下运行。

在这里插入图片描述

4、峰回路转


向下点击程序运行的时候,竟然崩溃了,我们重新下个断点,

重启jeb,加载程序,

直接在关键部位下,如图

在这里插入图片描述


再次运行程序,输入任意账户以及16位激活码,

点击debug,在让程序向下走一步。

先看卡代码逻辑,将我们传入的激活码P2与V6比较,将结果保存到V8,

在判断V8的值。

在这里插入图片描述


此时将V6的类型转化为string,边看到了具体的值。将此值复制。

之后将jeb调试停止。

在这里插入图片描述

将复制的值填写到注册码处,直接注册成功。

在这里插入图片描述

这里注意的是,复制的V6的值注册时,这个用户名不要变。

因为这个V6的值仅仅对应的刚刚输入的用户名

Guess you like

Origin blog.csdn.net/weixin_43970718/article/details/119879802