第六章--爆破軟體

看雪資料發表於2015-11-15

第六章--爆破軟體
爆破其實很簡單,最起碼比你能一下把你家的牙膏給全擠出來要容易多了。你只要先到大街上買幾根雷管,然後放到你的顯示器上再點著就OK了(不難吧,記的點著後跑遠點兒) 第六章--爆破軟體
爆破的原理我也說過了,相信你很容易就能理解了。我們今天就具體講一下如何找到那個關鍵跳轉以及如何才能買到即便宜又好用的雷管... 第六章--爆破軟體
爆破一個軟體一般只需要很少的幾個步驟,首先先看一下其有無加殼,有的話是用何工具加的殼,知道了以後用相應的工具將其脫掉或進行手工脫殼,參考以有教程。接著我們就可以對脫過殼之後的軟體來開刀了。你有兩種選擇,用W32Dasm或偵錯程式,一般如果你遇上的是那種很菜的軟體的話,用W32Dasm就可以搞定了。如果遇上的不是那種比較菜的,就買股票吧,因為股票是你如膠似漆的妻子!當!快醒醒啊...哦,一般如果你遇上的不是那種很菜的軟體的話,就用偵錯程式吧。先來說W32Dasm:我們首先用W32Dasm來進行反彙編(廢話!)之後在串式參考中找到錯誤提示資訊或可能是正確的提示資訊雙擊滑鼠左鍵來到相應的地址處。在W32Dasm的主視窗中分析相應彙編程式碼,找出關鍵跳轉和關鍵call。綠色光條停在關鍵跳轉,在W32Dasm主視窗底部找到關鍵跳轉的偏移地址(實際修改地址)。用ultraedit找到偏移地址(實際修改地址)修改機器碼(或放上一根雷管),儲存(點火)!而用偵錯程式也同樣簡單,等會兒會詳細說明。
道理廢話了那麼多,來例項動手說明吧:
首先講解用W32Dasm來進行爆破:
【軟體名稱】中華壓縮(ChinaZip)
【軟體版本】7.0
【檔案大小】1041KB
【適用平臺】Win9x/Me/NT/2000
【軟體簡介】ChinaZip(中華壓縮)是一款壓縮、解壓各種壓縮文件的工具軟體,它支援包括ZIP格式檔案在內的各種常見壓縮格式如:ARJ、CAB、GZIP、JAR、LHA、TAR、ZOO、ARC、LZH、Pak等等。
軟體的出處是電腦報2001年的合訂本配套光碟,7.0時的保護做的很那個,目前最新版應該好多了...
好的,我們開始吧,首先第一步是你得把它裝上(引來野狼N頭),之後先隨便找個字串填上去註冊一下,會看到一個錯誤對話方塊,提示"註冊碼不正確,無法註冊"。接著我們用FI來看一下它用的是什麼殼。ASPack 2.001,caspr出場。脫過殼後我們用W32Dasm花上半分鐘或半小時的時間來對它進行反彙編。我們以經反彙編完畢。之後在串式參考中(字串資料參考)中找剛才你看到的那個錯誤提示,找到之後雙擊幾次,發現其只有一處呼叫。我們會來到004F0E64處,我把具體程式碼給貼上(請你從程式碼的最下邊開始看):
:004F4DD1 E84EE1F3FF              call 00432F24
:004F4DD6 8B55F0                  mov edx, dword ptr [ebp-10]
:004F4DD9 8D4DF4                  lea ecx, dword ptr [ebp-0C]
:004F4DDC 8BC3                    mov eax, ebx
:004F4DDE E8C9010000              call 004F4FAC
:004F4DE3 8B55F4                  mov edx, dword ptr [ebp-0C]
:004F4DE6 58                      pop eax
:004F4DE7 E830F3F0FF              call 0040411C
:004F4DEC 7576                    jne 004F4E64                    <--這個就是傳說中的男人,Stop!這個就是傳說中的關鍵跳轉 第六章--爆破軟體  
:004F4DEE B201                    mov dl, 01
:004F4DF0 A158254500              mov eax, dword ptr [00452558]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F4D86(C)
|
:004F4DF5 E85ED8F5FF              call 00452658
:004F4DFA 8945FC                  mov dword ptr [ebp-04], eax
:004F4DFD 33C0                    xor eax, eax
:004F4DFF 55                      push ebp
:004F4E00 685D4E4F00              push 004F4E5D
:004F4E05 64FF30                  push dword ptr fs:[eax]
:004F4E08 648920                  mov dword ptr fs:[eax], esp
:004F4E0B B101                    mov cl, 01

* Possible StringData Ref from Code Obj ->"Software\XDZHAN\ChinaZip"
                                 |
:004F4E0D BAA84E4F00              mov edx, 004F4EA8
:004F4E12 8B45FC                  mov eax, dword ptr [ebp-04]
:004F4E15 E822DAF5FF              call 0045283C

* Possible StringData Ref from Code Obj ->"Real Programmers Use Pascal!"
                                 |
:004F4E1A B9CC4E4F00              mov ecx, 004F4ECC

* Possible StringData Ref from Code Obj ->"Key"
                                 |
:004F4E1F BAF44E4F00              mov edx, 004F4EF4
:004F4E24 8B45FC                  mov eax, dword ptr [ebp-04]
:004F4E27 E854DEF5FF              call 00452C80

* Possible StringData Ref from Code Obj ->"軟體註冊成功,謝謝您的支援!"     <--我們向上看會在這裡發現註冊成功後的正確資訊。正確資訊處向上找第一個跳轉就是我們要找的關鍵跳轉。
                                 |
:004F4E2C B8004F4F00              mov eax, 004F4F00
:004F4E31 E8563DF6FF              call 00458B8C
:004F4E36 A16C305000              mov eax, dword ptr [0050306C]
:004F4E3B 8B00                    mov eax, dword ptr [eax]

* Possible StringData Ref from Code Obj ->"中華壓縮(ChinaZip)-註冊版"  
                                 |
:004F4E3D BA244F4F00              mov edx, 004F4F24
:004F4E42 E80DE1F3FF              call 00432F54
:004F4E47 33C0                    xor eax, eax
:004F4E49 5A                      pop edx
:004F4E4A 59                      pop ecx
:004F4E4B 59                      pop ecx
:004F4E4C 648910                  mov dword ptr fs:[eax], edx
:004F4E4F 686E4E4F00              push 004F4E6E

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F4E62(U)
|
:004F4E54 8B45FC                  mov eax, dword ptr [ebp-04]
:004F4E57 E868E2F0FF              call 004030C4
:004F4E5C C3                      ret


:004F4E5D E9C2E9F0FF              jmp 00403824
:004F4E62 EBF0                    jmp 004F4E54

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F4DEC(C)
|

* Possible StringData Ref from Code Obj ->"註冊碼不正確,無法註冊!"  <--這個就是出錯的資訊了,那正確資訊也就在附近,上下看看。    
                                 |
:004F4E64 B8484F4F00              mov eax, 004F4F48                         <--雙擊來到這裡
:004F4E69 E81E3DF6FF              call 00458B8C
:004F4E6E 33C0                    xor eax, eax
:004F4E70 5A                      pop edx
:004F4E71 59                      pop ecx
:004F4E72 59                      pop ecx
:004F4E73 648910                  mov dword ptr fs:[eax], edx
:004F4E76 689B4E4F00              push 004F4E9B
你可能有點不明白,為什麼我說它就是關鍵跳轉呢?還記的在破解原理中我舉的例子嗎?
我再給你講一遍好了,通常我們會遇到兩種關鍵跳轉,我分別舉例說明:
(1)
je (jne,jz,jnz) 19870219
........  XXXXXXXXXX
........  XXXXXXXXXX
........  軟體註冊正確的相關資訊
 ...
 ...
19870219 軟體的出錯資訊
.......
.......
也就是說這第一種情況是先判斷註冊碼是否正確,如果不正確就跳到19870219處,正確的話就不跳轉,一直執行下去,直至註冊正確處。
對於這種情況,我們要找的關鍵跳轉,就是正確資訊上面的第一個跳轉。我們可能對其作相應修改或將其給nop掉就萬事OK了。
(2)
je (jne,jz,jnz) 19870219
........  XXXXXXXXXX
........  XXXXXXXXXX
........  軟體的出錯資訊
 ...
 ...
19870219 軟體註冊正確的相關資訊
.......
.......
而這第二種情況就是先判斷註冊碼正確與否,如果正確就跳到19870219處,不正確的話就不跳轉,一直執行下去,直至出錯處。
對於這種情況,我們要找的關鍵跳轉就是出錯資訊上面的第一個跳轉。將其做相應修改或改為jmp後我們就可以為所欲為了 第六章--爆破軟體
呵呵,道理也都給你講明白了,我們來改一下試試吧。我們在W32Dasm中選中關鍵跳轉,在右下角的狀態列中看到相應的偏移地址為000F41EC。好的,我們用UltraEdit來開啟它。Ctrl+G,接著輸入0xF41EC,回車後便會跳到相應的位置。相應的機器碼是75(jne),我們將其改為74(jz)後存檔退出。
好了,執行一下看看,我們來隨便輸入一個註冊碼註冊一下試試。呵呵,註冊成功!
用W32Dasm我們就講到這裡,呵呵,很簡單的,你下去之後自己找些保護簡單的軟體上上手吧。
我們接著來講用偵錯程式來進行爆破。
如果你真的試圖用W32Dasm去爆破幾個軟體的話,用不了多少時間你就會發現一些問題。比如說有的軟體你用W32Dasm反彙編後串式參考根本就不能用。或者串式參考中沒有出錯或正確的資訊。還有就是有的軟體就算你通過串式參考來到了相應的地方,剛想去找關鍵跳轉你就會發現眼前的東西比你想像中的要亂的多...雖然你有可能通過認真仔細地找,仍會找到,但我不認為那是一件聰明的事情。畢竟,有一些動靜是隻有在程式執行期間才能看出來的。好的,如果你用W32Dasm遇到了找不到關鍵跳轉的軟體,就去用偵錯程式吧!(你用偵錯程式前可先用W32Dasm開啟一遍看個先,如果很容易就讓你找到了。那就沒必要了)
在開始之前我們有必要講一下用偵錯程式來爆破的步驟(我知道你一定會用偵錯程式的 第六章--爆破軟體 ):首先,我們當然還是要把你要Crack的軟體給裝上(我擋我擋我擋,不要亂丟東西嘛!)然後來到輸入註冊碼的地方,仍舊隨便輸入一個,接著不要按確定,待我們把偵錯程式叫出來先。還記的我前面跟你講的API的事情嗎?軟體要得到你輸入的註冊碼,就一定會呼叫某個API函式來達到目的。我們就在偵錯程式中用相應的API來做斷點,這樣的話,只要一有程式呼叫這個API,就會被偵錯程式給攔截下來。
GetDlgItemInt、GetDlgItemText、GetDlgItemTextA這三個函式可能會有用。但是如果你用的是98,那為什麼不用hmemcpy呢?那真的是一個不錯的主意。當我們下完斷點後就返回到你要註冊的那個軟體中,點確定這類的按鈕。如果被偵錯程式給斷了下來,就說明你剛才下的斷點有用,如果沒有被斷下來,就換個斷點試試。接下來我們在偵錯程式中來取消剛才你下的那個斷點,我們以TRW2000為例(SoftICE與其操作大體相同)取消斷點用bc *指令。然後我們就輸入pmodule指令來返回到程式的領空(而在SoftICE中由於沒有相應指令,呵呵,狂按F12吧)。現在我們把話題岔開一下,什麼是領空呢?舉個例子吧,你的程式要得到你輸入的那個註冊碼,就會去呼叫相應的函式。比如呼叫GetDlgItemTextA,而GetDlgItemTextA本身又會去呼叫Hmemcpy這個函式,而這些函式都是存在於系統中的某個DLL檔案中的。那麼當這個程式呼叫相應的API函式的話,程式的領空就會轉到這個相應的DLL檔案中去執行這個API函式。(你就這樣理解就行了)我前邊也說過了,Hmemcpy這個函式應用程式本身並不直接呼叫,而是由其它的API函式來呼叫。那麼,你就可以理解為你的程式呼叫了一個API函式,呼叫的同時程式的領空會轉到這個API所在的DLL檔案裡,而這個API又呼叫了Hmemcpy函式,那麼此時領空就會又轉到了Hmemcpy所在的DLL檔案中,之後當Hmemcpy執行完畢,就會返回到呼叫它的API的領空中去,而當這個API執行完畢的後就會返回到呼叫它的應用程式的領空中去。比如說我們用Hmemcpy這個函式來當斷點,當我們輸入完註冊碼按確定後,程式就會去呼叫某個API來得到你輸入的那些資料,而這“某個API”又會去呼叫Hmemcpy,所以程式就被斷到了。當然此時程式的領空也就不會在應用程式中了,但是當我們輸入過pmodule指令之後我們就可以反回到應用程式本身的領空中去了。這樣的話你看到的就是應用程式自身的程式碼了,而不是API的!好了,我接著剛才的說(到哪兒了來著?)當我們返回到程式自身的領空中去後就一直狂按F12吧,F12的作用是一直執行程式,直到遇上ret等指令。也就是一大坨一大坨地來執行程式^_^你一直按F12,直到程式出現註冊錯誤對話方塊。然後記下剛才你按的次數,接著從頭做起,這一次按F12的次數是你剛才按的次數-1,也就是說比上一次要少按一次。而後按鍵由F12換至F10(怎麼沒有F4?),還是一路狂按,直到軟體提示出錯,這次記下你按F10的次數。好的,再從頭來一遍,我們再次按F10的時候,要一步一步慢慢來,一般你按F10的次數離你上次按的次數相差五六步的時候,一般就會看見一個CALL,接著是一個跳轉指令。你一步一步地來,看過了這個跳轉指令之後會不會跳走,如果跳走了,那一般你不會再過兩三步就應該出錯了。當然也有可能是你沒有跳走,而過了兩三步就出錯了。這個應該不難理解,因為基本上它和我前邊跟你介紹過的是一個道理。然而另外一種情況是你一路按F10下來,到了最後會發現根本沒什麼跳轉指令,呵呵,別害怕,這個很常見的。遇上這種情況,我們只要把F10的次數變換為上次按F10的次數-1,這樣的話你一般就會停在一個CALL處,而這個CALL,就是程式中的關鍵CALL,我們之後要吃點兒苦,要按F8追進去分析它,程式註冊的成功與失敗,就在這個CALL中,也就是說我們要修改的關鍵跳轉,也在這個CALL中。呵呵,其實也很好理解的,就是把我上邊說的那些個判斷什麼地放到了一個CALL裡面。我們按F8追進去之後便仍舊按F10來一步一步執行,過不了多長時間你就會發現關鍵跳轉了,找關鍵跳轉的方法跟我前邊說的一樣,即按F10的次數跟上一次差五六步的時候慢下來,就會看到了。
你應該明白,程式是很靈活的東西,並沒有那麼多公式化的東西在裡邊,大概的分析方法就是這個樣子,一切都要靠你自己去掌握,別人跟你講,也只是講一個分析的方法而以,我相信隨著你以後經驗的提高,你慢慢地就能應付各種情況了。
現在,我們再用偵錯程式來對CHINAZIP這個軟體進行分析,希望你能夠掌握這個並不難的方法。
首先,你要把剛才爆破過了的再改回來,或直接重灌一遍。之後我們開啟它,任意輸入註冊碼,接著按Ctrl+N撥出TRW,下斷點hmemcpy。下過後按F5退出(它就是不用F4,我也沒辦法^_^)然後我們點選確定。好的,程式被斷了下來:
KERNEL?HMEMCPY
0147:9e62  push     bp
0147:9e63  mov      bp,sp
0147:9e65  push     ds
0147:9e66  push     edi
0147:9e68  push     esi
0147:9e6a  cld
0147:9e6b  mov      ecx,[bp+06]
0147:9e6f  jcxz     9ee9
……以下N多程式碼省略……
我們輸入bc *來取消斷點,然後用pmodule來返回到程式的領空:
0167:00436d13  mov      [ebx+0c],eax
0167:00436d16  mov      eax,[ebx]
0167:00436d18  cmp      eax,byte +0c
0167:00436d1b  jnz      00436d38
0167:00436d1d  mov      edx,[ebx+08]
0167:00436d20  push     edx
0167:00436d21  mov      ecx,[ebx+04]
0167:00436d24  mov      edx,eax
0167:00436d26  mov      eax,esi
0167:00436d28  call     00432b24
……N多程式碼仍舊省略……
按7下F12另加1下F10來到0167:004f4dc4處,我們接著一下一下來按F10,大概按了10多下,就可以看到004f4dec處有一個跳轉,我們執行到004f4dec處後果然跳走了。會跳到004f4e64處,我們跳過去之後按不了三下,程式就提示出錯了。呵呵,明白過來了吧,004f4dec處的那個跳轉jnz 004f4e64就是關鍵跳轉,嘿嘿,找到了之後不用我說了吧 第六章--爆破軟體
0167:004f4dc4  mov      eax,[ebp-08]      
0167:004f4dc7  push     eax              
0167:004f4dc8  lea      edx,[ebp-10]
0167:004f4dcb  mov      eax,[ebx+02e0]
0167:004f4dd1  call     00432f24          
0167:004f4dd6  mov      edx,[ebp-10]      
0167:004f4dd9  lea      ecx,[ebp-0c]
0167:004f4ddc  mov      eax,ebx
0167:004f4dde  call     004f4fac        
0167:004f4de3  mov      edx,[ebp-0c]    
0167:004f4de6  pop      eax              
0167:004f4de7  call     0040411c          
0167:004f4dec  jnz      004f4e64                    <--關鍵跳轉!!          
0167:004f4dee  mov      dl,01
0167:004f4df0  mov      eax,[00452558]
0167:004f4df5  call     00452658
0167:004f4dfa  mov      [ebp-04],eax
0167:004f4dfd  xor      eax,eax
0167:004f4dff  push     ebp
0167:004f4e00  push     dword 004f4e5d
0167:004f4e05  push     dword [fs:eax]
0167:004f4e08  mov      [fs:eax],esp
0167:004f4e0b  mov      cl,01
0167:004f4e0d  mov      edx,004f4ea8
0167:004f4e12  mov      eax,[ebp-04]
0167:004f4e15  call     0045283c
0167:004f4e1a  mov      ecx,004f4ecc
0167:004f4e1f  mov      edx,004f4ef4
0167:004f4e24  mov      eax,[ebp-04]
0167:004f4e27  call     00452c80
0167:004f4e2c  mov      eax,004f4f00
0167:004f4e31  call     00458b8c
0167:004f4e36  mov      eax,[0050306c]
0167:004f4e3b  mov      eax,[eax]
0167:004f4e3d  mov      edx,004f4f24
0167:004f4e42  call     00432f54
0167:004f4e47  xor      eax,eax
0167:004f4e49  pop      edx
0167:004f4e4a  pop      ecx
0167:004f4e4b  pop      ecx
0167:004f4e4c  mov      [fs:eax],edx
0167:004f4e4f  push     dword 004f4e6e
0167:004f4e54  mov      eax,[ebp-04]
0167:004f4e57  call     004030c4
0167:004f4e5c  ret    
0167:004f4e5d  jmp      00403824
0167:004f4e62  jmp      short 004f4e54
0167:004f4e64  mov      eax,004f4f48      <---由上面的0167:004f4dec處跳來,出錯!;
0167:004f4e69  call     00458b8c
0167:004f4e6e  xor      eax,eax
再來給你舉另一個例子:
【軟體名稱】天網防火牆
【軟體版本】2.46 Beta
【檔案大小】1289KB
【適用平臺】Win9x/Me/NT/2000
【軟體簡介】天網防火牆個人版是一套給個人電腦使用的網路安全程式,它可以幫你抵擋網路入侵和攻擊,防止資訊洩露,並可與我們的網站相配合,根據可疑的攻擊資訊,來找到攻擊者。同時天網防火牆個人版把網路分為本地網和網際網路,可以針對來自不同網路的資訊,來設定不同的安全方案,它適合於在撥號上網的使用者,也適合通過網路共享軟體上網的使用者。
該軟體仍舊是我從電腦報2001年合訂本的配套光碟中找的,軟體的註冊碼可以到其網站免費獲得...
我們還是要先把它裝上(某民工:你小子敢再說一句廢話試試!^_^)之後我們用FI看一下它有沒有加殼,呵呵,BC++編譯,沒有加殼,爽!執行它,在註冊對話方塊中隨便輸入點什麼,比如說這星期又出了幾部新電影,都叫什麼名字等等... 第六章--爆破軟體
好的,我們接下來請TRW2000出場。先胡亂輸入兩個字串,比如第一個輸入“英雄的導演是?”第二個輸入“可能是趙本山”:)
接下來就按Ctrl+N把TRW2K叫出來,下bpx hmemcpy,之後按F5退出。
接著可以按確定就成了,程式會被TRW2K斷掉,我們緊接著輸入bc *以及pmodule。
下面可以開始按F12了,一共按8下程式就會報錯,我們第二次就按7下然後開始按F10,按70下F10程式就又報錯了(呵呵,一定要有耐心哦)。
好的,我把反彙編後的程式碼給你貼出來:
0167:0041c617  lea      edx,[ebp-04]                              <--7下F12後按一下F10來到這裡
0167:0041c61a  mov      ecx,[0052ae7c]
0167:0041c620  mov      eax,[ecx]
0167:0041c622  mov      eax,[eax+0318]
0167:0041c628  add      eax,byte +2c
0167:0041c62b  call     00517740
0167:0041c630  dec      dword [ebp-20]
0167:0041c633  lea      eax,[ebp-04]
0167:0041c636  mov      edx,02
0167:0041c63b  call     00517710
0167:0041c640  mov      word [ebp-2c],14
0167:0041c646  lea      eax,[ebp-08]
0167:0041c649  call     00401d60
0167:0041c64e  mov      edx,eax
0167:0041c650  inc      dword [ebp-20]
0167:0041c653  mov      ecx,[ebp-40]
0167:0041c656  mov      eax,[ecx+02e0]
0167:0041c65c  call     004b9f14
0167:0041c661  lea      edx,[ebp-08]
0167:0041c664  mov      ecx,[0052ae7c]
0167:0041c66a  mov      eax,[ecx]
0167:0041c66c  mov      eax,[eax+0318]
0167:0041c672  add      eax,byte +30
0167:0041c675  call     00517740
0167:0041c67a  dec      dword [ebp-20]
0167:0041c67d  lea      eax,[ebp-08]
0167:0041c680  mov      edx,02
0167:0041c685  call     00517710
0167:0041c68a  lea      eax,[ebp-10]
0167:0041c68d  call     00401d60
0167:0041c692  mov      edx,eax
0167:0041c694  inc      dword [ebp-20]
0167:0041c697  mov      ecx,[ebp-40]
0167:0041c69a  mov      eax,[ecx+02e0]
0167:0041c6a0  call     004b9f14
0167:0041c6a5  lea      edx,[ebp-10]
0167:0041c6a8  push     dword [edx]
0167:0041c6aa  mov      word [ebp-2c],20
0167:0041c6b0  lea      eax,[ebp-0c]
0167:0041c6b3  call     00401d60
0167:0041c6b8  mov      edx,eax
0167:0041c6ba  inc      dword [ebp-20]
0167:0041c6bd  mov      ecx,[ebp-40]
0167:0041c6c0  mov      eax,[ecx+02d4]
0167:0041c6c6  call     004b9f14
0167:0041c6cb  lea      edx,[ebp-0c]
0167:0041c6ce  mov      edx,[edx]
0167:0041c6d0  mov      eax,[0052ae7c]
0167:0041c6d5  mov      eax,[eax]
0167:0041c6d7  pop      ecx
0167:0041c6d8  call     0040525c
0167:0041c6dd  mov      [ebp-45],al
0167:0041c6e0  dec      dword [ebp-20]
0167:0041c6e3  lea      eax,[ebp-10]
0167:0041c6e6  mov      edx,02
0167:0041c6eb  call     00517710
0167:0041c6f0  dec      dword [ebp-20]
0167:0041c6f3  lea      eax,[ebp-0c]
0167:0041c6f6  mov      edx,02
0167:0041c6fb  call     00517710
0167:0041c700  cmp      byte [ebp-45],00
0167:0041c704  jz       0041c750                       <--按了60多下F10後會在這裡發現一個跳轉,嘿嘿,就是它了!!!
0167:0041c706  mov      ecx,[0052ae7c]
0167:0041c70c  mov      eax,[ecx]
0167:0041c70e  mov      eax,[eax+0318]
0167:0041c714  call     00411fd0
0167:0041c719  mov      word [ebp-2c],2c
0167:0041c71f  mov      edx,00521b50
0167:0041c724  lea      eax,[ebp-14]
0167:0041c727  call     005175b0
0167:0041c72c  inc      dword [ebp-20]
0167:0041c72f  mov      eax,[eax]
0167:0041c731  call     004b41b0
0167:0041c736  dec      dword [ebp-20]
0167:0041c739  lea      eax,[ebp-14]
0167:0041c73c  mov      edx,02
0167:0041c741  call     00517710
0167:0041c746  mov      eax,[ebp-40]
0167:0041c749  call     004a81d0
0167:0041c74e  jmp      short 0041c77d
0167:0041c750  mov      word [ebp-2c],38
0167:0041c756  mov      edx,00521b6b
0167:0041c75b  lea      eax,[ebp-18]
0167:0041c75e  call     005175b0
0167:0041c763  inc      dword [ebp-20]
找到了關鍵跳轉之後就別閒著了,呵呵,放雷管吧!(你可以用W32Dasm開啟這個檔案,然後按Shift+F12,之後輸入0041c704,這樣就可以在右下角看到相應的偏移地址了)
小技巧:在TRW中,如果你覺的某處可能是關鍵跳轉的話,可以用r fl z這個指令來進行測試,該指令可使以成立的條件取反,比如說本來JZ XXXXXXXX成立,可以跳走了,用r fl z指令後該條指令就不成立了,即就不會跳走了。以上也是,你可以在0041c704處輸入r fl z,呵呵,再執行幾步看看,是不是成功了?還有就是如果你只是想達到註冊軟體的目的,且該軟體只在註冊的時候驗證一次的話,用這個方法就可以代替雷管了! 第六章--爆破軟體
呵呵,最後還是要說一句,爆破只是一些雕蟲小技。剛入門時玩幾次就夠了,切莫就此不前...
後話:你可能慢慢就會發現,有一些軟體其實並沒有你想象中那麼簡單,你甚至連找到它的關鍵跳轉都找不到。這很正常,你要做的便是多動手多練習,慢慢你就會明白過來的。我今天之所以給你舉這兩個例子,就是因為它們兩個都比較簡單,且能說明重點,給你講那些比較那個的軟體的爆破,反而會讓你看的一頭霧水... 第六章--爆破軟體
<本章完>

相關文章