0x00 载入程序,F9运行,了解程序运行大概
0x01 查看功能限制点,然后可以更加关键字查找程序位置,了解程序逻辑。
关键字:
重新载入程序,查找关键字:
双击进入该位置。
0x02:发现一处关键跳转,如果跳转发送,会出现注册成功字样。而跳转条件由al寄存器内容控制。(知识点:所有call函数的返回值都是由eax寄存器保存的)而al是eax寄存器的低位,所以找到最近的call函数,可以控制al的值。
在call函数处下断点,然后重载跟进。随意输入测试数据,程序在断点处停止。F7步入查看。
0x03:在函数内发现有两处对al的值进行比较的地方,同时调用了两个call,在此注释,或者下断点,方便进出查看。
进入第一个call查看。(注意观看寄存器值的变化)
发现一段指令:
mov bl,al
call *****
mov ecx,ss[ebp-10]
mov al,bl
先将al的值暂存,然后调用了一个函数(可能用到了al),之后又把al还原。那么在在这里我们就可以观察al的值。
发现bl暂存的al的值是0(test实际做and比较,要使jnz发生跳转,那么test的值要是1,也就是al要为1。)
那么我们就可以修改返回给al的值,让其等于1,这样就达到破解的要求。
然后我们F9运行程序,就会发现程序已经成功注册。
最后就是将修改的部分保存,重新生成破解版程序。
我门在刚才的地方发现了两处call但其实F7步入之后所作的操作非常相似,所以修改一处就可以了。