本次我们学习一个小程序的逻辑。

编程的时候,会有几个条件判断,当符合之后,才会允许下一步操作。


程序:


逆向调试入门-判断逻辑_逆向调试


思路:


跟以前一样

1、运行小程序,看下程序怎么跑

2、猜想程序的逻辑结构

3、调试程序


实战


运行小程序


逆向调试入门-判断逻辑_逆向调试_02


弹出窗口


逆向调试入门-判断逻辑_逆向调试_03


我们开始调试,打开OD

一步一步进行调试,F8


逆向调试入门-判断逻辑_逆向调试_04


这两个call函数,看样子是载入图标和鼠标样式


逆向调试入门-判断逻辑_逆向调试_05


路过一个文件读取操作函数


逆向调试入门-判断逻辑_逆向调试_06


在这里我们看到一个call函数,MessageBoxA

正是提示我们的“Evaluation period out of date. Purchase new license”



逆向调试入门-判断逻辑_逆向调试_07


最后一个call函数是终止程序。


逆向调试入门-判断逻辑_逆向调试_08


我们重新加载程序。Ctrl+F2

运行到断点处,F9



逆向调试入门-判断逻辑_逆向调试_09


在这个MessageBox的函数前,我们跳过


逆向调试入门-判断逻辑_逆向调试_10


经查询知道,这个JNZ指令条件跳转在于Z标志位


逆向调试入门-判断逻辑_逆向调试_11


将标志位设置为0


逆向调试入门-判断逻辑_逆向调试_12


来到这个函数,应该是读取文件,而且是许可证文件内容


逆向调试入门-判断逻辑_逆向调试_13


下断点,我们继续

发现这个jmp跳转,直接到了call函数


逆向调试入门-判断逻辑_逆向调试_14


这里的messagesbox提示“keyfile is not valid”,许可证内容。


重新加载程序


逆向调试入门-判断逻辑_逆向调试_15


我们看看JL是跳转到哪里?


逆向调试入门-判断逻辑_逆向调试_16


所以这里我们不能跳转。

赶紧查询手册


逆向调试入门-判断逻辑_逆向调试_17


SF!=OF


我们改变SF的值


逆向调试入门-判断逻辑_逆向调试_18


这里进行了对比。

我们让其不实现


逆向调试入门-判断逻辑_逆向调试_19


一直走下来,发现弹出成功窗口


逆向调试入门-判断逻辑_逆向调试_20


保存文件。

爆破成功!


小程序思路:


1、打开先检查有没有“keyfile.dat”文件


逆向调试入门-判断逻辑_逆向调试_21


2、检查许可证文件有没有足够的字符串


逆向调试入门-判断逻辑_逆向调试_22


3、检查内容是不是ascall码47


逆向调试入门-判断逻辑_逆向调试_23


逆向调试入门-判断逻辑_逆向调试_24


查询得知,为大写的G,连续8个G


4、最后成功打开