Hint:
暫無HINT
題目描述:
Do you know SendMessage ?
Writeup:
在IDA字符串窗口中找到字符串“The password is:”,於是根據交叉參考找到了相關函數。
OD同時定位到該函數,單步調試,發現有兩個SendMessageA函數,兩個函數的參數形式相同,第一個Message爲WM_GETTEXT,將獲取到的name存入棧中。第二個Message未知,但由於兩個SendMessageA函數的參數形式相同,猜測第二個Message同爲WM_GETTEXT,且將獲取的key存入棧中。
可以看到eax-200E4h爲Message類型參數,WM_GETTEXT爲0Dh,所以eax爲200E4h+0Dh=131313D,eax爲StrToIntA函數的返回值,因此輸入的name應爲“131313”。
後面有個GetProcAddress函數,該函數的第二個參數(庫函數名稱)爲輸入的key與程序中的一個固定字符串異或而得
返回值存入ebp+arg_8。在後面有個打印password的函數,但是在調用的時候並不是call MessageBoxA,而是call [ebp+arg_8],因此猜測GetProcAddress函數獲取的是MessageBoxA函數的地址,因此GetProcAddress函數的第二個參數爲“MessageBoxA”,因而key = MessageBoxA xor 固定字符串。
後面還有最終password的計算方法,但是到這裏有了name和key就已經可以讓程序自動彈出password了。