国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

不脫殼直接破解軟件的方法
2007-02-11   賽迪網安全社區

要實現帶殼軟件直接打補丁,需要一些技巧和運氣,雖然這看起來是很不容易實現的,其實并不象大家想的那么難,下面聽我慢慢道來。

要實現這種帶殼補丁的目的,當然你需要作充分的前提條件:

過硬的軟件跟蹤與分析能力,因為你沒有軟件作者的源碼,一切都要靠自己動手;

簡單代碼編寫能力,當然是匯編代碼,可以借調試軟件幫忙;

必備工具:PEiD、OllyDbg、W32DasM、文本編輯器(WinHex或UltraEdit或其它)、文件增肥工具(如:ZeroAdd)等;

任一編程平臺,編寫補丁程序用(與使用漢化補丁類似);

最簡單的加、減法運算(Icefire:這也算一條?)。

作為練習,下面以 LS定時器為例,看看如何帶殼編寫破解補丁。這個軟件提供如下功能:它可以根據你的設定在你需要的時候提醒你,防止你忘記重要的事情;它可以根據你的設定在你需要的時候運行制定程序;各種提示都是可以是重復的,它可以每分鐘、每小時、每日、每天、每周、每月、每年的重復決不會怕麻煩;在某一時間,例如:2004年1月1日20點30分關機;倒計時一定時間,例如:在2小時30分以后關機;當鍵盤和鼠標沒有操作一定時間,例如:在你離開電腦30分鐘后關機。

該軟件未注冊時只能使用30天,30天過后只能注冊后才能使用。

初步準備

首先使用PEiD探測得知,軟件使用了ASPack 2.12->Alexey Solodovnikov加的殼。這種殼脫殼也較為容易,特征標志比較明顯。加了這種殼的軟件運行時,殼先自行釋放被加殼的軟件,然后將再運行被加殼的軟件。我們只要找出釋放后、運行前的位置,在這個位置跳到我們的補丁代碼處進行補丁行動,補丁完成后返回,接著繼續軟件就完事了。

使用OllyDbg載入程序,不用運行。向下滾動代碼區,直到找到如下代碼:

006083AF 61 POPAD
006083B0 75 08 JNZ SHORT LsDown.006083BA
006083B2 B8 01000000 MOV EAX,1
006083B7 C2 0C00 RETN 0C
006083BA 68 00000000 PUSH 0
006083BF C3 RETN

復制出來備用。在OllyDbg代碼區按住右邊的滾動條向下拖動,直到底部的全0區域。在全0區域的前部,選一個偏移好記的位置。在代碼區雙擊,在彈出的編輯框中輸入任意一條匯編指令,如:RETN。

在OllyDbg中選擇這段代碼,點右鍵,在彈出的菜單中執行“復制到可執行文件——選擇部分(不同版本的OD這個菜單略有不同)”,在跳出的代碼框中點右鍵,并在彈出的菜單中執行“保存文件”,另起一個名稱,保存備用(為簡化計算,此過程必需)。

深入跟蹤

這里是個高強度的工作,你需要有足夠耐力和觀察分析判斷力。你沒有注冊,又過了試用期。所以你必須找到所有的判斷注冊與否的關鍵跳轉,并記錄下相關的代碼部分(該軟件使用的非可逆注冊算法,只能爆破)。通過尋找,會得到如下關鍵代碼處:

1、005131FA SETE AL
2、0051321E JNZ SHORT LsDown.00513227
3、00533C89 JE SHORT LsDown.00533C91

通過分析和試驗,發現需要將它們分別更改成為:

1、005131FA MOV AL,1
NOP
2、0051321E JE SHORT LsDown.00513227
3、00533C89 JNZ SHORT LsDown.00533C91

則軟件可以使用并且沒有任何限制。

制作模擬補丁

因為這里所說的補丁制作不是在軟件里直接完成,而是另用編程軟件制作,所以需要取得補丁的匯編級機器碼。又因為上述需要修改的匯編代碼的機器碼為:

MOV AL,1-->B0 01
NOP -->90
JE SHORT LsDown.00513227-->74 07
JNZ SHORT LsDown.00533C91-->75 06

其偏移地址分別為:

005131FA
0051321E
00533C89

所以模擬補丁形如:

MOV WORD PTR SS:[5131FA],1B0 
MOV BYTE PTR DS:[5131FC],90
MOV BYTE PTR DS:[51321E],74
MOV BYTE PTR DS:[533C89],75
JMP LsDown.006083BA ;補丁完成后的返回
NOP
NOP

再在OllyDbg中下面的代碼區的全0區域的任意位置輸入上述匯編代碼,然后復制出對應的匯編機器碼備用。在返回到偏移006083B0處,將JNZ SHORT LsDown.006083BA改為形如JMP 0060A310(你選定的位置),復制出機器碼備用。到此,模擬補丁代碼獲取工作完成。

編寫補丁程序

眾所周知,反匯編后的代碼位置的偏移與軟件經過編譯后的物理偏移是不一樣的,要在殼外植入補丁需要取得對應位置的物理偏移。我們這里需要兩處物理偏移,一處是對應于JNZ SHORT LsDown.006083BA的,一處是補丁部分的起始位置,這就要借助于文本編輯器進行。

用UltraEdit(或其它文本編輯器)打開前面保存的修改過的更名文件,使用查找功能查找hex:75 08 B8 01(對應于JNZ SHORT LsDown.006083BA)。得到首地址為:000935B0h,記下備用,然后拉到文件的最后,查找添加的代碼位置(對應RETN),得到首地址為:00095510h(視你選擇的位置不同而不同),記下備用,至此全部準備工作完成。

做好上述準備工作后,你就可以使用任一編程軟件來編寫你的補丁用程序了。

請注意我們所要做的工作:修改006083B0處的跳轉;植入動態補丁代碼和設置返回跳轉,其余還應該考慮版本檢測、原文件備份、提示幫助等問題。以下是我用 VB 編寫的主要部分代碼:

Open Fname For Binary As fhandle
'再次檢驗
'=============================================
'尋找軟件版本的關鍵標志 
'VB中Get命令讀數據指針從1開始,注意與hex編輯器中的地址
'的區別。即 偏移+1。
Get fhandle, &H935B0, data1 '為保險讀取四個字節,也可多讀
Get fhandle, &H935B1, data2
Get fhandle, &H935B2, data3
Get fhandle, &H935B3, data4
'=============================================
If (data1 <> &H61) And (data2 <> &H75) And (data3 <> &H8) _
And (data4 <> &HB8) Then MsgBox "請核對軟件版本!", _
vbCritical + vbOKOnly, "文件錯誤:": Close fhandle: Exit Sub
&apos;修改全部要補丁的數據
&apos;==========================
&apos;殼的出口部分的修改
Put fhandle, &H935B1, &HE9
Put fhandle, &H935B2, &H5B
Put fhandle, &H935B3, &H1F
Put fhandle, &H935B4, &H0
Put fhandle, &H935B5, &H0
Put fhandle, &H935B6, &H90
Put fhandle, &H935B7, &H90
&apos;增加動態修改用代碼
Put fhandle, &H95511, &H66
Put fhandle, &H95512, &H36
Put fhandle, &H95513, &HC7
Put fhandle, &H95514, &H5
Put fhandle, &H95515, &HFA
Put fhandle, &H95516, &H31
Put fhandle, &H95517, &H51
Put fhandle, &H95518, &H0
Put fhandle, &H95519, &HB0
Put fhandle, &H9551A, &H1
Put fhandle, &H9551B, &HC6
Put fhandle, &H9551C, &H5
Put fhandle, &H9551D, &HFC
Put fhandle, &H9551E, &H31
Put fhandle, &H9551F, &H51
Put fhandle, &H95520, &H0
Put fhandle, &H95521, &H90
Put fhandle, &H95522, &HC6
Put fhandle, &H95523, &H5
Put fhandle, &H95524, &H1E
Put fhandle, &H95525, &H32
Put fhandle, &H95526, &H52
Put fhandle, &H95527, &H0
Put fhandle, &H95528, &H74
Put fhandle, &H95529, &HC6
Put fhandle, &H9552A, &H5
Put fhandle, &H9552B, &H89
Put fhandle, &H9552C, &H3C
Put fhandle, &H9552D, &H53
Put fhandle, &H9552E, &H0
Put fhandle, &H9552F, &H75
Put fhandle, &H95530, &HE9
Put fhandle, &H95531, &H86
Put fhandle, &H95532, &HE0
Put fhandle, &H95533, &HFF
Put fhandle, &H95534, &HFF
Put fhandle, &H95535, &H90
Put fhandle, &H95536, &H90
Put fhandle, &H95537, &H90
&apos;完成寫入,關閉它
Close fhandle

Icefire:細心的讀者可能注意到,這兩段代碼中所使用的首地址比我們記錄的首地址多1,這是因為VB的最小指針單位是1而不是0,而文本編輯器等的最小指針單位是0,所以在不同編程平臺上編程時要多加注意。

編好補丁代碼后,將其編譯為可執行程序,然后試試你的東西,看能否將帶殼的軟件打補丁而且正常工作!如果一切正常,那你就大功告成了。

后記

有時,你可能想到要別出心裁的在軟件中添加點屬于自己有個性的東西,比如警示框等等。那也不難,只要你知道彈出對話框需要什么條件、用到哪些代碼就可以做到的。例如:現在我想在軟件啟動前彈出一個對話框。

我們該如何做呢?這個問題當然要難一點。如果殼外有現成的對話框調用函數,就可以簡單地進行調用。如果沒有則需要添加較多的代碼,這里就不講了,免得有騙稿費之嫌。

總之,編寫補丁如同編寫一個軟件,同樣能實現自己的目的與愿望,展示自己的才華與智慧。個中樂趣只有親自品嘗之。

熱詞搜索:

上一篇:拒絕“熊貓燒香”的入侵
下一篇:防止ACCESS數據庫被下載

分享到: 收藏
主站蜘蛛池模板: 额济纳旗| 阳高县| 黄陵县| 永福县| 乌兰浩特市| 许昌县| 富锦市| 郸城县| 外汇| 夏河县| 义马市| 清水河县| 潜江市| 株洲市| 临漳县| 如皋市| 伊金霍洛旗| 津南区| 临洮县| 象山县| 双桥区| 炉霍县| 海原县| 枞阳县| 河池市| 安远县| 鹤峰县| 海丰县| 新安县| 攀枝花市| 弥勒县| 冕宁县| 景宁| 临湘市| 贵定县| 怀来县| 乐东| 奎屯市| 株洲市| 连城县| 桂平市|