re每日一題(20200528)

re每日一題(20200528)

BabyDriver

2020GKCTF

64位驅動逆向,函數不是很多。看到\\Driver\\Kbdclass可以感覺是個鍵盤驅動,且調用了KdDisableDebugger()具有反調試。既然是CTF,就不需要完全分析,直接找關鍵地方。可以在sub_140001380找到flag的關鍵。

__int64 __fastcall sub_140001380(__int64 a1, __int64 a2)
{
  __int64 v2; // rbx
  __int64 v3; // rdi
  __int64 v4; // rax
  int v5; // ecx
  __int16 *v6; // rsi
  __int64 v7; // rbp
  __int16 v8; // dx
  char v9; // dl
  CHAR *v10; // rcx

  v2 = a2;
  if ( *(a2 + 48) >= 0 )
  {
    v3 = *(a2 + 24);
    v4 = *(a2 + 56) >> 3;
    if ( v4 )
    {
      v5 = dword_1400030E4;
      v6 = (v3 + 2);
      v7 = v4;
      while ( *(v3 + 4) )
      {
LABEL_28:
        v6 += 6;
        if ( !--v7 )
          goto LABEL_29;
      }
      aO[v5] = 46;
      v8 = *v6;
      if ( *v6 == 23 )
      {
        if ( v5 & 0xFFFFFFF0 )
        {
          v5 -= 16;
          goto LABEL_21;
        }
        v5 += 208;
        dword_1400030E4 = v5;
      }
      if ( v8 == 37 )
      {
        if ( (v5 & 0xFFFFFFF0) != 208 )
        {
          v5 += 16;
          goto LABEL_21;
        }
        v5 -= 208;
        dword_1400030E4 = v5;
      }
      if ( v8 == 36 )
      {
        if ( v5 & 0xF )
        {
          --v5;
          goto LABEL_21;
        }
        v5 += 15;
        dword_1400030E4 = v5;
      }
      if ( v8 != 38 )
        goto LABEL_22;
      if ( (v5 & 0xF) == 15 )
        v5 -= 15;
      else
        ++v5;
LABEL_21:
      dword_1400030E4 = v5;
LABEL_22:
      v9 = aO[v5];
      if ( v9 == 42 )
      {
        v10 = "failed!\n";
      }
      else
      {
        if ( v9 != 35 )
        {
LABEL_27:
          aO[v5] = 111;
          goto LABEL_28;
        }
        v10 = "success! flag is flag{md5(input)}\n";
      }
      dword_1400030E4 = 16;
      DbgPrint(v10);
      v5 = dword_1400030E4;
      goto LABEL_27;
    }
  }
LABEL_29:
  if ( *(v2 + 65) )
    *(*(v2 + 184) + 3i64) |= 1u;
  return *(v2 + 48);
}

可以看到一個O數組,數組特徵加代碼,可以知道這是一個迷宮。那麼接下來就需要把迷宮弄出來和知道對應按鍵就行。

****************
o.*..*......*..*
*.**...**.*.*.**
*.****.**.*.*.**
*...**....*.*.**
***..***.**.*..*
*.**.***.**.**.*
*.**.******.**.*
*.**....***.**.*
*.*****.***....*
*...***.********
**..***......#**
**.*************
****************

同時可以看到代碼中有4種情況,0x170x250x240x26。簡單查一下,驅動裏邊應該是指鍵盤的掃描碼。分別代表爲ijkl,又分別代表上左下右。從o到#的路徑則爲LKKKLLKLKKKLLLKKKLLLLLL

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章