我的破解心得(9) (4千字)

看雪資料發表於2001-03-13

破解程式:
    深入地心(Game)

破解工具:
    SoftICE 3.0 For Windows 95
    W32Dasm 8.5

破解者:
    chcw

  在安裝完深入地心之後,執行其主程式Emb.exe,得到錯誤提示“你並未正確安裝本遊戲”。下
面我們將分析並解決該錯誤。

1. 用SoftICE載入EMB.EXE。
2. 因為在執行時會有一個錯誤提示,我們就對它設定斷點:
    BPX MESSAGEBOXA
3. 按Ctrl-D,程式開始執行,觸發SoftICE,光帶停留在MessageBoxA函式的入口處:

    USER32!MessageBoxA
        0137:BFF541BA  PUSH EBP
 
  將游標移到MessageBoxA函式的返回處
       
        0137:BFF541D    RET 0010   

  並鍵入命令HERE,程式執行到游標所在處。
4. 按F10,回到呼叫MessageBoxA函式的上層語句處:
    0137:00470B29    CALL USER32!MessageBoxA    
  從該語句處向上找,發現在:00470B0F有一處函式呼叫,其函式的返回值決定了是否顯示錯誤的
  提示。
    0137:00470B0F    CALL 00402F5E        <-函式呼叫
    0137:00470B14    ADD ESP, 00000004    
    0137:00470B17    TEST EAX, EAX        ;若EAX非零,則不顯示錯誤資訊。
    0137:00470B19    JNE 00470B36
5. 鍵入BC *,清除原先的斷點。再將滑鼠移到:00470B17    TEST EAX, EAX處雙擊,設定執行斷
  點。
6. 按Ctrl-D回到執行程式,此時程式顯示完錯誤資訊,並正常退出。在SoftICE中選擇Module/Load
  再次載入程式。
7. 程式開始執行後 ,SoftICE將被觸發,剛才設定的斷點被啟用了:
    0137:00470B17    TEST EAX, EAX        ;    <-啟用的斷點處
  鍵入r eax=1,將eax的值強行設定為1。然後鍵入X,繼續執行程式。此時程式不再顯示錯誤資訊,
  而是開始顯示主介面。但在選擇New Game後,程式繼續執行時會出錯並退出。看來,很可能函式
  00402F5E讀取了某些主程式執行時所必須的資料,我們需要進一步分析函式00402F5E
8. 用W32Dasm對執行程式EMB.EXE進行反彙編,並在Search/Find Text中輸入"call 00402F5E",查詢
  呼叫函式00402F5E的語句,亮條將停留在以下語句處:
    :00470B0F E84A24F9FF              call 00402F5E
  在工具欄上選擇"Call",文字呼叫(Text Call)該函式。亮條將停留在函式00402F5E的入口處:
    :00402F5E 55                      push ebp
9. 從:00402F5E處往下看,可以知道該函式的大致功能。函式的第一部分是呼叫wsprintfA()函式:
    wsprintfA(OneString, "Software\TGL\INSTALL\%s", AnotherString) ,
  形成一個型如"Software\TGL\INSTALL\AnotherString"的串OneString以備後用(OneString和
  AnotherString是引數,為敘述方便,這裡我們指定它們的名字):

    * Possible StringData Ref from Data Obj ->"Software\TGL\INSTALL\%s"
                |
    :00402F6B 6868304800              push 00483068
    :00402F70 8D8DFCFEFFFF            lea ecx, dword ptr [ebp+FFFFFEFC]
    :00402F76 51                      push ecx
                |
    * Reference To: USER32.wsprintfA, Ord:0264h
    :00402F77 FF1544865B00            Call dword ptr [005B8644]

 程式的第二部分是從登錄檔中開啟上述串OneString對應的鍵,並從中取出某一串值:

    :00402F95 6801000080              push 80000001

    * Reference To: ADVAPI32.RegOpenKeyExA, Ord:012Eh
                                  |
    :00402F9A FF15FC835B00            Call dword ptr [005B83FC]
                        ...
    * Possible StringData Ref from Data Obj ->"GameDirectory"
                                  |
    :00402FB9 6880304800              push 00483080
    :00402FBE 8B95F8FEFFFF            mov edx, dword ptr [ebp+FFFFFEF8]
    :00402FC4 52                      push edx

    * Reference To: ADVAPI32.RegQueryValueExA, Ord:0136h
                                  |
    :00402FC5 FF1500845B00            Call dword ptr [005B8400]
                        ...
 從串名"GameDirectory"我們可以猜到,該串中存放的串值是遊戲的目錄。查Win32 SDK可
 以知道這個鍵是在HKEY_CURRENT_USER下。
   根據上述分析,我們可以猜想到,在正版的遊戲正常安裝後,會生成主鍵
    HKEY_CURRENT_USER\Software\TGL\INSTALL\AnotherString
 並在該主鍵下生成一個串,該串的名字為"GameDirectory",值為遊戲檔案所在的目錄。我
 們只要在登錄檔中手工鍵入上述的主鍵和串,就應該能使程式正常啟動。
10.但是在串\Software\TGL\INSTALL\AnotherString中尚有子串AnotherString的值是未知的。
  在工具欄上選擇"Ret",返回到呼叫函式00402F5E的語句處:    
    :00470B0A 68849E4800              push 00489E84
    :00470B0F E84A24F9FF              call 00402F5E
 從壓棧的引數中我們可以獲取串AnotherString的地址為00489E84。
11.選擇HexData/Hex Display of Data Object/Segments,並找到00489E84處的資料:
    :00489E80 xx xx xx xx B2 60 A4 4A  RH...`.J
    :00489E88 A6 61 A4 DF 00 xx xx xx  .a......
  這些資料看起來好象是一些亂碼,仔細分析一下,就可以發現它們都是中文的內碼(BIG5),
    解讀後得到字串AnotherString="深入地心"。
12.現在我們可以修改登錄檔了。執行REGEDIT,開啟登錄檔,建立鍵
  HKEY_CURRENT_USER\Software\TGL\INSTALL\深入地心,(注意這裡必須用BIG5輸入),並
  在此主鍵中加入串GameDirectory=.\

附:修改登錄檔的檔案EMB.REG
------------------------ EMB.REG ----------------------------
REGEDIT4

//Regist Embrace(Add a key to the register table)
//Written By Mr. CHCW

[HKEY_CURRENT_USER\Software\TGL]

[HKEY_CURRENT_USER\Software\TGL\INSTALL]

[HKEY_CURRENT_USER\Software\TGL\INSTALL\`Jaみ]
"GameDirectory"=".\\"

--------------------- End of File EMB.REG -------------------

相關文章