這題真的是要靠提示才想到的解答
Lucky Seven就是個關鍵提示
分析一下詳細的流程,一開始拿到的SlotMachine.exe是一個Load類型的檔案
執行後會讀取{EEEE25A2-84EC-4817-8238-5B47CFFAF094}這個怪字串
再利用演算法產生FakeKey,
然後偷偷的在C:\Documents and Settings\目前使用者\Local Settings\Temp資料夾底下
釋放出一個SlotMachineDrop.exe的檔案-->(可透過OD斷CreateFileW來觀察)
再透過ReadFile & WriteFile 把計算出來的FakeKey寫入剛剛釋放出來的SlotMachineDrop.exe
最後透過CreateProcess函數執行這個SlotMachineDrop.exe
詳細的流程Code如下↓
int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nShowCmd)
{
int FakeKey;
unsigned int NowTime;
int Random_Number;
FakeKey = Create_FakeKey();
NowTime = _time64(0); //利用時間取得亂數(才不會重複)
srand(NowTime);
Random_Number = rand();
Read_WriteFile_To_CreateFakeKeyFile(Random_Number % 6, FakeKey);// 這裡是關鍵,因為是 亂數%6
也就是只有 0 1 2 3 4 5 總共6組FakeKey
// 破解點就是把傳進去的參數改成 "6" 也就是Lucky的第七組Key 就是破關Key了
Exec_FakeKeyFile();
return 0;
}
接下來用OD動態跟蹤 記憶體位置 00401000就是 上面貼的wWinMain函數地址
下面貼張完整的OD註釋圖
知道解答後再重新看一次還真是簡單,但不知道爆破點可是想破了頭呢XD
繼續努力搞逆向~共勉之! By kost0911 2011.7.25