用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)進入第65行的byte_4078302 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 }
懷疑sub_401000是base64加密。
再回到dialogfuc函式,研究flag的格式:
if ( string == v7 + 34 // 第一位等於經過sub_4010f0處理後的字串的第一位('3')51+34=85('u')將』ak1w』、』v1ax』進行base64解密,再連上前兩位拼接起來,加上flag{}格式,即可得到flag:&& 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") )
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...