“CrackMe”是很多逆向論壇裡十分流行的玩法。
一些人爲了測試自己的件保護技,就會製作一些CrackMe程序,讓別人來嘗試破解。
網上也經常會有一些CM(CrackMe)競賽。
據設計者的意圖和加技水平,不同的CrackMe,破解難度天差地遠。
江寒點擊了一下下載鏈接,題目給出的CrackMe,很快就下載了下來。
然後,先將其運行了起來,觀察一下程序的外在表現。
這是個Windows PE文件,界面十分樸素,只提供了兩個輸框。
一個用來輸UserName(用戶名),另一個用來輸SN(serial number,序列號),下面還有個【Login】按鈕,用來檢測UserName和SN是否匹配。
看完了這些容,對程序的結構心裡有數之後,江寒就將窗口關掉了。
隨後,他就打開了著名的調試工OllyICE,並在調試中加載了這個CrackMe。
開始調試之前,先設置個斷點。
斷點是調試的一種功能,可以讓程序中斷在需要的地方,以方便分析。
常用的斷點有INT3斷點、件斷點、存斷點、消息斷點、條件斷點等。
例如LBUTTON_UP,就是很常用的消息斷點,功能是當鼠標左鍵擡起時,中斷程序運行。
又如GetDlgItemText斷點,當程序試圖調用Windows的對應API,獲取輸框裡的文本容時,就會被攔下。
江寒先試著設置了GetDlgItemText和GetDlgItemTextA斷點,然後按了下F9,讓程序跑了起來。
CrackMe的窗口出現後,先隨便輸一組UserName和SN,然後用鼠標點擊了一下【Login】按鈕。
結果……
程序直接彈出了一個MsgBOX(消息框),提示【用戶名和序列號不匹配】。
很憾,在這次嘗試中,斷點並沒有發揮作用。
這說明在這個CrackMe裡,並沒有使用GetDlgItemText或者GetDlgItemTextA來讀取字符串。
否則的話,就會被調試攔截下來,而不會執行關鍵Call了。
所謂關鍵Call,是指程序中用來計算用戶名和序列號的函數,通常執行完關鍵Call,很快就能找到一個條件跳轉語句。
如果序列號與用戶名匹配,就會繼續往下執行,否則就彈出出錯提示……
接下來,江寒又試了一下LBUTTON_UP斷點。
這次終於功斷了下來。
接下來就很簡單了,替使用F7(步)、F8(步過)兩個快捷鍵,單步跟蹤即可。
這個程序是那種很老實的程序。
意思就是沒有什麼七八糟迷人的東西,也沒有刻意增加難度,爲難挑戰者。
以江寒的調試功力,跟蹤這麼老實的程序,自然是易如反掌。
他只花了3分鐘,就找到了關鍵Call。
隨後,將這個Call語句,設爲斷點,然後Ctrl+F2,重新運行。
再次填寫序列號、用戶名,點【Login】……
很快,程序中斷在了關鍵Call上。
江寒按了一下F7,進了函數部,這樣就看到了一段以Ret結尾的反彙編代碼。
這段代碼的功能,就是據UserName計算SN(序列號)。
到了這裡,就比較考驗基本功了,必須讀懂反彙編指令。
當然,這對於訓練有素的人來說,也是So easy的一件事。
江寒花了十分鐘,將算法分析了出來。
看得出來,設計者的確沒有故意難爲人,算法設計得十分簡明。
首先,把UserName進行BASE64變換,然後對新串中的字符,做ASCII碼值累加作,再經過一番算不上十分複雜的數學運算後,就得到了一個新的字符串。
此字符串就是與UserName對應的SN,其允許包含大小寫字母和數字,以及一些特殊字符,算法保證其與UserName對應的唯一……
這道題可以說是白給,只要稍微懂點逆向調試,基本功別太差,一般都能輕鬆搞定。
江寒估計,方第一關弄得這麼簡單,可能只是打算過濾一下參賽者,將那些沒事兒來湊熱鬧的人排除掉。
接下來是第二題。
仍然是CrackMe,但和第一題比起來,難度就突然提高了十倍不止。
什麼花指令、虛擬機、靜態反彙編、態反調試……
凡是當前流行的保護手段,幾乎一應俱全。
而其核心算法,更是用了SHA1和Md5。
也就是主辦方還算有點良心,沒用出RSA2048這種大殺,否則大家比的就不是逆向水平,而是計算機的能了……
江寒足足用了二十分鐘,才計算出了正確的SN,通過了這一關。
隨後,他就一道題、一道題,連續挑戰了下去。
越往後,題目的難度越高,花費的時間自然也會稍微長一些。
不只有CrackMe,還有一些別的玩法,比如破解個虛擬賬號系統的碼之類的。
最有趣的是第5題。
目標數據在存中構了一個虛擬魔方,並據UserName隨機打。
要求構建一個字符串,用此字符串的二進制序列,作爲作指令,讓這個魔方復原。
令人髮指的是,這個魔方不但高達11階,還有隨機生的“塊壞”!
壞塊的意思是,你看不到它的“”,但如果不能放在正確的位置,就不能通過最後的檢測……
江寒還得額外寫個魔方通解程序,將這個虛擬魔方轉放進去,用窮舉法求解出復原過程,然後才能據要求,構造出對應的字符串……
就這樣,直到下午3點,江寒才終於解決掉了前6道題,來到了最終關門前。
獎金也順利地到手了1.5萬元。
爲什麼是1.5萬?
第四題做完之後,江寒才發現,原來那道題的獎金,只有前1000位破解者,才能認領……
好在後面的題目越來越難,過關的人也越來越,纔沒被其他人把獎金全都搶走。
最終關。
江寒滿懷期待地點了進去。
題目是一個單片機ROM,要求破解其加機制,去掉防複製模塊,並提Dump出來的無加ROM。
江寒按照要求,下載了目標ROM。
然後祭出調試工,加載進來一看……
江寒頓時就傻眼了。
我了個去,這不就是自己的壞蘋果嗎?
KAGGLE也算世界知名平臺了,居然用壞蘋果作爲軸。
怪不得獎金那麼高呢,主辦方沒準本就沒打算掏這筆錢。
不過,千不該、萬不該,你們不該一聲不吭地,就用了咱的壞蘋果。
更不應該的,居然還邀請了我這個“發明人”,參加了這次的錦標賽!
江寒笑了兩聲,然後果斷從盤中,翻出了一個文件,上傳到了答題區。
不是別的,正是壞蘋果的原始ROM文件!
這是他能想到的,最簡單的拿到500萬的方法。
想到KAGGLE裡負責這個比賽的人,看到了這個文件之後,種種可能的彩表……
江寒忍不住嘿嘿一笑。
接下來,就要看KAGGLE方,到底舍不捨得那500萬了……
覺已經有點了,江寒他就關掉了電腦。
打算先去做個飯,解決一下溫飽問題,然後,又飽又暖的時候……
然而,江寒剛走到廚房門口,就忽然頓住了形。
有點不對!
今天又是在“HackMe”裡闖關,又是玩CrackMe,大腦持續高強度運轉了整整一天。
可是,居然一點疲倦的覺都沒有?!
按照以往的經驗,像是這種用腦強度,不吃個十條、八條冰島紅極參,只怕很長時間都緩不過來。
然而,今天的狀態卻好得有點出奇。
這到底是怎麼回事?
難道……小媳婦不但能幫咱充靈,還能給咱的大腦充能?
這有點不太科學吧?
類似那種喜聞樂見的活,不增加能量消耗就不錯了……
江寒思索了一下,忽然心中一,連忙打開了系統UI。
看著龍飛舞的【學者】二字,以及隨其後的一串小星星,如同呼吸燈一般,一閃一閃……
江寒不若有所悟。
未來時代,世界已經從開始的科技轉變成修煉,此時諸多神話已經斷絕,天地間出現各種神像,而呼喊出神像的真名便可獲得其傳承,擁有強大力量,敘說其曾經的光輝事跡,便可以獲得更多的力量。穿越來的蘇御赫然發現自己知曉無數神名,并且有著九個絕色天香的師姐,每一個都把他寵上天。眾人所說的神獸猿猴,蘇御一看,那不是齊天大圣孫悟空嗎?被人嘲笑滿頭是大包的神像,蘇御一看,那不是西天如來嗎?
天要壓我,我便逆天!命要壓我,我便改命!人若犯我,一劍誅之!莫欺我少年,待得他日歸,我必要這諸天萬界,滿天神魔,都侍我為尊!——吾為,神尊!…
蕭逸楓轉世重生,妻子乃是大乘期大佬! 這位仙子,我真是你夫君,你相信我! 什麼,你要證據? 我知道你的胸口處有一朵藍蓮,你大腿根處有一紅色胎記。 別,有話好好說,別動手! 關於怎麼證明我妻子是我妻子這件事。