除蟲:要麼就「回水」,要麼就給我動起來!

Wednesday, August 6th, 2008

最近遇到有一款遊戲,其簡體中文版比英文版賣得平得多,但是只能在簡體中文Windows下跑,用意大概是只讓大陸的用戶才能用這個平價版吧。天呀,誰說大陸用戶必然是用簡體中文的Windows?

坊間的確有流傳著一些破解和後門,但有些好的方法在Vista下不能用,有的就只能破一部分等等……為了通過較正當的手段(而不是用綠色版)而玩到這個遊戲,並在好奇心驅使下,就DIY了一把。

先前基本上從未用過Visual Studio以外的Debugger。一般有source code,只是debug一下Managed Code或C++的情況下,VS都能應付有餘。但看來今次「劫數難逃」,還是要認真的學會用WinDbg。

觀察現有的破解方法,以及在Error Message set breakpoint等手段,基本上鎖定遊戲是透過GetSystemDefaultUILanguage等API拿得相關系統安裝語言,還有0×0804 (簡中的Lang ID)是關鍵字之一。在反匯編碼搜一下,就找到相關的流程控制代碼。

本來還打算用DLL Injection/Hooking的方法,讓程式要Call GetSystemDefaultUILanguage的時候,不是Call System的而是Call我創建的替代Function。這方法用於簡單的測試程式上的確無問題,但因種種知名和不知名原因都未能成功應用在該遊戲上。

另一個我在測試用的方法是,在GetSystemDefaultUILanguage set Breakpoint,在返回的時候把返回值改成我想要的。

想起安裝WinDbg它有問我要不要裝SDK,就想起不如用SDK把這個手工方法自動化。一查Document之下發現除了有個SDK Dll之外,原來還提供了一個Managed Wrapper Dll。研究了一會,真的這很容易通個這個API做了一個Debugger程序出來。

經過幾翻修改後,最終成功騙過遊戲我是用簡體中文Windows,而且不需要修改任何程式檔案。

真想不到第一次認真用WinDbg竟然是因為這樣的緣故。話說回來,這個可惡的遊戲叫《魔獸爭霸3:冰封王座》。

2 Responses to “除蟲:要麼就「回水」,要麼就給我動起來!”

  1. 1
    circle Says:

    wow
    :O

  2. 2
    leen Says:

    这个伟大的软件已经让至少2台机器免除重装操作系统
    :D

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe without commenting