NCTU Crack Common encryption algorithms 解题报告

Reading time ~1 minute

助教给我们找了这么个网站,据说题目很水……

第一题Simple "crackMe"…short and easy实在是太水,于是直接上第二题了,传送门在此

题目描述:

'lovetc' forgot his own password,

maybe you can reverse it and find the encryption algorithm....

press "start" then download it.

Hint: The checkin key is his password....

这是个图形化程序,首先IDA走起,然后找到消息分发函数:

int __stdcall DialogFunc(HWND hDlg, int a2, int a3, int a4)
{
  HICON v4; // eax@2
  UINT v5; // eax@9
  unsigned int v7; // [sp-4h] [bp-8h]@11

  switch ( a2 )
  {
    case 272:
      v4 = LoadIconA(hInstance, (LPCSTR)0x1F4);
      SendMessageA(hDlg, 0x80u, 0, (LPARAM)v4);
      break;
    case 16:
      EndDialog(hDlg, 0);
      break;
    case 273:
      switch ( a3 )
      {
        case 300:
          MessageBoxA(
            hDlg,
            "       +=================================+               n       |   Keygen-me N Created on 27/08/2003  |n       +=================================+               n                                     nTry to keygen this program, and send your solution tonwww.crackmes.de, for more informations contact me at n#eminence channel on eFnet.n                                                               Enjoy Crypto.....n                                                               n                             (C)2003 BytePtr [e!]  n",
            "AbOut",
            0);
          break;
        case 900:
          v5 = GetDlgItemTextA(hDlg, 100, String1, 300);
          if ( !v5 )
            return MessageBoxA(0, "Your name please !!!", "oooH input Error", 0);
          v7 = v5;
          if ( !GetDlgItemTextA(hDlg, 200, String, 300) )
            return MessageBoxA(0, "Where is Da serial DuDe ?", "oooH input Error", 0);
          lstrcatA(String1, "BytePtr [e!]");
          sub_401000((int)String1, v7, (int)&unk_4056A8);
          sub_401B79();
          if ( lstrcmpA(String, byte_4079D0) )
          {
            MessageBoxA(0, "hmmm not like this  DuDe Try again....", "Fatal Error", 0);
            return 0;
          }
          MessageBoxA(0, "Good serial", "Good Work", 0);
          break;
        case 400:
          EndDialog(hDlg, 0);
          break;
      }
      break;
  }
  return 0;
}

很显然,关键应该就在sub_401000了,可是,当我们打开这个函数一看的时候,简直是长的不忍直视,虽说是好像没再调用些别的神马函数,耐着性子一步步来肯定可以搞出答案,但肯定不是个明智的选择。

然后再仔细观察程序会发现,sub_401000只对输入框中输入的Name做了处理,最后是直接拿处理得到的字符串和byte_4079D0,也就是输入的Serial做对比,那么显然我们可以debug让这个程序跑起来,输入正确的Name(lovetc),让程序停在lstrcmpA前,然后我们便可以很轻松的得到Serial。

于是,此题得以解决~~~

keygenme.rar

挂载网络文件夹后网络故障时文件操作命令卡死

挂载 NFS 或者 Samba 的时候,经常会由于网络故障导致挂载好的链接断掉。此时如果尝试进行 ls、cd、df 等各种命令,只要与此目录沾上边,就会卡住。如果使用了类似 oh-my-zsh 这种配置的,只要在网络目录中,弹出命令提示符前就会直接卡住。这个时候第一反应就是...… Continue reading

路由折腾记 第四弹

Published on September 02, 2017