美文网首页
Hello, CTF - 攻防世界(adword)逆向集合

Hello, CTF - 攻防世界(adword)逆向集合

作者: 弦歌丶 | 来源:发表于2021-03-01 10:36 被阅读0次

Hello, CTF

文件

file: 18a51cbc365c488f89c9feee59868ea5.exe

sha1: 278c4d8f858929c14415d4c5e2274ebf33c41c65

测试

运行

PS C:\Users\c\Downloads> .\18a51cbc365c488f89c9feee59868ea5.exe
please input your serial:aaaaaaaaaaaaa
wrong!

查壳

1614565369169.png

32位程序,没有加壳。

静态分析

载入 IDA Pro 查看伪代码:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int i; // ebx
  char v4; // al
  int result; // eax
  int v6; // [esp+0h] [ebp-70h]
  int v7; // [esp+0h] [ebp-70h]
  char Buffer[2]; // [esp+12h] [ebp-5Eh] BYREF
  char v9[20]; // [esp+14h] [ebp-5Ch] BYREF
  char v10[32]; // [esp+28h] [ebp-48h] BYREF
  __int16 v11; // [esp+48h] [ebp-28h]
  char v12; // [esp+4Ah] [ebp-26h]
  char v13[36]; // [esp+4Ch] [ebp-24h] BYREF

  strcpy(v13, "437261636b4d654a757374466f7246756e");
  while ( 1 )
  {
    memset(v10, 0, sizeof(v10));
    v11 = 0;
    v12 = 0;
    sub_40134B(aPleaseInputYou, v6);
    scanf("%s", v9);
    if ( strlen(v9) > 0x11 )
      break;
    for ( i = 0; i < 17; ++i )
    {
      v4 = v9[i];
      if ( !v4 )
        break;
      sprintf(Buffer, "%x", v4);
      strcat(v10, Buffer);
    }
    if ( !strcmp(v10, v13) )
      sub_40134B(aSuccess, v7);
    else
      sub_40134B(aWrong, v7);
  }
  sub_40134B(aWrong, v7);
  result = --Stream._cnt;
  if ( Stream._cnt < 0 )
    return _filbuf(&Stream);
  ++Stream._ptr;
  return result;
}

sub_40134B 函数应该是打印输出的函数,v9则是输入。输入字符串v9被遍历使用sprintf函数格式化为%x的形式并逐一拼接到v10最后比较v10437261636b4d654a757374466f7246756e来确定结果。

也就是437261636b4d654a757374466f7246756eflaghex字符串。直接使用python3获取flag

bytes.fromhex('437261636b4d654a757374466f7246756e')
// CrackMeJustForFun

flag

CrackMeJustForFun

相关文章

网友评论

      本文标题:Hello, CTF - 攻防世界(adword)逆向集合

      本文链接:https://www.haomeiwen.com/subject/qygofltx.html