1. 程式人生 > 其它 >BUUCTF之[GWCTF 2019]xxor~~

BUUCTF之[GWCTF 2019]xxor~~

老樣子,無殼64位。

然後丟ida繼續分析.

在函式列表中找到Main函式,繼續分析

一開始是讓你輸入6個int型別的數,並存入到v6陣列中

在外層的迴圈中,出現了LODWORD和HIDWORD,這裡就是指的高位位元組,和地位位元組。

而為什麼上面的dword_601078不用LODWORD呢?這裡我是將資料型別改為了int,也就是傳入一個位元組,這裡原來的資料型別是__int64,也就是8個位元組,我強制轉了int.

然後在第二個for迴圈中,有一個關鍵的函式sub_400686,繼續跟進

發現是對傳入的資料進行一個整體的加密,而傳入的引數也是我們輸入的資料。

這裡要注意一個點,外層是三次迴圈,對每次傳入的第a[i],a[i+1]的資料進行加密,也就是一共加密了3次,每次加密2組資料

而內層迴圈也應證了這一點,每次對a[i],a[i+1]進行加密

最後在main函式的末尾中,有一個sub_400770函式,發現裡面是將加密後的資料進行比對.

這裡就可以作為密文了。

這裡我們可以通過z3解出來這幾個密文的資料

tips:這裡的負數,在計算機中是以補碼的形式存在的,不能直接轉Hex,而是要按位取反+1,在計算器直接用not也行

下面直接用z3爆出這幾個密文的資料就行:

知道了密文後,直接根據加密的演算法,寫解密指令碼即可