日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

使用SoftICE破解Winzip8.0全攻略

發布時間:2023/12/3 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 使用SoftICE破解Winzip8.0全攻略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要

Winzip是大家都很熟悉的壓縮解壓工具,裝機必備工具。Winzip是個免費的共享軟件,不注冊也一樣使用,只是會出現一個未注冊的畫面而已。它對注冊碼的保護并不復雜,破解這個軟件也是相對簡單的。

程序名 :Winzip

版本   :V8.0(3105)

大小   :1,230KB

運行平臺:Windows 95/98/NT/2000

保護方式:注冊碼

破解方式:制作注冊補丁?

1??????? 破解的準備工作

(1)??? 安裝好SoftICE,并進入Windows。通過CTRL+D來檢查SoftICE是否可用。

(2)??? 加載符號表,可以采用兩種方式:一是在當前情況下,使用Symbol Loader動態加載,另一種是修改Windows目錄下的Winice.dat文件,刪除usr32.dll前面的“exp=”。

2??????? 監測軟件的代碼

2.1????? 設置斷點

(1)?? Windows通過user32.dll庫的四個API函數來獲取用戶輸入文本,它們是GetWindowText,GetWindowTextA,GetDlgItemText,GetDlgItemTextA。

(2)?? 前面已經加載了user32.dll,可以使用exp getwindowtext來查看GetWindowText這個符號是否已經加載,其余仿此。如果沒有加載,請參考1.(2)加載。

(3)?? 為(1)所列的四個函數設置斷點,方法是bpx GetWindowText……

(4)?? 設置完四個斷點以后用bl命令確認一下。

(5)?? 使用bd *命令暫時禁用所有的斷點

2.2????? 中斷注冊過程

(1)??? 安裝運行Winzip,在主接口中選擇”Help”下面的” Enter Registration Code...”,輸入用戶名”FeiZhaoDong”,注冊碼”Bingo”。

(2)??? 按CTRL+D呼出SoftICE,使用be *命令啟用所有的斷點。

(3)??? 按F5回到WinZip注冊接口,按下”OK”按鈕,程序很快被中斷在”GetDlgItemTextA”的位置。按F11繼續,可以看到又中斷在”GetDlgItemTextA”一次。這樣我們可以猜測,Winzip是使用了GetDlgItemTextA這個函數來獲取用戶名和注冊碼。

(4)??? 使用bc命令清除掉GetDlgItemTextA以外的三個斷點。

(5)??? 重新輸入用戶名和注冊碼(同上),準備進行正式的拆解過程。

2.3????? 分析注冊碼的驗證過程

(1)??? 按下”OK”按鈕,程序停留在GetDlgItemTextA的入口,按F11跳出這個函數,這樣可以看到以下的匯編代碼:

?

0167:00407F6D CALL [USER32!GetDlgItemTextA]
0167:00407F73 PUSH EDI       ;程序停留在這里,EDI指向”FeiZhaoDoing”

0167:00407F74 CALL 0043F89A

0167:00407F79 PUSH EDI

0167:00407F7A CALL 0043F8C3

0167:00407F7F POP ECX

0167:00407F80 MOV ESI, 0048CDA4

0167:00407F85 POP ECX

0167:00407F86 PUSH 0B

0167:00407F88 PUSH ESI

0167:00407F89 PUSH 00000C81

0167:00407F8E PUSH EBX

0167:00407F8F CALL [USER32!GetDlgItemTextA]

0167:00407F95 PUSH ESI       ;ESI指向”Bingo”

?

按下F11之后程序停留在上面標志的語句,用d EDI命令可以看待,EDI中地址的內容是用戶名。按F10一步步走下來,不遠處是另一個GetDlgItemTextA,按F10跟進去,  然后按F11跳出來,可以用b ESI看到ESI指向注冊碼。

這樣我們已經證明了前面的判斷是正確的,Winzip是使用了GetDlgItemTextA這個函數來獲取用戶名和注冊碼。

?

(2)??? Winzip已經得到了它想要的用戶名和注冊碼,接下來應該是驗證過程了。按F10接著走,我們看到以下一段代碼:

?

0167:00407F96 CALL 0043F89A

0167:00407F9B PUSH ESI

0167:00407F9C CALL 0043F8C3

0167:00407FA1 CMP BYTE PTR [0048CD78],00   ;[0048CD78]指向“FeiZhaoDong”

0167:00407FA8 POP ECX

0167:00407FA9 POP ECX

0167:00407FAA JZ 00408005

0167:00407FAC CMP BYTE PTR [0048CDA4],00   ;[0048CDA4]指向“Bingo”

0167:00407FB3 JZ 00408005

0167:00407FB5 CALL 00407905

0167:00407FBA TEST EAX,EAX

0167:00407FC3 JZ 00408005

?

注意樣的兩部分代碼

0167:00407FA1 CMP BYTE PTR [0048CD78],00   ;[0048CD78]指向“FeiZhaoDong”

……

0167:00407FAA JZ 00408005

0167:00407FAC CMP BYTE PTR [0048CDA4],00   ;[0048CDA4]指向“Bingo”

……

0167:00407FB3 JZ 00408005

熟悉匯編語言的人都能很容易的看出這是在判斷字符串是否為空。Winzip在判斷出字符串為空以后跳轉到[00408005],那個地方估計就是彈出注冊失敗對話框的地方。再走下去,可以看到:

0167:00407FB5 CALL 00407905

0167:00407FBA TEST EAX,EAX

0167:00407FC3 JZ 00408005            ;注意這里的跳轉

  Winzip在調用了[00407905]以后,判斷EAX是否為0,如果是則跳轉到[00408005]。

  多幺熟悉的[00408005]!

  跟著走下去到了[00408005],按著F10很快注冊失敗的消息框就彈出來了。這樣證明了前面的判斷,[00408005]就是彈出注冊失敗對話框的地方。

?

(3)??? 程序看到這里已經沒有懸念了,[00407905]的調用就是判斷注冊碼是否正確的過程,如果正確,那幺返回EAX為非0值,否則返回0,注冊也就失敗了。

2.4????? 深入注冊碼計算過程

(1)??? 我們的目的是讓這個驗證注冊碼的過程永遠返回1這個代表正確的值,因此有必要進入到[00407905]里面去看看,按F10一步步走下去,同時監控ESI、ECX和EAX指向的內容,務必找到最后一次更改EAX值的地方!

(2)??? 看著看著有了意外的收獲:

0167:00407AA9 PUSH ESI    ? ;ESI指向輸入的注冊碼“Bingo”

0167:00407AAA PUSH EAX   ?? ;EAX指向正確的注冊碼“3E41159C”

……

0167:00407AD2 PUSH ESI     ;ESI指向輸入的注冊碼“Bingo”

0167:00407AD3 PUSH EAX     ;EAX指向正確的注冊碼“65293585”

?

其實到這里我們已經可以利用給出的正確注冊碼注冊成功了,不過目標還是沒有達到。

?

(3) 按F10走了好久好久(有多久?你試試好了^_^),終于看到了下面的代碼:

0167:00407B3A? MOV EAX ,[0048FDC]  ;最后一次更改EAX的值,這里是0

……

0167:00407B46? RET

 接著走下去,驗證過程就結束了,返回以后很快就彈出注冊失敗的消息框了。我們已經找到了最后一次更改EAX值的地方,接下去就是修改匯編代碼了。

?

2.5????? 小結

通過上面的跟蹤過程,我們可以看出:

(1)??????? Winzip對驗證過程的保護的確是很弱的,我們很容易就能找到驗證是否成功的標志;

(2)??????? 要注意調用API之后的第一個PUSH指令,這往往是重要的數據和標志;

(3)??????? 要注意判空代碼,其后面的跳轉往往是很重要的標志。

好了,下面讓我們去直接修改程序的二進制代碼吧。

3??????? 制作注冊補丁

3.1????? 修改內存中的代碼

(1)??? 先修改內存中的代碼試試,目的是讓驗證過程永遠返回1值。

(2)??? 0167:00407B3A? MOV EAX ,[0048FDC]這個代碼是關鍵,考慮到MOV這個指令有立即數賦值的功能,試著這樣改:

0167:00407B3A? MOV EAX ,1

(3)??? 讓程序停在[00407B3A],使用a命令,按上述方法修改代碼,然后按Esc退出修改模式。

(4)??? 用bd *禁用所有斷點。

(5)??? 按F5接著執行程序,哈哈,注冊成功的消息框彈出來了。選擇Retry再試一次,仍然可以注冊成功。

3.2????? 制作注冊補丁

(1)??? 最后,直接修改exe文件來制作注冊補丁。重復3.1的過程,當走到[00407B3A]的時候,不要直接修改,先看看這個指令的二進制代碼,使用d 407B3A命令,可以看到以下內容:

00407B3A: A1 DC 9F 48 00 83……

(2)??? 如3.1所述修改匯編代碼以后,再使用d 407B3A命令,可以看到以下內容:

  00407B3A: B8 01 00 00 00 83……

(3)??? 關閉Winzip,使用WinHEX打開Winzip32.exe文件,直接尋找十六進制串A1 DC 9F 48 00 83,找到以后修改為B8 01 00 00 00 83,關閉文件,OK!大功告成。儲存修改過的Winzip32.exe文件,這就是我們要的補丁。

4??????? 補丁效果

重新安裝Winzip,然后用補丁文件替換原來的Winzip32.exe文件,打開注冊接口,輸入用戶名”FeiZhaoDong”,注冊碼”Bingo”,然后按”OK”,注冊成功。重啟Winzip以后可以在”help”里面看到注冊信息。如附圖。

5??????? 結論

通過這次破解的過程,我熟悉了SoftICE的使用方法,作為一種優秀的調試工具,SoftICE必然在將來的工作中有廣泛的應用。另外,還了解了軟件注冊碼保護和破解補丁制作的基本原理。

中國好的的加密解秘網站是看雪學院,里有很多加密解秘的相關資料,部分不是免費的,可以參閱。直接在瀏覽器中輸入”看雪學苑”即可。

參考資料:

(1)??? 拆解教程,看雪學院

(2)??? SoftICE使用手冊?

?

(圖略)

?

費照東

總結

以上是生活随笔為你收集整理的使用SoftICE破解Winzip8.0全攻略的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。