运行程序:
左边按键:
右边按键:
干掉第一个画面
上OD,找strings:
定位到:
在retn处打断点,发现retn返回到这里:
那42563D处的call肯定调用了第一个画面里的对话框显示程序:)
重新运行程序,定位到42563D处,将call指令改成jmp指令:
再执行,提示:
嗯。。哪里肯定弄错了。。将修改后的程序另存为。重新运行原程序,在00425648打断点,执行到此处:
运行修改后的程序,在00425648打断点,执行到此处:
嗯,才发现之前修改的jmp指令有问题,其错过了栈和eax的恢复工作。。嗯,重改:
另存为Acid burn_1.exe,运行,嗯,这下没有第一个画面了。
干掉Serial/Name验证
当输入的Serial/Name不正确时,会:
祭出string大法,发现有两处:
不管,在两个地方都打断点。运行,填入Serial和Name,看到底会触发谁。程序在0042FB1F停下:
可以看到是0042FB03处的跳转因而到了这里,保险起见验证了一下,果然。
所以直接将0042FB03处的跳转指令改了,鉴于这里只有两字节的空间,要改成jmp xxx的形式不太现实,所以只是改了原指令的目标地址:
好了,这下不管输入什么,都是:
干掉Serial验证
当输入的Serial不正确时,会:
祭出string大法,再定位到程序里:
嗯,这完全和之前是一样的套路嘛。好吧,修改跳转指令:
再执行。哦也,搞定!