什麼都別說,上來就是直接ida(如果函數不對就是有殼)
很快樂,沒有殼
直接在winMain上F5, DialogBoxParamA(hInstance, (LPCSTR)0x67, 0, DialogFunc, 0);
衆所周知,對話框的處理函數是自己傳進去的也就是 DialogFunc
點進去
找到了{
MessageBoxA(hDlg, "U g3t 1T!", "@_@", 0);
}
大概這裏就是獲得了正確的flag
然後上面一個好長的if
獲得v5 == VlAx
v4 == ak1w
v21 /4 == 2*(v14/9)
4*v20 -141 == 3*v9
v19 == v11
string == v7+34
所以flag應該是string開始到v25
CHAR String; // [esp+34h] [ebp-20004h]
char v19; // [esp+35h] [ebp-20003h]
char v20; // [esp+36h] [ebp-20002h]
char v21; // [esp+37h] [ebp-20001h]
char v22; // [esp+38h] [ebp-20000h]
char v23; // [esp+39h] [ebp-1FFFFh]
char v24; // [esp+3Ah] [ebp-1FFFEh]
char v25; // [esp+3Bh] [ebp-1FFFDh]
char v26; // [esp+10034h] [ebp-10004h]
char v27; // [esp+10035h] [ebp-10003h]
char v28; // [esp+10036h] [ebp-10002h]
明顯26,27,28不是
然後再往上看v5 = sub_401000((int)&v26, strlen(&v26));
跟進去有個v2=a2/3 if(a2%3>0) ++v2 特別像base64(不知道的話自己百度,base64就是把3*8變成 4*(2+6))
然後直接base64解碼
v27 = v21;
v26 = v20;
v28 = v22;
然後獲得了v20,21,22
同理獲得23,24,25
再往上sub_4010F0((int)&v7, 0, 10);
也就是把v7到v17字符串處理一下
直接把這個函數放在編譯器裏執行,得到新的字符串
3 C E H J N
v7 v8 v9 v10 v11 v12
S Z a g n
v13 v14 v15 v16 v17
可以求出string(v18) 到v21
v20和v21大概是讓你驗算的
從而得到答案UJWP1jMp