[Wargame][IDA][CE][OD][ASM]交大Wargame01,手拆題解(上集)

首先這次這次的主角
至於為啥我要拆這個呢...因為有人不會解...正好問我T^T
這種類型的wargame我一直都不怎麼會解XD 就當作練習看看了

下載題目(點我點我)


那麼首先題目要求是這樣的,希望輸入一組Name跟對應的序列(要求必須都是數字的序列),如果這組序列跟Name有對應關係就會跳出破解成功,反之就跳出“Try Again!“
如上圖所示

那這個問題現在其實很明顯了,那我們該怎麼解呢...
首先,我的想法是先找出內存中的”Try Again!“的內存指針,找出誰引用它
那麼很快的開啟OllyICE的文字搜索引擎翻了一下就可以看到很敏感的三個文字在這
逆著DEBUG追回去可以看到:
看到這裡,找到了0x458800就是主要核心的文字判斷點了
針對你的序列跟名字作演算後對應判斷正不正確的核心點
所以我的直覺就是...阿不就把Try Again的邏輯跳掉就好了嗎(?)
一個正常的破解者都會想到的做法XDDDDD
淺顯易懂 直接Nop掉不就好了嗎~~關鍵點爆破 (Y)
不過很快地把答案交給問我的人 就被打槍惹

他說題目是:Name為HelloWorld時的Serial為多少?
踏馬德聽到這個就頭痛啊...( ゚д゚)
吃了顆普拿疼後把程式拖進IDA
這邊可以看一下這個核心判斷點在幹嘛...
可以專注在 sub_407774(v10, v4) == dword_45B844這個,這邊是核心判斷序列到底正確不正確的位置,dword_45B844這個應該是前面做HASH時的存放點,拿來跟sub_407774()結果做比對,正確才會彈出破解成功

可以翻一下sub_407774在幹麻
再往內翻一層可以翻到sub_4037E8內,它對v11做什麼
它對傳入的文字每個數值做單一的xor運算(對v3)然後再把最後HASH結果去跟dword_45B844比對

你會發現TMD繞這麼一大圈其實它也在對序列做數值的xor一次做檢查而已
所以其實 sub_407774(v10, v4) == dword_45B844就不過是在比對使用者傳入的文字HASH後結果(sub_407774)跟該名字(HelloWorld)做HASH後的正確解答(dword_45B844)如果一樣就返回破解成功

所以我們可以把名字輸入HelloWorld然後用Cheat Engine抓一下
內存中dword_45B844的值是多少
( ゚д゚)...TMD原來答案是32960啊....
最後,結果是這樣:
沒有做任何的inline hook或者patch,驗證後答案為32960
(´Д` )會出這種噁心題目的老師肯定心理對世界有什麼陰影啊......

後記:
我前面其實根本沒想到那個位置直接就存答案了...我想說應該沒那麼好心吧(?)這樣題目會不會太簡單,結果帶進去答案就出來了....直覺就直接拿那個值來測了,算是直覺吧(?)
不過這種題目有沒有更好的解法,麻煩各位大大再提供出來分享了m(_ _)m

此篇有下集囉,想知道怎麼找出這題CrackMe的序列演算法?
[Wargame][IDA][Python][ASM][CE]交大Wargame01,用Python寫出序號機演算法(下集)

留言

這個網誌中的熱門文章

[C#] Lambda花式應用噁爛寫法(跨UI委派秒幹、多線程處理...etc)

[Windows] 逆向工程 C++ 中入口函數參數 main(argc, argv) 與如何正確的進行參數劫持

重建天堂之門:從 32 位元地獄一路打回天堂聖地(上)深度逆向工程 WOW64 設計