2011年7月24日 星期日

HIT2011_Binary 1 - 吃角子老虎-我的分析

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


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


1 則留言:

  1. 版大 可以請你幫我看一個cRACK mE 嗎 ?

    回覆刪除