CTF題解三 逆向 where is your flag(ISCC2017)

直接進入test函數:

下面的代碼進行第一步操作:

這裏寫圖片描述

首先a1的長度應該爲19。

接下來對s2進行異或處理。

題目中給出的s2的值如下:

 s2 = 0x3929531D01070A00LL;
 v4 = 0x391257391F150703LL;
 v5 = 0x150F;
 v6 = 0x1B;

s2是int64類型,共有8個字節。由於s2、v4、v5和v6的地址是相連的,所以當從s2的起始地址開始進行19個字節的異或處理時,v4、v5和v6中的數值也會被處理。

由於s2佔據了多個字節,在存儲的過程中,一定存在着先分配的字節放在高地址還是低地址的問題。在s2中先分配的字節應該是放在了低地址處。

對s2、v4、v5和v6中的元素按順序寫出,應爲:

 s2 = 0x00,0x0A,0x07,0x01,0x1D,0x53,0x29,0x39;
 v4 = 0x03,0x07,0x15,0x1F,0x39,0x57,0x12,0x39;
 v5 = 0x0F,0x15;
 v6 = 0x1B;

然後對其進行異或處理,s2、v4、v5和v6中的元素實際對應的字母爲:

 s2 = "flag{50_";
 v4 = "easy_lt_";
 v5 = "is";
 v6 = "}";

這裏寫圖片描述

對於之後每一步,只要挨着分析即可:

  1. a1前5位爲’flag{‘
  2. a1最後1位爲’}’
  3. a1第7、10、13位應該爲’_’-49,即’.’
  4. a1第5、6位爲’lt’
  5. a1第8、9位爲’is’
  6. ……
  7. 得到a1爲:

flag{lt.is.50.easy}

反思:

本題主要對於s2的異或理解上出現了問題,忘記考慮了與s2地址相連的其它變量。對於16進制的表示以及小端的特性還是不夠熟悉。

發佈了48 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章