本人是新手,昨天破解了平生第一个crackme,前一段时间一直在看关于这方面的基础东西,昨天晚上小小的尝试了一下,结果破掉了自己的第一个crackme。下面附上详细的过程,忘各位大牛指点,谢谢。
1.首先,我用的是《软件加密解密实战入门》这本书里的第一个crackme,当错误注册后会提示 i am sad,截图如下
看到 i am sad,这个是一个提示信息。
2.然后我们scan 这个pe文件with peid,可以看到,这个crackme加了壳,UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo。 截图如下
3.接着我们可以用PEID 的通用脱壳插件脱去upx壳
4.然后我用c32asm 载入脱过壳的pe文件,ctrl+f 查找sad(注意刚才那个注册错误的提示,可以从这儿入手)附上载入代码:
::004513B6:: 8D55 F8 LEA EDX,[EBP-8] \:BYJMP JmpBy:004513A2,
::004513B9:: 8B83 F4020000 MOV EAX,[EBX+2F4]
::004513BF:: E8 ACE1FDFF CALL 0042F570 \:JMPUP
::004513C4:: 8B45 F8 MOV EAX,[EBP-8]
::004513C7:: 8B15 2C3C4500 MOV EDX,[453C2C]
::004513CD:: E8 3632FBFF CALL 00404608 \:JMPUP
::004513D2:: 75 12 JNZ SHORT 004513E6 \:JMPDOWN
::004513D4:: BA 40144500 MOV EDX,451440 \->: Welcome!
::004513D9:: 8B83 F0020000 MOV EAX,[EBX+2F0]
::004513DF:: E8 BCF3FFFF CALL 004507A0 \:JMPUP
::004513E4:: EB 10 JMP SHORT 004513F6 \:JMPDOWN
::004513E6:: BA 54144500 MOV EDX,451454 \:BYJMP JmpBy:004513D2, \->: I am sad!
::004513EB:: 8B83 F0020000 MOV EAX,[EBX+2F0]
::004513F1:: E8 AAF3FFFF CALL 004507A0 \:JMPUP
::004513F6:: 33C0 XOR EAX,EAX \:BYJMP JmpBy:004513B4,004513E4,
::004513F8:: 5A POP EDX
::004513F9:: 59 POP ECX
::004513FA:: 59 POP ECX
::004513FB:: 64:8910 MOV FS:[EAX],EDX
大家可以看到i am sad 这个语句所在的虚拟地址为004513E6
这个地址是由::004513D2:: 75 12 JNZ SHORT 004513E6这条指令跳转过来的,也就是说,这条指令直接导致了我们注册失败,所以我们需要解决的就是不要它跳到i am sad 或者不让他进行跳转。
可以看这条指令的下一条指令,::004513D4:: BA 40144500 MOV EDX,451440 \->: Welcome!直接跳转到正确注册的指令上了,所以我这样解决的,让这个跳转失效,让其顺序执行,就可以执行到正确注册了。这样就解决问题了。
5.更改这条跳转汇编指令,改成NOP,就可以了,这样就解决问题了,
6.输入sdfsdfsdf成功注册。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)