close

前言:最近剛跟朋友拿到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 暑假第三篇

arrow
arrow
    全站熱搜

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