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


2011年7月23日 星期六

HIT2011-Binary 3 -我的分析_IDA暴力破解

這題其實破的有點技術犯規,因為前提是如果沒原檔對照就沒轍拉~


方法如下:


1.Orange.exe 是個大家都玩過的訓練集中力的小遊戲


   PEid載入


   


    會發現是個未知的殼,通常對付未知殼最簡單有效的方式就是F8跟蹤法(F8一步步往下,遇到往上的跳轉就在下一行F4繼續跟蹤)


    這樣稍微跟了一會,會看到這個跳轉


    Wargame


這樣就到OEP囉


Wargame 


直接Dump,沒StolenCode 也沒附加資料需要修正,可以直接執行。  


2.接下來的方法 聰明的孩子千萬別學XD  


   就是Google先去把原版的特訓99這個小遊戲抓下來


   然後 "開2個IDA 放左右2邊",使用人肉尋找每個Function的不同點


   很幸運的,在Function_403746 最下面會找到這麼一段Code


   3.bmp


這裡就是關鍵囉,可以看到是經過Xor 77777777去解碼的


接下來開OD實際動態跟一遍,


4.bmp  


使用改暫存器爆破法一路暴下去


5.bmp


跳向驗證後,會看到解碼關鍵是11111111 * 7 後 再做xor運算


6.bmp


Key存放在408494  可以DD 408494  F8慢慢跟,就會看到Key解出來了


 


Ps:這題出題者的本意是想在KeyDownEvent下條件斷點


然後Trace追蹤的,這麼暴力的解法出題者大概也沒想到吧XD


不過這也證明自己還不夠強,再利用1年時間精進  Hit2012再戰一回


 


2011年7月4日 星期一

[原創].NET的逆向之旅-某Blog軟體分析

前言:


今天遇到個.NET的程式,以前一直都沒碰到過,今天遇上了就來對他做個分析吧!


PEiD查一下


.NET Creak    


 


當然最簡單的動作是 OD  載入.....  居然完全沒辦法反編譯,這下可尷尬了


原來.NET這麼Special,網路上找了找,有專門對.NET反編譯的工具


這裡我用到了Reflector,把檔案載入後,左邊會出現層次分別的樹狀圖


真的是很爽,原始碼全反編譯出來了,用力翻出關鍵的地方 'Registration" -->按鈕事件


.NET Creak  


簡易的看一下流程,是透過封包驗證,最後取返回結果True / False來判斷


稍微想了一下,既然我們得不到正確的帳號,那就只要把


if(str.Contains("true")) 這裡  改成if(str.Contains("false"))


這樣就爆破成功了,但要怎麼改哩.....!?  這又是個問題


再度GOOGLE了一下,發現利用個Reflector的插件就能實現了


插件名稱是:Reflexi 目前出到V1.2版


這插件果然強大,可以直接對Source進行Patch


按照剛剛想到的方法 把 true -->  false 就爆破成功了


.NET Creak


   最後另存新檔,執行下


.NET Creak  


又一次痛快的爆破


 


後記:因為這軟體我自己都還想免費使用,所以就不公佈名稱了


         不過以上的分析是確確實實的,沒想到.NET如果不加密、加殼


         還是這麼的不堪一擊.....


         從這次分析學到了如何對.NET的逆向還有工具的使用,繼續努力增加逆向實力


 


By Kost0911 2011.7.5 暑假第四篇


2011年7月3日 星期日

HIT2010_CrackMe 第一題-我的分析

前言:最近剛跟朋友拿到Hit2010的Wargame  裡面有CrackMe系列的原始檔


看了幾個發現非常的有趣,手癢就來分析一下,這是針對Window CrackMe系列的第一題


 


想玩的人請到這裡抓:http://cn.ziddu.com/download/604447/HIT2010-CreakMe_1.rar.html


題目要求:拿到Key


提示:在特定時間值,分數突破9000000分,就會出現Key


打開程式發現,居然是大多數人童年都有玩過的貓釣魚遊戲~估摸~~~~


HIT2010  


看到這張圖片是不是勾起些童年的回憶了呢!?


接下來就來對他進行分析,我第一個想到的是用CE,改變他的分數,直接刷上9百萬分


這裡給出2個用CE找出來的關鍵位置,因為沒有偏移,是通用的



0040F272  時間位置   
005315C0  分數位置


但改了後發現,Key並沒有如願的出現,因為提示還有一個特定的時間值...!?


接下來想到了用OD,先直接搜尋字符串,完全沒什麼關鍵的提示


但好像也沒甚麼關鍵的斷點可以下,就在苦思中靈光一閃!


"搜索常數",馬上興奮的把9百萬,轉換成16進制--->895440


OD搜索常數 895440 , 賓果!! 直接找到關鍵點了


這裡我OD裡面註釋的很詳細了,放張圖


HIT2010  


看到這行
0040CA65   cmp dword ptr ds:[5315C0],895440  
如果前面有用CE做功課,就知道這是分數與9百萬做比較


再看到這行


0040CA80   cmp dword ptr ds:[40F272],66      
就是時間與 "66" 做比較,換算成10進位也就是和 "102" 做比較  ,這時候回到CE,把時間值改成102鎖定


就可以開心的看到Key彈出來啦


 


流程寫成偽代碼大概就是







While(True)

{

if (分數 > 9000000)

{

if (解碼)

continue;

if (時間 == 102)

{

Xor解碼(Key)

MessageBoxA(Key);

}

}

}




筆記:前前後後分析用了快1小時...主要是突破點一直沒想到,開了OD在訊息循環那裏繞來繞去


         有時候靈光一閃的那種感覺真的很棒呢XD,也難怪一開始用字符串完全搜索不到


         因為真正的Key存放在40CB00,沒達成條件就不解碼,又學到了一手


         後面還有好多題Creakme,會找暑假搞定再慢慢寫詳解出來 也希望大家一起來玩看看囉


By Kost0911 2011.7.4 暑假第三篇