close

這題真的是要靠提示才想到的解答

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註釋圖

Wargame   

知道解答後再重新看一次還真是簡單,但不知道爆破點可是想破了頭呢XD

繼續努力搞逆向~共勉之!   By kost0911 2011.7.25

arrow
arrow
    全站熱搜

    殘月影 發表在 痞客邦 留言(1) 人氣()