BUUCTF學習記錄-Reverse(六)xor

BUUCTF學習記錄-Reverse(六)

題目:xor

平臺:buuctf

題目提示資訊:or的敵人,and 有個兄弟叫or,or有個敵人叫xor,那麼你能幫助or戰勝他的敵人xor嗎,xor的奧秘就在附件中,開始戰鬥吧!注意:得到的 flag 請包上 flag{} 提交

BUUCTF學習記錄-Reverse(六)xor

解題思路

BUUCTF學習記錄-Reverse(六)xor

發現是64位程式,應該是macOSx的程式,那麼我們使用ida64開啟。

BUUCTF學習記錄-Reverse(六)xor

直接F5

BUUCTF學習記錄-Reverse(六)xor

{

char *v3; // rsi

int result; // eax

signed int i; // [rsp+2Ch] [rbp-124h]

char v6[264]; // [rsp+40h] [rbp-110h]

__int64 v7; // [rsp+148h] [rbp-8h]

memset(v6, 0, 0x100uLL);

v3 = (char *)256;

printf(“Input your flag:\n”, 0LL);

get_line(v6, 256LL);

if ( strlen(v6) != 33 )

goto LABEL_12;

for ( i = 1; i < 33; ++i )

v6[i] ^= v6[i - 1];

v3 = global;

if ( !strncmp(v6, global, 0x21uLL) )

printf(“Success”, v3);

else

LABEL_12:

printf(“Failed”, v3);

result = __stack_chk_guard;

if ( __stack_chk_guard == v7 )

result = 0;

return result;

}

我們發現,是字元異或,然後與globa比較。

有兩個關鍵函式strlen和strcmp,strlen指出該字串長度是33,strcmp將v6和global進行對比,可見global是xor後的結果,點選global來到字串的位置,看到下面的字串,一看好像沒有33個字元。

雙擊globa

BUUCTF學習記錄-Reverse(六)xor

點選繼續跟它的資料

找到了最終的字串結果

那麼我們得到了就肯定是要幹他了

s = [‘f’,0xA,‘k’,0xC,‘w’,‘&’,‘O’,‘。’,‘@’,0x11,‘x’,0xD,‘Z’,‘;’,‘U’,0x11,‘p’,0x19,‘F’,0x1F,‘v’,‘“’,‘M’,‘#’,‘D’,0xE,‘g’,6,‘h’,0xF,‘G’,‘2’,‘O’]

flag = ‘f’#第一個字元不用進行異或運算

for i in range(1,len(s)):

if(isinstance(s[i],int)):#將數字轉化為字元

s[i] = chr(s[i])

for i in range(1,len(s)):

flag += chr(ord(s[i]) ^ ord(s[i-1]))#a^b=c 等於 a^c=b

print(flag)

寫一個Python指令碼(異或的異或還是異或)

BUUCTF學習記錄-Reverse(六)xor

跑結果

得到結果flag

題感

這道題是一道比較簡單的revers題目,我們所需要的東西有下:

1。IDA工具使用經驗

2。逆向思路

3。C語言基礎

4。ASCII編碼表

5。系統常識

6。能認識一些組合語言

7。異或

寫到後面

大家可以關注一下我們的公眾號,如果覺得這個文章有用的話,可以推薦給你的朋友或者轉發到朋友圈分享一下。你的分享、你的點贊、你的每一次瀏覽,都將是我持續更新的動力。非常感謝看到文章的每一個人!

另外,CTF團隊也在持續招人,如果有意向的可以與我聯絡,公眾號內直接透過選單獲取資訊即可!

TAG: V6flag異或xorV3