下载附件,解压出来为三种不同平台的执行程序。
打开EXE可执行文件:
随意输入Key,程序退出。
在IDA中打开,找到主函数,关键代码如下:
printf("Key: "); v6 = v9; scanf("%s", v9); if ( check_key(v9) ) interesting_function((int)&v8); else puts("Wrong"); return 0;
可以看到 check_key() 为关键函数,跟进查看:
BOOL __cdecl check_key(int a1) { signed int i; // [esp+8h] [ebp-8h] int v3; // [esp+Ch] [ebp-4h] v3 = 0; for ( i = 0; i <= 4; ++i ) v3 += *(_DWORD *)(4 * i + a1); return v3 == -559038737; }
没啥头绪啊。。。。
在OD中动态调试试试吧。在上述if语句中下断点:
随意输入key运行到此处:
发现在此对EAX进行检测,我们随意输入的key当然通过不了,在OD中对EXA置1:
继续运行:
出现了这个不知道是什么东西,晕~(((φ(◎ロ◎;)φ)))
再次在OD中调试,这次不对EAX进行修改:
提示错误,推测咱们对EAX的修改是有效果的。
既然OD这里不行那就用ELF文件进行调试吧。
我用的是IDA远程调试。
同样的方法,下断点
修改EXA:
运行结果:
flag:flag_is_you_know_cracking!!!
解题完毕~~~