BUUCTF 刮開有獎 WriteUp

2022-06-21 21:12:10 字數 3587 閱讀 8727

用ida開啟,按f5反編譯,雙擊進入dialogfunc函式。

**如下:

1 bool __stdcall dialogfunc(hwnd hdlg, uint a2, wparam a3, lparam a4)

2 69 }

70return 0;

71 }

72if ( (_word)a3 != 1 && (_word)a3 != 2 )

73return 0;

74 enddialog(hdlg, (unsigned __int16)a3);

75return 1;

76 }

35行讀取輸入,36行說明flag長度為8。進入49行的sub_4010f0函式,並修改為可以執行的c語言格式。**如下:
1 #include2 using namespace std;

3int __cdecl sub_4010f0(char *a1, int a2, int a3) // int a1

4 32

if ( i >= result )

33break;

34 v5 = i; //v5 = 4 * i 這一行為什麼要改?求大佬指教

35 a1[result] = a1[i]; // *(_dword *)(a1 + 4 * result) = *(_dword *)(4 * i + a1)

36 }

37 --result;

38 }

39while ( i < result );

40 }

41 label_13:

42 a1[result] = v6; //*(_dword *)(a1 + 4 * result) = v6

43 sub_4010f0(a1, a2, i - 1);

44 result = a3;

45 ++i;

46 }

47return result;

48 }

4950

char str[20] = ;

5152

int main()

53 這裡50行我們定義的字串見dialogfunc函式中第38到48行。執行結果:

我們再回到dialogfuc函式。

通過觀察變數v7到v25定義時的位址(或者雙擊變數名),我們知道它們在位址中是相鄰的,實際上如下圖:

那麼可以理解,dialogfunc函式中第51~54行,是把經過sub_4010f0處理後的字串的倒數第3~倒數第1位賦給v4,而第56~59行,是將倒數第6~倒數第4位賦給v5。

接下來我們研究sub_401000函式。**如下:

1 _byte *__cdecl sub_401000(int a1, int a2)

2 49

while ( v10 < 3 );

50 v11 = v9 << 8 * (3 - v10);

51 v12 = 0;

52 v17 = v3;

53 v13 = 18;

54do

55

61else

62

65 *v8++ = byte_407830[*((char *)&v18 + v12)];

66 v13 -= 6;

67 ++v12;

68 v16 = v8;

69 }

70while ( v13 > -6 );

71 v3 = v17;

72if ( v17 >= a2 )

73break;

74 v7 = a2;

75 }

76 v6 = v15;

77 }

78 result = v6;

79 *v8 = 0;

80return result;

81 }

進入第65行的byte_407830

懷疑sub_401000是base64加密。

再回到dialogfuc函式,研究flag的格式:

if ( string == v7 + 34                    // 第一位等於經過sub_4010f0處理後的字串的第一位('3')51+34=85('u')

&& v19 == v11 // 第二位等於v11,即經過sub_4010f00處理後的字串的第5位'j'

&& 4 * v20 - 141 == 3 * v9 // 經過計算,第三位等於(3 * 69('e') + 141) / 4 = 87('w')

&& v21 / 4 == 2 * (v14 / 9) // 第四位等於2 * ( 90('z') / 9 ) * 4 = 80('p')

&& !strcmp(v4, "ak1w") // 第

六、七、八位經過base64加密後等於'ak1w'

&& !strcmp( // 第

三、四、五位經過base64加密後等於'v1ax'

v5,"v1ax") )

將』ak1w』、』v1ax』進行base64解密,再連上前兩位拼接起來,加上flag{}格式,即可得到flag:

flag

buuctf--刮開有獎

open live writer 安裝

open live writer 安裝 markdown 外掛程式

部落格高亮**及使用openlivewriter修改之前部落格

一開始用openlivewriter插入markdown**總是報錯

解決辦法是取消勾選語言。

buuctf 刮開有獎 wp

是個exe檔案首先開啟看一下,只有乙個帶有刮開有獎的訊息框,沒有什麼線索然後老套路拉進exeinfo pe檢視是32位的檔案 粗略的看一下我們可以知道我們要找的flag應該是string,長度為8 memset string,0,0xffffu getdlgitemtexta hdlg,1000 s...

BUUCTF REVERSE 刮開有獎

附件 步驟 例行檢查,無殼,32位程式 32位ida載入,shift f12檢索程式裡的字串,看到了乙個base64加密的特徵字串,猜想這題用到了base64加密 if a2 272 return 1 if a2 273 return 0 if word a3 1001 a3 1001 return...

BUUCTF RE 刮開有獎!!!!

這題一開始我以為是動調修改彈出框,我以為dialogbox刪掉之後會顯示出其他被擋住的彈窗 所以才說刮開有獎啊!結果把dialogbox搞掉之後仍然沒有彈出,甚至我都跳轉不到messagebox的地方。嗚 思路失敗,潤去看別人題解,發現居然是ida逆向qaq 一開始看見ida那麼多函式而且沒有mai...