Posted on 2012-05-31 21:53
小明 閱讀(2317)
評論(2) 編輯 收藏 引用 所屬分類:
C/C++ 、
Debug
閑來無事,搞搞逆向工程分析一下三國群英2,今天的目標是去掉光盤提示,并讓游戲正常進行。因為我玩的是原版,所以每當直接運行sango2.exe會彈出如下對話框:


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

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

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

發現這個函數的入口在40B00A,我們在此設置斷點開始單步調試,會發現在調用4300F0出現對話框,跟蹤進去。

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

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