閑來無事,搞搞逆向工程分析一下三國群英2,今天的目標是去掉光盤提示,并讓游戲正常進行。因為我玩的是原版,所以每當直接運行sango2.exe會彈出如下對話框:


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

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

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

發(fā)現(xiàn)這個函數(shù)的入口在40B00A,我們在此設(shè)置斷點開始單步調(diào)試,會發(fā)現(xiàn)在調(diào)用4300F0出現(xiàn)對話框,跟蹤進去。

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

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