school-ctf-winter-2015:simple-check-100

下载附件,解压出来为三种不同平台的执行程序。

打开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!!!

解题完毕~~~

猜你喜欢

转载自www.cnblogs.com/MuZiShiYe/p/11251434.html
今日推荐