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

掃一掃
關(guān)注微信公眾號(hào)

不脫殼直接破解軟件的方法
2007-02-11   賽迪網(wǎng)安全社區(qū)

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

要實(shí)現(xiàn)這種帶殼補(bǔ)丁的目的,當(dāng)然你需要作充分的前提條件:

過硬的軟件跟蹤與分析能力,因?yàn)槟銢]有軟件作者的源碼,一切都要靠自己動(dòng)手;

簡(jiǎn)單代碼編寫能力,當(dāng)然是匯編代碼,可以借調(diào)試軟件幫忙;

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

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

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

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

該軟件未注冊(cè)時(shí)只能使用30天,30天過后只能注冊(cè)后才能使用。

初步準(zhǔn)備

首先使用PEiD探測(cè)得知,軟件使用了ASPack 2.12->Alexey Solodovnikov加的殼。這種殼脫殼也較為容易,特征標(biāo)志比較明顯。加了這種殼的軟件運(yùn)行時(shí),殼先自行釋放被加殼的軟件,然后將再運(yùn)行被加殼的軟件。我們只要找出釋放后、運(yùn)行前的位置,在這個(gè)位置跳到我們的補(bǔ)丁代碼處進(jìn)行補(bǔ)丁行動(dòng),補(bǔ)丁完成后返回,接著繼續(xù)軟件就完事了。

使用OllyDbg載入程序,不用運(yùn)行。向下滾動(dòng)代碼區(qū),直到找到如下代碼:

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

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

在OllyDbg中選擇這段代碼,點(diǎn)右鍵,在彈出的菜單中執(zhí)行“復(fù)制到可執(zhí)行文件——選擇部分(不同版本的OD這個(gè)菜單略有不同)”,在跳出的代碼框中點(diǎn)右鍵,并在彈出的菜單中執(zhí)行“保存文件”,另起一個(gè)名稱,保存?zhèn)溆茫楹?jiǎn)化計(jì)算,此過程必需)。

深入跟蹤

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

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

通過分析和試驗(yàn),發(fā)現(xiàn)需要將它們分別更改成為:

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

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

制作模擬補(bǔ)丁

因?yàn)檫@里所說的補(bǔ)丁制作不是在軟件里直接完成,而是另用編程軟件制作,所以需要取得補(bǔ)丁的匯編級(jí)機(jī)器碼。又因?yàn)樯鲜鲂枰薷牡膮R編代碼的機(jī)器碼為:

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

其偏移地址分別為:

005131FA
0051321E
00533C89

所以模擬補(bǔ)丁形如:

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 ;補(bǔ)丁完成后的返回
NOP
NOP

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

編寫補(bǔ)丁程序

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

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

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

請(qǐng)注意我們所要做的工作:修改006083B0處的跳轉(zhuǎn);植入動(dòng)態(tài)補(bǔ)丁代碼和設(shè)置返回跳轉(zhuǎn),其余還應(yīng)該考慮版本檢測(cè)、原文件備份、提示幫助等問題。以下是我用 VB 編寫的主要部分代碼:

Open Fname For Binary As fhandle
'再次檢驗(yàn)
'=============================================
'尋找軟件版本的關(guān)鍵標(biāo)志 
'VB中Get命令讀數(shù)據(jù)指針從1開始,注意與hex編輯器中的地址
'的區(qū)別。即 偏移+1。
Get fhandle, &H935B0, data1 '為保險(xiǎn)讀取四個(gè)字節(jié),也可多讀
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 "請(qǐng)核對(duì)軟件版本!", _
vbCritical + vbOKOnly, "文件錯(cuò)誤:": Close fhandle: Exit Sub
&apos;修改全部要補(bǔ)丁的數(shù)據(jù)
&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;增加動(dòng)態(tài)修改用代碼
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;完成寫入,關(guān)閉它
Close fhandle

Icefire:細(xì)心的讀者可能注意到,這兩段代碼中所使用的首地址比我們記錄的首地址多1,這是因?yàn)閂B的最小指針單位是1而不是0,而文本編輯器等的最小指針單位是0,所以在不同編程平臺(tái)上編程時(shí)要多加注意。

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

后記

有時(shí),你可能想到要?jiǎng)e出心裁的在軟件中添加點(diǎn)屬于自己有個(gè)性的東西,比如警示框等等。那也不難,只要你知道彈出對(duì)話框需要什么條件、用到哪些代碼就可以做到的。例如:現(xiàn)在我想在軟件啟動(dòng)前彈出一個(gè)對(duì)話框。

我們?cè)撊绾巫瞿兀窟@個(gè)問題當(dāng)然要難一點(diǎn)。如果殼外有現(xiàn)成的對(duì)話框調(diào)用函數(shù),就可以簡(jiǎn)單地進(jìn)行調(diào)用。如果沒有則需要添加較多的代碼,這里就不講了,免得有騙稿費(fèi)之嫌。

總之,編寫補(bǔ)丁如同編寫一個(gè)軟件,同樣能實(shí)現(xiàn)自己的目的與愿望,展示自己的才華與智慧。個(gè)中樂趣只有親自品嘗之。

熱詞搜索:

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

分享到: 收藏
主站蜘蛛池模板: 利川市| 石楼县| 广州市| 页游| 金溪县| 吴堡县| 麻城市| 福建省| 南京市| 遂平县| 柏乡县| 泗阳县| 吉木乃县| 色达县| 信宜市| 海安县| 黄骅市| 北辰区| 揭阳市| 齐河县| 洪洞县| 疏勒县| 双柏县| 肃南| 高安市| 吴桥县| 平罗县| 阿克苏市| 武义县| 汾阳市| 陕西省| 额济纳旗| 永年县| 南郑县| 沙河市| 玉林市| 香港| 平凉市| 剑河县| 长宁区| 香格里拉县|