首页
论坛
专栏
课程

第一题 流浪者WriteUp

2019-3-14 22:47 527

第一题 流浪者WriteUp

2019-3-14 22:47
527
通过查看字符串来到下面这个函数
int __cdecl sub_4017F0(char *a1)
{
  int result; // eax
  char Str1[28]; // [esp+D8h] [ebp-24h]
  int v3; // [esp+F4h] [ebp-8h]
  int v4; // [esp+F8h] [ebp-4h]

  v4 = 0;
  v3 = 0;
  while ( *(_DWORD *)&a1[4 * v4] < 62 && *(_DWORD *)&a1[4 * v4] >= 0 )
  {
    Str1[v4] = aAbcdefghiabcde[*(_DWORD *)&a1[4 * v4]];// abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ\x00  Str1从这个串中得到KanXueCTF2019JustForhappy的
    ++v4;
  }
  Str1[v4] = 0;
  if ( !strcmp(Str1, "KanXueCTF2019JustForhappy") )
    result = pass_401770();
  else
    result = error_4017B0();
  return result;
}
下面查找交叉引用,找出索引的构造
int __thiscall sub_401890(CWnd *this)
{
  struct CString *v1; // ST08_4
  CWnd *v2; // eax
  int v3; // eax
  int v5[26]; // [esp+4Ch] [ebp-74h]
  int i; // [esp+B4h] [ebp-Ch]
  char *Str; // [esp+B8h] [ebp-8h]
  CWnd *v8; // [esp+BCh] [ebp-4h]

  v8 = this;
  v1 = (CWnd *)((char *)this + 100);
  v2 = CWnd::GetDlgItem(this, 1002);
  CWnd::GetWindowTextA(v2, v1);
  v3 = sub_401A30((char *)v8 + 100);
  Str = CString::GetBuffer((CWnd *)((char *)v8 + 100), v3);
  if ( !strlen(Str) )
    return CWnd::MessageBoxA(v8, "请输入pass!", 0, 0);
  for ( i = 0; Str[i]; ++i )
  {
    if ( Str[i] > '9' || Str[i] < '0' )
    {
      if ( Str[i] > 'z' || Str[i] < 'a' )
      {
        if ( Str[i] > 'Z' || Str[i] < 'A' )     // 
          error_4017B0();
        else
          v5[i] = Str[i] - 29;                  // 大写字母  -29
      }
      else
      {
        v5[i] = Str[i] - 87;                    // 小写字母  -87
      }
    }
    else
    {
      v5[i] = Str[i] - 48;                      // 数字-48
    }
  }
  return sub_4017F0((char *)v5);
}
通过这段函数,把我们的输入进行了代换
数字     从48-57   变成0-9
小写字母 从97-122  变成10-35
大写字母 从65-90   变成36-61
编写脚本:
s='abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ'
key=list('KanXueCTF2019JustForhappy')
x=[]
for k in key:
  x.append(s.index(k))
y=[]
for j in x:
  if j>=0 and j<=9:
    y.append(chr(j+48))
  if j>=36 and j<=61:
    y.append(chr(j+29))
  if j>=10 and j<=35:
    y.append(chr(j+87))
print(''.join(y))

得到结果:j0rXI4bTeustBiIGHeCF70DDM



[招聘]欢迎市场人员加入看雪学院团队!

最新回复 (0)
游客
登录 | 注册 方可回帖
返回