crackme程序名叫 Acid burn.exe,这是NCK破解第二课的课后练习题。
API断点法:
GetMessageBoxA下断,然后跟到上层函数,运行到返回
跟到 42FB1D 可以看到上面不远处42FB03 有一个if else 将它nop掉或者改成je
这个jne上面有一个函数调用,可能是检测密码的,改成je或nop后,密码错误会进入正确的执行流程
再往上 42FA52 可能是检测用户名长度的函数,经测试,长度<4直接打印密码错,修改下面的JCC,改成JMP,即完成破解。
关卡2方法类似,修改 0042F4D5 改成NOP即完成破解
字符串查找法:
搜索字符串,除了提示信息外,还找到了一些奇怪的东西,经测试就是密码
Hello Dude!
字符串交叉搜索:
使用ida搜字符串,如果要搜索中文字符串,则要加上 -dCULTURE=all 参数
搜索到之后,点X交叉引用,得到地址,再去OD里面跟就行了。
ALT+K暂停法(调用堆栈法):
弹出对话框后,点暂停,然后按K转到调用堆栈视图,可以找到MessageBoxA。
后面的步骤和前面的方法一样。往上跟就能找到关键判断点。
访问断点法:
在OD里搜字符串可能搜不到,但是在内存视图里就可能会搜到。弹出提示错误信息后,记下字符串
按M转到内存视图,搜索字符串,就能搜到“注册失败”字样,然后点击内存访问断点,就能找到MessageBoxA。
硬件访问字节断点也可以。
如果没断下来,说明是OD插件导致的,换成x32dbg试试。
自动跟踪法(控制台程序找入口点):
假设主函数内有阻塞,可以这样找主函数:自动步过,直到在某个函数卡住,然后进入该函数,继续自动步过,如此反复,即可找到主函数。