H******** 4.01.11的不完全破解 (4千字)

看雪資料發表於2001-04-14

軟體:H******** 4.01.11
保護方式:授權檔案保護,未註冊時每次啟動會有一個提示註冊的對話方塊
該版本的保護方式與以前版本的保護方式不同,由序列號方式改為授權檔案方式,註冊時要求輸入授權檔案的全部內容。這對小弟的破解工作倒沒有什麼影響,小弟偏愛暴力法破解(本人比較懶,懶得算註冊號),且喜歡裝入程式,從頭單步執行,直到彈出註冊對話方塊(當然加殼的程式除外)。

先把H*****.exe 拷到別的目錄,作為備份。
啟動trw2000,開啟C:\Program Files\H******** 4\H*****.exe,裝入,按F10。若按F10帶過一個call時,彈出提示註冊對話方塊,就關閉對話方塊,trw2000會自動彈出。實在不行的話,退出程式,trw2000也會自動彈出。用滑鼠選中剛才的call,按F9設斷點,g,程式會正常執行。關閉程式,重新裝入,全速執行,在剛才的斷點中斷。按F8進入call內,按F10重複剛才的過程,用不了幾次,就能找到關鍵部位。請看(本人用log2命令無法存檔,只好keyin了,哪位大哥知道log2的用法,不妨指點小弟一下):

42E279 8B837001000    mov eax,[ebx+170]; [ebx+170]=[4fdd30]=0
42e27f 85c0          test eax,eax
42e281 0f85d9000000  jnz near 42e360; (no jump)

這時如果敲入rfl z命令,g,哈哈,註冊對話方塊沒有出現。很明顯4fdd30這個全域性變數中放的就是註冊標誌,若為0,就是沒有註冊。現在,重新裝入程式,bc,下bpm 167:4fdd30 w,g。來到下面這一段:

436fcd e85ec9feff    call 423930
436fd2 83c404          add esp,4
436fd5 a330dd4f00    mov [4fdd30],eax; eax=0    

是誰讓我們的eax變成0的?一定是上面那個call了。bc,下bpx 42e279,g。退出hypersnap,從新裝入,g。
trw在436fcd中斷,按F8進入。廢話少說,來到下面這一段:

423a6c 33c0          xor eax,eax ;原來在這裡了。
423a6e 5b            pop ebx
423a6f 8b4df4
...
423a7c c3            ret

記下程式碼(建議大家多抄幾行,我的是e870f606005f5e33c0),啟動uedit,查詢e870f606005f5e33c0,找到後將33c0改為9090。存檔,試一下。

居然彈出一個對話方塊,說程式被損壞了,怎麼辦呢?有了,ctrl+m撥出trw,下bpm lockmytask,g。按ok按鈕,trw立即彈出。按幾次F12,回到H*****的領空,看看上一行是什麼?原來是call user32!messagebox。早知是這樣,下bpx messagebox不久完了嗎。現在怎麼辦呢?往上看看,有沒有比較語句,能跳過messagebox,若找不到,就ret到上一層call中,找一找能不能跳過這個call。我ret了三四次,找到下面這一段:

42de41 e89a5cffff call 423ae0
42de46 85c0      test eax,eax
42de48 751d      jnz 42de67;

把751d改為eb1d就行了,不再出程式被損壞的messagebox了,程式可以執行了,抓下的圖片中沒有公司標記了,行了嗎?不行,程式現在動不動就出現非法操作,然後只能退出。下面是win98的提示資訊。

H***** 在 00de:f5fa0f3d 的模組
<未知> 中導致無效頁錯誤。
Registers:
EAX=0073fad4 CS=0167 EIP=f5fa0f3d EFLGS=00010246
EBX=0073fad4 SS=016f ESP=00640004 EBP=00640024
ECX=006400a8 DS=016f ESI=8174cedc FS=229f
EDX=bff768d5 ES=016f EDI=006400d0 GS=0000
Bytes at CS:EIP:

Stack dump:
bff768c9 006400d0 0073fad4 006400ec 006400a8 006401dc bff768d5 0073fad4 006400b8 bff882eb 006400d0 0073fad4 006400ec 006400a8 f5fa0f3d 00640294

我比較了一下,每次退出時的ip,暫存器都是一樣的,於是有了一個辦法。裝入程式,下bp if (eax==73fad4),因為每次出錯時的eax都是73fad4。g。程式啟動了,畫面出來了,似乎一切正常。動一動滑鼠,沒動幾下,出來一個藍色畫面,trw說它不能中斷。上帝啊,連trw都不能中斷,我要絕望了。

還有一招,記憶體補丁。希望你備份的H*****.exe還在,把它考回來。我用的補丁是ppatcher 3.93,這可是ppatcher的作者thewd親自email給我的。thewd挺負責任的,有信必回,你要是能對ppatcher提出什麼意見或建議,他還會發給你一個最新版的ppatcher。扯遠了。ppatcher.ppc的內容如下:

#Process Patcher Configuration File
Version=3.93

PatchAuthor=thewd
PatchContactInformation=thewd@hotmail.com

DisplayName=h*****.exe v4.01.11
Filename=h*****.exe
Filesize=1056768
Address=0x42de48:0x75:0xeB
Address=0x4337e6:0x75:0xeB
Address=0x4387e5:0x75:0xeB
Address=0x42e281:0x0f:0xe9
Address=0x42e282:0x85:0xda
Address=0x42e283:0xd9:0x00
Address=0x42e284:0x00:0x00
Address=0x42e285:0x00:0x00
Address=0x42e286:0x00:0x90
#End of Configuration File

這回行了吧。ppatcher.ppc所修改的地址跟我剛才說的不太一樣,因為光修改423a6c處的xor eax,eax,還有一點問題。按選單中的關於和註冊兩項時,還會出現非法操作。修改也很簡單,只要下bpm 4fdd30,就很容易找到比較點了。

羅裡羅唆說了半天,總結一下。
1. 4fdd30 是一個全域性變數,存放的是註冊標誌,跟註冊有關的判斷都以它為依據。
2. 程式有自校驗功能,但在42de48處可以跳過。
3. 程式還有暗樁,修改之後動不動就非法操作。本人功力不夠找不到,只好用記憶體補丁。比較遺憾。請高手們賜教。

注:H*** 3.53 和 3.63.01 的自校驗方式與 4.01.11不同,修改檔案後,再執行會提示有個檔案找不到,而且用trw2000也無法裝入。頗為奇怪。那位有興趣共同研究一下。3.63.01避註冊框的比較點是45ae8b。

相關文章