OD调试9

0x00 载入程序,F9运行,了解程序运行大概

OD调试9

 

0x01 查看功能限制点,然后可以更加关键字查找程序位置,了解程序逻辑。

 

关键字:

OD调试9

 

 

 

重新载入程序,查找关键字:

OD调试9

 

OD调试9

 

双击进入该位置。

OD调试9

0x02:发现一处关键跳转,如果跳转发送,会出现注册成功字样。而跳转条件由al寄存器内容控制。(知识点:所有call函数的返回值都是由eax寄存器保存的)而al是eax寄存器的低位,所以找到最近的call函数,可以控制al的值。

OD调试9

 

 

在call函数处下断点,然后重载跟进。随意输入测试数据,程序在断点处停止。F7步入查看。

OD调试9

 

 

0x03:在函数内发现有两处对al的值进行比较的地方,同时调用了两个call,在此注释,或者下断点,方便进出查看。

OD调试9

进入第一个call查看。(注意观看寄存器值的变化)

OD调试9

 

发现一段指令:

mov bl,al

call *****

mov ecx,ss[ebp-10]

mov al,bl

先将al的值暂存,然后调用了一个函数(可能用到了al),之后又把al还原。那么在在这里我们就可以观察al的值。

OD调试9

 

OD调试9

发现bl暂存的al的值是0(test实际做and比较,要使jnz发生跳转,那么test的值要是1,也就是al要为1。)

那么我们就可以修改返回给al的值,让其等于1,这样就达到**的要求。

OD调试9

 

OD调试9

 

然后我们F9运行程序,就会发现程序已经成功注册。

OD调试9

 

最后就是将修改的部分保存,重新生成**版程序。

我门在刚才的地方发现了两处call但其实F7步入之后所作的操作非常相似,所以修改一处就可以了。