閑來無事,搞搞逆向工程分析一下三國(guó)群英2,今天的目標(biāo)是去掉光盤提示,并讓游戲正常進(jìn)行。因?yàn)槲彝娴氖窃?,所以每?dāng)直接運(yùn)行sango2.exe會(huì)彈出如下對(duì)話框:


我使用的工具是大名鼎鼎的OllyDBG。
首先,打開OD,打開sango2.exe, 運(yùn)行程序,當(dāng)出現(xiàn)對(duì)話框時(shí)暫時(shí)程序,發(fā)現(xiàn)停在此處:

仔細(xì)看以下幾行代碼,可以看出在40B207處有一個(gè)判斷,如果EAX=0,則不顯示對(duì)話框,并跳轉(zhuǎn)到40B21F,那如果我們把B207的“JE SHORT 0040B21F”改為“JNE SHORT 0040B21F”,是否就可以不顯示對(duì)話框呢?經(jīng)測(cè)試,確實(shí)不顯示了,但是游戲也直接退出了,并沒有達(dá)到我們要的效果??磥磉@個(gè)地方只是出錯(cuò)后的程序處理,我們要找到更深的源頭,才能解決這個(gè)問題。

上斷點(diǎn)!我們要結(jié)合單步調(diào)試來理解程序的運(yùn)行邏輯才能發(fā)現(xiàn)真正的解決方案。
觀察對(duì)話框出現(xiàn)的時(shí)候,程序的堆棧如下:

發(fā)現(xiàn)這個(gè)函數(shù)的入口在40B00A,我們?cè)诖嗽O(shè)置斷點(diǎn)開始單步調(diào)試,會(huì)發(fā)現(xiàn)在調(diào)用4300F0出現(xiàn)對(duì)話框,跟蹤進(jìn)去。

用這樣的方法跟蹤進(jìn)去,保持耐心和清醒的頭腦,最終會(huì)發(fā)現(xiàn)4302C8會(huì)進(jìn)行錯(cuò)誤處理,導(dǎo)致對(duì)話框的出現(xiàn),只要跳過即可。我們修改4302C1的代碼為"JZ short 004302D1",即可跳過對(duì)話框,直接進(jìn)行游戲。

最后一步,出補(bǔ)丁。使用右鍵功能【copy to executable】,然后另存為可執(zhí)行文件就可以了。運(yùn)行修改過后的sango2.exe,就會(huì)發(fā)現(xiàn)已經(jīng)破解成功了。
