當前位置:首頁 » 編程軟體 » 反編譯jne

反編譯jne

發布時間: 2025-09-20 13:06:23

❶ 反調試是什麼

免殺就不知道了.反調試就是禁止調試一般有這樣的一些原理.一、反調試技術反調試技術是一種常見的反檢測技術,因為惡意軟體總是企圖監視自己的代碼以檢測是否自己正在被調試。為做到這一點,惡意軟體可以檢查自己代碼是否被設置了斷點,或者直接通過系統調用來檢測調試器。1.斷點為了檢測其代碼是否被設置斷點,惡意軟體可以查找指令操作碼0xcc(調試器會使用該指令在斷點處取得惡意軟體的控制權),它會引起一個SIGTRAP。如果惡意軟體代碼本身建立了一個單獨的處理程序的話,惡意軟體也可以設置偽斷點。用這種方法惡意軟體可以在被設置斷點的情況下繼續執行其指令。惡意軟體也可以設法覆蓋斷點,例如有的病毒採用了反向解密循環來覆蓋病毒中的斷點。相反,還有的病毒則使用漢明碼自我糾正自身的代碼。漢明碼使得程序可以檢測並修改錯誤,但是在這里卻使病毒能夠檢測並清除在它的代碼中的斷點。2.計算校驗和惡意軟體也可以計算自身的校驗和,如果校驗和發生變化,那麼病毒會假定它正在被調試,並且其代碼內部已被放置斷點。VAMPiRE是一款抗反調試工具,可用來逃避斷點的檢測。VaMPiRE通過在內存中維護一張斷點表來達到目的,該表記錄已被設置的所有斷點。該程序由一個頁故障處理程序(PFH),一個通用保護故障處理程序(GPFH),一個單步處理程序和一個框架API組成。當一個斷點被觸發的時候,控制權要麼傳給PFH(處理設置在代碼、數據或者內存映射I/O中的斷點),要麼傳給GPFH(處理遺留的I/O斷點)。單步處理程序用於存放斷點,使斷點可以多次使用。3.檢測調試器在Linux系統上檢測調試器有一個簡單的方法,只要調用Ptrace即可,因為對於一個特定的進程而言無法連續地調用Ptrace兩次以上。在Windows中,如果程序目前處於被調試狀態的話,系統調用isDebuggerPresent將返回1,否則返回0。這個系統調用簡單檢查一個標志位,當調試器正在運行時該標志位被置1。直接通過進程環境塊的第二個位元組就可以完成這項檢查,以下代碼為大家展示的就是這種技術:mov eax, fs:[30h]move eax, byte [eax+2]test eax, eax jne @DdebuggerDetected在上面的代碼中,eax被設置為PEB(進程環境塊),然後訪問PEB的第二個位元組,並將該位元組的內容移入eax。通過查看eax是否為零,即可完成這項檢測。如果為零,則不存在調試器;否則,說明存在一個調試器。如果某個進程為提前運行的調試器所創建的,那麼系統就會給ntdll.dll中的堆操作常式設置某些標志,這些標志分別是FLG_HEAP_ENABLE_TAIL_CHECK、FLG_HEAP_ENABLE_FREE_CHECK和FLG_HEAP_VALIDATE_PARAMETERS。我們可以通過下列代碼來檢查這些標志:mov eax, fs:[30h]mov eax, [eax+68h]and eax, 0x70test eax, eaxjne @DebuggerDetected在上面的代碼中,我們還是訪問PEB,然後通過將PEB的地址加上偏移量68h到達堆操作常式所使用的這些標志的起始位置,通過檢查這些標志就能知道是否存在調試器。檢查堆頭部內諸如ForceFlags之類的標志也能檢測是否有調試器在運行,如下所示:mov eax, fs:[30h]mov eax, [eax+18h] ;process heapmov eax, [eax+10h] ;heap flagstest eax, eaxjne @DebuggerDetected上面的代碼向我們展示了如何通過PEB的偏移量來訪問進程的堆及堆標志,通過檢查這些內容,我們就能知道Force標志是否已經被當前運行的調試器提前設置為1了。另一種檢測調試器的方法是,使用NtQueryInformationProcess這個系統調用。我們可以將ProcessInformationClass設為7來調用該函數,這樣會引用ProcessDebugPort,如果該進程正在被調試的話,該函數將返回-1。示例代碼如下所示。push 0
push 4
push offset isdebugged
push 7 ;ProcessDebugPort
push -1
call NtQueryInformationProcess
test eax, eax
jne @ExitError
cmp isdebugged, 0
jne @DebuggerDetected在本例中,首先把NtQueryInformationProcess的參數壓入堆棧。這些參數介紹如下:第一個是句柄(在本例中是0),第二個是進程信息的長度(在本例中為4位元組),接下來是進程信息類別(在本例中是7,表示ProcessDebugPort),下一個是一個變數,用於返回是否存在調試器的信息。如果該值為非零值,那麼說明該進程正運行在一個調試器下;否則,說明一切正常。最後一個參數是返回長度。使用這些參數調用NtQueryInformationProcess後的返回值位於isdebugged中。隨後測試該返回值是否為0即可。另外,還有其他一些檢測調試器的方法,如檢查設備列表是否含有調試器的名稱,檢查是否存在用於調試器的注冊表鍵,以及通過掃描內存以檢查其中是否含有調試器的代碼等。另一種非常類似於EPO的方法是,通知PE載入器通過PE頭部中的線程局部存儲器(TLS)表項來引用程序的入口點。這會導致首先執行TLS中的代碼,而不是先去讀取程序的入口點。因此,TLS在程序啟動就可以完成反調試所需檢測。從TLS啟動時,使得病毒得以能夠在調試器啟動之前就開始運行,因為一些調試器是在程序的主入口點處切入的。4.探測單步執行惡意軟體還能夠通過檢查單步執行來檢測調試器。要想檢測單步執行的話,我們可以把一個值放進堆棧指針,然後看看這個值是否還在那裡。如果該值在那裡,這意味著,代碼正在被單步執行。當調試器單步執行一個進程時,當其取得控制時需要把某些指令壓入棧,並在執行下一個指令之前將其出棧。所以,如果該值仍然在那裡,就意味著其它正在運行的進程已經在使用堆棧。下面的示例代碼展示了惡意軟體是如何通過堆棧狀態來檢測單步執行的:Mov bp,sp;選擇堆棧指針Push ax ;將ax壓入堆棧Pop ax ;從堆棧中選擇該值Cmp word ptr [bp -2],ax ;跟堆棧中的值進行比較Jne debug ;如果不同,說明發現了調試器。 如上面的注釋所述,一個值被壓入堆棧然後又被彈出。如果存在調試器,那麼堆棧指針–2位置上的值就會跟剛才彈出堆棧的值有所不同,這時就可以採取適當的行動。5.在運行時中檢測速度衰減通過觀察程序在運行時是否減速,惡意代碼也可以檢測出調試器。如果程序在運行時速度顯著放緩,那就很可能意味著代碼正在單步執行。因此如果兩次調用的時間戳相差甚遠,那麼惡意軟體就需要採取相應的行動了。Linux跟蹤工具包LTTng/LTTV通過觀察減速問題來跟蹤病毒。當LTTng/LTTV追蹤程序時,它不需要在程序運行時添加斷點或者從事任何分析。此外,它還是用了一種無鎖的重入機制,這意味著它不會鎖定任何Linux內核代碼,即使這些內核代碼是被跟蹤的程序需要使用的部分也是如此,所以它不會導致被跟蹤的程序的減速和等待。6.指令預取如果惡意代碼篡改了指令序列中的下一條指令並且該新指令被執行了的話,那麼說明一個調試器正在運行。這是指令預取所致:如果該新指令被預取,就意味著進程的執行過程中有其他程序的切入。否則,被預取和執行的應該是原來的指令。7.自修改代碼惡意軟體也可以讓其他代碼自行修改(自行修改其他代碼),這樣的一個例子是HDSpoof。這個惡意軟體首先啟動了一些異常處理常式,然後在運行過程中將其消除。這樣一來,如果發生任何故障的話,運行中的進程會拋出一個異常,這時病毒將終止運行。此外,它在運行期間有時還會通過清除或者添加異常處理常式來篡改異常處理常式。在下面是HDSpoof清除全部異常處理常式(默認異常處理常式除外)的代碼。exception handlers before:0x77f79bb8 ntdll.dll:executehandler2@20 + 0x003a
0x0041adc9 hdspoof.exe+0x0001adc9
0x77e94809 __except_handler3exception handlers after:0x77e94809 __except_handler30x41b770: 8b44240c mov eax,dword ptr [esp+0xc]
0x41b774: 33c9 xor ecx,ecx
0x41b776: 334804 xor ecx,dword ptr [eax+0x4]
0x41b779: 334808 xor ecx,dword ptr [eax+0x8]
0x41b77c: 33480c xor ecx,dword ptr [eax+0xc]
0x41b77f: 334810 xor ecx,dword ptr [eax+0x10]
0x41b782: 8b642408 mov esp,dword ptr [esp+0x8]
0x41b786: 648f0500000000 pop dword ptr fs:[0x0] 下面是HDSpoof創建一個新的異常處理程序的代碼。0x41f52b: add dword ptr [esp],0x9ca0x41f532: push dword ptr [dword ptr fs:[0x0]0x41f539: mov dword ptr fs:[0x0],esp8.覆蓋調試程序信息一些惡意軟體使用各種技術來覆蓋調試信息,這會導致調試器或者病毒本身的功能失常。通過鉤住中斷INT 1和INT 3(INT 3是調試器使用的操作碼0xCC),惡意軟體還可能致使調試器丟失其上下文。這對正常運行中的病毒來說毫無妨礙。另一種選擇是鉤住各種中斷,並調用另外的中斷來間接運行病毒代碼。下面是Tequila 病毒用來鉤住INT 1的代碼:new_interrupt_one: push bp mov bp,sp cs cmp b[0a],1 ;masm mod. needed je 0506 ;masm mod. needed cmp w[bp+4],09b4 ja 050b ;masm mod. needed push ax push es les ax,[bp+2] cs mov w[09a0],ax ;masm mod. needed cs mov w[09a2],es ;masm mod. needed cs mov b[0a],1 pop es pop ax and w[bp+6],0feff pop bp iret一般情況下,當沒有安裝調試器的時候,鉤子常式被設置為IRET。V2Px使用鉤子來解密帶有INT 1和INT 3的病毒體。在代碼運行期間,會不斷地用到INT 1和INT 3向量,有關計算是通過中斷向量表來完成的。一些病毒還會清空調試寄存器(DRn的內容。有兩種方法達此目的,一是使用系統調用NtGetContextThread和NtSetContextThread。而是引起一個異常,修改線程上下文,然後用新的上下文恢復正常運行,如下所示: push offset handlerpush dword ptr fs:[0]mov fs:[0],espxor eax, eaxdiv eax ;generate exceptionpop fs:[0]add esp, 4;continue execution;...handler:mov ecx, [esp+0Ch] ;skip divadd dword ptr [ecx+0B8h], 2 ;skip divmov dword ptr [ecx+04h], 0 ;clean dr0mov dword ptr [ecx+08h], 0 ;clean dr1mov dword ptr [ecx+0Ch], 0 ;clean dr2mov dword ptr [ecx+10h], 0 ;clean dr3mov dword ptr [ecx+14h], 0 ;clean dr6mov dword ptr [ecx+18h], 0 ;clean dr7xor eax, eaxret上面的第一行代碼將處理程序的偏移量壓入堆棧,以確保當異常被拋出時它自己的處理程序能取得控制權。之後進行相應設置,包括用自己異或自己的方式將eax設為0,以將控制權傳送給該處理程序。div eax 指令會引起異常,因為eax為0,所以AX將被除以零。該處理程序然後跳過除法指令,清空dr0-dr7,同樣也把eax置0,表示異常將被處理,然後恢復運行。9.解除調試器線程我們可以通過系統調用NtSetInformationThread從調試器拆卸線程。為此,將ThreadInformationClass設為0x11(ThreadHideFromDebugger)來調用NtSetInformationThread,如果存在調試器的話,這會將程序的線程從調試器拆下來。以下代碼就是一個例子:push 0push 0push 11h ;ThreadHideFromDebuggerpush -2call NtSetInformationThread在本例中,首先將NtSetInformationThread的參數壓入堆棧,然後調用該函數來把程序的線程從調試器中去掉。這是因為這里的0用於線程的信息長度和線程信息,傳遞的-2用於線程句柄,傳遞的11h用於線程信息類別,這里的值表示ThreadHideFromDebugger。10.解密解密可以通過各種防止調試的方式來進行。有的解密依賴於特定的執行路徑。如果這個執行路徑沒被沿用,比如由於在程序中的某個地方啟動了一個調試器,那麼解密演算法使用的值就會出錯,因此程序就無法正確進行自身的解密。HDSpoof使用的就是這種技術。一些病毒使用堆棧來解密它們的代碼,如果在這種病毒上使用調試器,就會引起解密失敗,因為在調試的時候堆棧為INT 1所用。使用這種技術的一個例子是W95/SK病毒,它在堆棧中解密和構建其代碼;另一個例子是Cascade病毒,它將堆棧指針寄存器作為一個解密密鑰使用。代碼如下所示:lea si, Start ; position to decryptmov sp, 0682 ; length of encrypted bodyDecrypt:xor [si], si ; decryption key/counter 1xor [si], sp ; decryption key/counter 2inc si ; increment one counterdec sp ; decrement the otherjnz Decrypt ; loop until all bytes are decryptedStart: ; Virus body對於Cascade病毒如何使用堆棧指針來解密病毒體,上面代碼中的注釋已經做了很好的說明。相反,Cryptor病毒將其密鑰存儲在鍵盤緩沖區中,這些密鑰會被調試器破壞。Tequila使用解密器的代碼作為解密鑰,因此如果解密器被調試器修改後,那麼該病毒就無法解密了。下面是Tequila用於解密的代碼:perform_encryption_decryption: mov bx,0 mov si,0960 mov cx,0960 mov dl,b[si] xor b[bx],dl inc si inc bx cmp si,09a0 jb 0a61 ;masm mod. needed mov si,0960 loop 0a52 ;masm mod. needed retthe_file_decrypting_routine: push cs pop ds mov bx,4 mov si,0964 mov cx,0960 mov dl,b[si] add b[bx],dl inc si inc bx cmp si,09a4 jb 0a7e ;masm mod. needed mov si,0964 loop 0a6f ;masm mod. needed jmp 0390 ;masm mod. needed人們正在研究可用於將來的新型反調試技術,其中一個項目的課題是關於多處器計算機的,因為當進行調試時,多處理器中的一個會處於閑置狀態。這種新技術使用並行處理技術來解密代碼。二、逆轉錄病毒逆轉錄病毒會設法禁用反病毒軟體,比如可以通過攜帶一列進程名,並殺死正在運行的與表中同名的那些進程。許多逆轉錄病毒還把進程從啟動列表中踢出去,這樣該進程就無法在系統引導期間啟動了。這種類型的惡意軟體還會設法擠占反病毒軟體的CPU時間,或者阻止反病毒軟體連接到反病毒軟體公司的伺服器以使其無法更新病毒庫。三、混合技術W32.Gobi病毒是一個多態逆轉錄病毒,它結合了EPO和其他一些反調試技術。該病毒還會在TCP埠666上打開一個後門。Simile(又名Metaphor)是一個非常有名的復合型病毒,它含有大約14,000行匯編代碼。這個病毒通過尋找API調用ExitProcess()來使用EPO,它還是一個多態病毒,因為它使用多態解密技術。它的90%代碼都是用於多態解密,該病毒的主體和多態解密器在每次感染新文件時,都會放到一個半隨機的地方。Simile的第一個有效載荷只在3月、6月、9月或12月份才會激活。在這些月份的17日變體A和B顯示它們的消息。變體C在這些月份的第18日顯示它的消息。變體A和B中的第二個有效載荷只有在五月14日激活,而變體C中的第二個有效載荷只在7月14日激活。Ganda是一個使用EPO的逆轉錄病毒。它檢查啟動進程列表,並用一個return指令替換每個啟動進程的第一個指令。這會使所有防病毒程序變得毫無用處。四、小結本文中,我們介紹了惡意軟體用以阻礙對其進行逆向工程的若干反調試技術,同時介紹了逆轉錄病毒和各種反檢測技術的組合。我們應該很好的理解這些技術,只有這樣才能夠更有效地對惡意軟體進行動態檢測和分析。

❷ 程序脫殼是什麼意思

殼的概念:
所謂「殼」就是專門壓縮的工具。
這里的壓縮並不是我們平時使用的RAR、ZIP這些工具的壓縮,殼的壓縮指的是針對exe、com、和dll等程序文件進行壓縮,在程序中加入一段如同保護層的代碼,使原程序文件代碼失去本來面目,從而保護程序不被非法修改和反編譯,這段如同保護層的代碼,與自然界動植物的殼在功能上有很多相似的地方,所以我們就形象地稱之為程序的殼。

殼的作用:
1.保護程序不被非法修改和反編譯。
2.對程序專門進行壓縮,以減小文件大小,方便傳播和儲存。

殼和壓縮軟體的壓縮的區別是
壓縮軟體只能夠壓縮程序
而經過殼壓縮後的exe、com和dll等程序文件可以跟正常的程序一樣運行

下面來介紹一個檢測殼的軟體
PEID v0.92
這個軟體可以檢測出 450種殼
新版中增加病毒掃描功能,是目前各類查殼工具中,性能最強的。
另外還可識別出EXE文件是用什麼語言編寫的VC++、Delphi、VB或Delphi等。
支持文件夾批量掃描

我們用PEID對easymail.exe進行掃描
找到殼的類型了
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
說明是UPX的殼
下面進行

步驟2 脫殼
對一個加了殼的程序,去除其中無關的干擾信息和保護限制,把他的殼脫去,解除偽裝,還原軟體本來的面目。這個過程就叫做脫殼。
脫殼成功的標志
脫殼後的文件正常運行,功能沒有損耗。
還有一般脫殼後的文件長度都會大於原文件的長度。
即使同一個文件,採用不同的脫殼軟體進行脫殼,由於脫殼軟體的機理不通,脫出來的文件大小也不盡相同。

關於脫殼有手動脫殼和自動脫殼
自動脫殼就是用專門的脫殼機脫 很簡單 按幾下就 OK了
手動脫殼相對自動脫殼 需要的技術含量微高 這里不多說了

UPX是一種很老而且強大的殼 不過它的脫殼機隨處就能找到
UPX本身程序就可以通過
UPX 文件名 -d
解壓縮 不過這些需要的 命令符中輸入
優點方便快捷 缺點DOS界面
為了讓大家省去麻煩的操作 就產生了一種叫 UPX SHELL的外殼軟體

UPX SHELL v3.09
UPX 外殼程序!
目的讓UPX的脫殼加殼傻瓜化

註:如果程序沒有加殼 那麼我們就可以省去第二步的脫殼了,直接對軟體進行分析了。

脫完後 我們進行

步驟3
運行程序
嘗試注冊
獲取注冊相關信息

通過嘗試注冊 我們發現一個關鍵的字元串

「序列號輸入錯誤」

步驟4
反匯編

反匯編一般用到的軟體 都是 W32Dasm
W32dasm對於新手 易於上手 操作簡單
W32Dasm有很多版本 這里我推薦使用 W32Dasm 無極版

我們現在反匯編WebEasyMail的程序文件easymail.exe

然後看看能不能找到剛才的字元串

步驟5
通過eXeScope這個軟體來查看未能在w32dasm中正確顯示的字元串信息

eXeScope v6.50
更改字體,更改菜單,更改對話框的排列,重寫可執行文件的資源,包括(EXE,DLL,OCX)等。是方便強大的漢化工具,可以直接修改用 VC++ 及 DELPHI 編制的程序的資源,包括菜單、對話框、字元串表等
新版可以直接查看 加殼文件的資源

我們打開eXeScope
找到如下字串符

122,"序列號輸入錯誤 "
123,"恭喜您成為WebEasyMail正式用戶中的一員! "
124,注冊成功
125,失敗

重點是122

步驟6
再次返回 w32dasm

* Possible Reference to String Resource ID=00122: "?鰺e?"

但是雙擊後
提示說找不到這個字串符
不是沒有 是因為 "?鰺e?"是亂碼 w32dasm對於中文顯示不是太好
畢竟不是國產軟體

先把今天會用到的匯編基本指令跟大家解釋一下

mov a,b ;把b的值賦給a,使a=b
call :調用子程序 ,子程序以ret結為
ret :返回主程序
je或jz :若相等則跳轉
jne或jnz :若不相等則跳轉
push xx:xx 壓棧
pop xx:xx 出棧

棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的存儲區。裡面的變數通常是局部變數、函數參數等。

我們搜索
Possible Reference to String Resource ID=00122
因為對E文支持很好
我們來到了

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00406F17(C) //跳轉來自 406F17
|

* Possible Reference to String Resource ID=00125: "1%"
|
:004070DD 6A7D push 0000007D
:004070DF 8D4C2410 lea ecx, dword ptr [esp+10]
:004070E3 E8F75A1200 call 0052CBDF

* Possible Reference to String Resource ID=00122: "?鰺e?"
|
:004070E8 6A7A push 0000007A
:004070EA 8D4C2408 lea ecx, dword ptr [esp+08]
:004070EE E8EC5A1200 call 0052CBDF

我們來到

:00406F01 8B876C080000 mov eax, dword ptr [edi+0000086C]這里是對
:00406F07 8B4C2408 mov ecx, dword ptr [esp+08]
:00406F0B 50 push eax//這兩個eax和ecx入棧就比較讓我們懷疑了
:00406F0C 51 push ecx//產生注冊碼
:00406F0D E8AE381100 call 0051A7C0//這CALL里對注冊位應該會有設置
:00406F12 83C40C add esp, 0000000C
:00406F15 85C0 test eax, eax// 檢測注冊位
:00406F17 0F85C0010000 jne 004070DD //不存在注冊位 就會跳到4070DD就會出現那個錯誤的字串符了

我們記住406F01這個地址

接著進行下一步

步驟7
這一步我們進行的是調試

用到的軟體是ollydbg

好了我們找到了 注冊碼0012AF04 00FD4A10 ASCII ""

但是這個並不是我們的主要目的

我們還要做出屬於自己的注冊機

相信這個是很多人夢寐以求的事情

步驟8
製作注冊機

注冊機我們需要的是一個KEYMAKE的軟體
因為2.0是演示版而且停止更新了
所以我們用1.73版

做一個內存注冊機 需要下面幾個資料

中斷地址:406F0C
中斷次數:1
第一位元組:51
指令長度:1

好了 一個完美的注冊機 就產生了
還不趕快發給你的朋友 炫耀一下
保證讓他迷糊死 佩服得你要死
其實最後還有幾個步驟
就是撰寫破文
不過大家都是新手 這個步驟 就去了吧

不知不覺說了這么多廢話 希望能對大家有些作用
如果有什麼不懂 不理解的事情 請聯系我 或者到論壇發貼
QQ:9595859
MSN:[email protected]
今天的課程就到這里 大家趕快去動手實踐吧~!

--------------------------------------------------------------------------------

-- 作者:admin
-- 發布時間:2005-10-11 11:13:00

-- 實戰查殼脫殼製作破解注冊機最詳細的教程

大家好,我是kcarhc
今天8月1日了 剛從醫院回來 正好凌晨
這期的課程做晚了 這里給大家道個歉
8月1日 如果我沒記錯
是建軍節
既然是建軍節 也要象徵性的弄些東西來
為了建軍節 這期我選擇打擊黑暗勢力--黑社會

那麼今天的主題就是
-----------
迎接建軍節,鏟除黑社會
-----------
首先介紹軟體

黑社會2.0
[功能簡介]:
1 五大必備功能
遠程屏幕; 完全控制; 文件傳送; Telnet; 遠程關機
2 提供IP反彈定位功能
可以通過靜態IP動態域名,網頁文件的方式反彈通知IP.
3 集成vidc客戶端
內網的朋友想用自動上線功能,可以實現了
4 本軟體集成了常用攻擊工具(如OpenTelnet OpenTftp等)
通過IPC拷貝,而且帶有標準的拷貝進度,全球首次面世;
opentelnet就不介紹了,相信大家都知道;
opentftp為本軟體獨創,可以遠程開啟tftp服務;
5 本軟體集成的極速埠掃描器(掃描速度世界領先)
最開始我用的掃描器是大名鼎鼎的SuperScan3.0,感覺速度很慢;
後來改用SSPort1.0 掃描速度有了明顯的提高.
經過速度對比,本軟體掃描速度比SSPort快 1/3 ,是SuperScan的N倍!!!
我的機器是 賽揚700+256M內存,一般掃描速度為180台/秒;
一些號稱可以達到1000台/秒的掃描器在本機上試驗只有120台/秒.
--------------------
准備工作:

安裝黑社會
--------------------
步驟一 查殼

Peid v0.92
ASPack 2.12 -> Alexey Solodovnikov、
--------------------
步驟二 脫殼

手動脫殼

快速脫掉ASPACK所有版本的方法

的OEP關鍵點在下面

0048D3AF 61 POPAD
0048D3B0 75 08 JNZ SHORT 黑社會.0048D3BA
0048D3B2 B8 01000000 MOV EAX,1
0048D3B7 C2 0C00 RETN 0C//402c4a
0048D3BA 68 00000000 PUSH 0

402ca4就是我們要找的OEP

自動脫殼

AspackDie v1.41

這是一個小小的 PE 文件解壓縮器 (EXE, DLL, ...) 她可以解壓縮
自 Aspack 2000 以後的任何 Aspack 版本. 包括:

- Aspack 2000
- Aspack 2001
- Aspack 2.1
- Aspack 2.11
- Aspack 2.11c/d
- Aspack 2.12
- Aspack 2.12a/b
- 一些未知的版本

-------------------
步驟三 試運行程序 發現突破點

看到關鍵字元串
「注冊碼錯誤!」
-------------------
步驟四 W32DASM 尋找突破點

用w32dasm載入已經脫殼的程序
字元串察看
未發現 字元串 而是發現一堆亂碼
大家於是一定想到了第一節的辦法

用EXESCOPE
-------------------
步驟四 察找 字元串

打開eXeScope 並載入 但是發現 都沒有字元串
這項
為啥呢?大家一定會疑問
一般用eXeScope查不到
我們將開始
-------------------
步驟五 查詢軟體的編譯類型

Peid v0.92
Microsoft Visual Basic 5.0 / 6.0
--------------------
步驟六 採用GetVBRes v0.51 對付VB程序

GetVBRes v0.51 一個非常好的VB漢化工具

對於VB程序 我們用專門漢化用的GetVBRes v0.51來對付它
也許有人不理解 為啥用漢化工具呢
其實eXeScope也屬於漢化工具
GetVBRes載入黑社會
發現沒有亂碼了
看到的全是完整的字元
我們找到了
注冊碼錯誤!
這個字元串
接著為了能搞到程序關鍵點地址
我們把「注冊碼錯誤!」
改成111111
為啥改成111111因為111111111
保存修改
---------------------
步驟六 用W32Dasm載入修改後的文件
發現字元串中有111111
那個就是我們修改的 原來是「注冊碼錯誤!」

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004792EF(C)
|
:00479474 B904000280 mov ecx, 80020004
:00479479 B80A000000 mov eax, 0000000A
:0047947E 894D9C mov dword ptr [ebp-64], ecx
:00479481 894DAC mov dword ptr [ebp-54], ecx
:00479484 894DBC mov dword ptr [ebp-44], ecx
:00479487 8D5584 lea edx, dword ptr [ebp-7C]
:0047948A 8D4DC4 lea ecx, dword ptr [ebp-3C]
:0047948D 894594 mov dword ptr [ebp-6C], eax
:00479490 8945A4 mov dword ptr [ebp-5C], eax
:00479493 8945B4 mov dword ptr [ebp-4C], eax

* Possible StringData Ref from Code Obj ->"1111111" //剛才我們看到的注冊嗎錯誤的哦
|
:00479496 C7458C98194100 mov [ebp-74], 00411998
:0047949D C7458408000000 mov [ebp-7C], 00000008

發現跳轉來自到4792EF
安照習慣 我們來到4792EF後 接著向前看
看到一個跳到這里的那個地址
這里是40928C

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00479278(C)
|
:0047928C 8B55E4 mov edx, dword ptr [ebp-1C]

* Reference T MSVBVM60.__vbaStrMove, Ord:0000h
|
:0047928F 8B3578124000 mov esi, dword ptr [00401278]
:00479295 8D4DE0 lea ecx, dword ptr [ebp-20]
:00479298 895DE4 mov dword ptr [ebp-1C], ebx
:0047929B FFD6 call esi
:0047929D 8B4DE8 mov ecx, dword ptr [ebp-18]
:004792A0 6A01 push 00000001
:004792A2 8D55E0 lea edx, dword ptr [ebp-20]
:004792A5 51 push ecx
:004792A6 52 push edx
:004792A7 E8440F0000 call 0047A1F0
:004792AC 8BD0 mov edx, eax
:004792AE 8D4DDC lea ecx, dword ptr [ebp-24]
:004792B1 FFD6 call esi
:004792B3 50 push eax
:004792B4 53 push ebx

* Reference T MSVBVM60.__vbaInStr, Ord:0000h
|
:004792B5 FF15E8114000 Call dword ptr [004011E8]
:004792BB 8BF0 mov esi, eax
:004792BD 8D45E8 lea eax, dword ptr [ebp-18]
:004792C0 F7DE neg esi
:004792C2 8D4DDC lea ecx, dword ptr [ebp-24]
:004792C5 50 push eax
:004792C6 1BF6 sbb esi, esi
:004792C8 8D55E0 lea edx, dword ptr [ebp-20]
:004792CB 51 push ecx
:004792CC 52 push edx
:004792CD F7DE neg esi
:004792CF 6A03 push 00000003
:004792D1 F7DE neg esi

* Reference T MSVBVM60.__vbaFreeStrList, Ord:0000h
|
:004792D3 FF150C124000 Call dword ptr [0040120C]
:004792D9 8D45D4 lea eax, dword ptr [ebp-2C]
:004792DC 8D4DD8 lea ecx, dword ptr [ebp-28]
:004792DF 50 push eax
:004792E0 51 push ecx
:004792E1 6A02 push 00000002

* Reference T MSVBVM60.__vbaFreeObjList, Ord:0000h
|
:004792E3 FF1548104000 Call dword ptr [00401048]
:004792E9 83C41C add esp, 0000001C
:004792EC 663BF3 cmp si, bx
:004792EF 0F847F010000 je 00479474

我們在
004792AC看到下面這些
EAX=0015A47C, (UNICODE "")
EDX=00000000

懷疑EAX為的

為注冊碼
------------------
步驟七 用不確定正確的注冊 嘗試注冊



這個注冊後
我們發現 注冊成功
------------------
步驟八 製做注冊機

Keymake v1.73

中斷地址:4792AC
中斷次數:1
第一位元組:8B
指令長度:2
------------------
步驟九 發布注冊機

找一個網站比如黑基或者你的朋友之間
------------------
步驟十 休息

黑社會終於幹掉了
現在去找你的男朋友或者女朋友
老公或者老婆
找個地方聊聊天 放鬆放鬆
告訴他們 你剛剛把黑社會 擺平了
一定很有趣的
------------------
課程結束
------------------
有事情大家可以去論壇
不過你如果性子急
或者嫌我回復的速度慢
我建議你直接聯系我
只要我在 基本可以馬上給你解答
不在可以留言
我的兩個聯系方式
QQ:9595859
MSN:[email protected]
最後 說一個事
我的女朋友最近生病了
所以才導致這期的課程 這么晚才做出來
希望大家能理解我
我還希望大家能祝福她早日康復
不然的話
你們見到我的日子可能會少了
甚至可能會消失在你們眼前
好了不說了 今天就是到此OVER吧
---------- kcarhc
2004年8月1日 凌晨 沈陽

--------------------------------------------------------------------------------

-- 作者:admin
-- 發布時間:2005-10-11 16:42:00

-- 使用OllyDbg快速脫殼

作者:KU-凌
目標:採用ASPACK、UPX加殼的NOTEPAD.EXE
工具:OllyDbg 1.09英文版、DUMP插件、PEditor
系統:Win98SE
關鍵詞: 脫殼、OllyDbg、OD、DUMP、PUSHAD、POPAD

預備知識
大多數殼都有一個共同的特點。在殼准備開始解壓時都要執行PUSHAD,當殼解壓
完時都要調用POPAD。到底PUSHAD和POPAD是什麼干什麼用的呢?其實PUSHAD是用來將
所有普通寄存器順序進棧的指令,POPAD是所有普通寄存器順序出棧指令。POPAD的出
棧順序和PUSHAD相反。殼為了保護寄存器,便在解壓前將所有寄存器進棧保護起來,
當解壓完成後又將寄存器出棧,恢復其原貌,並將IP設置為原程序的OEP。這樣我們就可以通過這個特點快速脫掉多種軟體的殼。

ASPACK篇
先用ASPACK將NOTEPAD.EXE加殼。用OllyDbg(以下簡稱OD)載入。看見游標停在
殼的入口處。
0040D001 >60PUSHAD ;殼的入口。准備開始解壓,保護寄存器
0040D002E8 03000000CALLNOTEPAD.0040D00A
……
我們不管它,直接向下翻頁找POPAD指令。在40D3AF處找到POPAD
……
0040D3AF61POPAD ;解壓完成,恢復寄存器
0040D3B075 08JNZSHORT NOTEPAD.0040D3BA
0040D3B2B8 01000000MOVEAX, 1
0040D3B7C2 0C00RETN0C
0040D3BA68 CC104000PUSHNOTEPAD.004010CC ;返回到原程序OEP處
0040D3BFC3RETN
……
選定40D3AF這一行,F4運行到此處。在這里說明殼已經完成解壓工作。並且返回到原
程序的入口處。F8單步到4010CC,這里便是原程序的OEP。用DUMP插件直接DUMP出來就可以了(在DUMP時注意將入口點改為10CC,即4010CC-400000=10CC,400000是映象基地址)。文件大小是77059位元組,用PEditor重建PE頭便可以了。未壓縮的文件大小是53248位元組,脫殼後的文件大小是60930位元組。

UPX篇
用UPX將NOTEPAD.EXE加殼,然後用OD載入。停在PUSHAD處,用脫ASPACK同樣的方
法,向下翻頁找POPAD。
……
0040E9FE61POPAD
0040E9FF- E9 C826FFFFJMPNOTEPAD.004010CC
……
下面的JMP就是跳轉到程序的OEP處。F4到40E9FF處,F8單步一下,來到OEP處,DUMP出來。DUMP文件的大小是65536位元組,直接就可以運行。為了完美,用PEditor重建PE頭。那麼脫殼後的文件大小是60293位元組。

後記
用上面說的方法,很多種殼都可以快速的手動脫掉。如果你沒有OD的DUMP插件,
可以到新論壇的下載區找。如果實在沒有,也可以直接停在OEP處用PEDump來DUMP。很久沒有寫東西了。這一篇是寫給初學者練手的。其實殼也是軟體,再怎麼復雜都有可能被脫下來。祝你好運。
另外,轉載時請保持本文的完整。

--------------------------------------------------------------------------------

-- 作者:admin
-- 發布時間:2005-10-11 17:10:00

-- 用Ollydbg手脫EncryptPE V1.2003.5.18加殼的DLL

有兄弟讓看看EncryptPE加殼的DLL,我說新版的就不行了,搞不定的。後來看是EncryptPE V1.2003.5.18舊版加殼的,應該用的是老王老師發布的免費版。呵呵,所以脫了一下,順便記錄過程。
大家可以自己用EncryptPE V1.2003.5.18免費版加個EdrLib.dll看看。

—————————————————————————————————
一、避開IAT加密

設置Ollydbg忽略所有的異常選項。用IsDebug 1.4插件去掉Ollydbg的調試器標志。
添加「同時忽略0EEDFADE、C0000008、009B25C、00953D74」異常。

代碼:--------------------------------------------------------------------------------
00877000 60 pushad//進入OD後停在這
00877001 9C pushfd
00877002 64:FF35 00000000 push dword ptr fs:[0]
00877009 E8 79010000 call EdrLib.00877187
--------------------------------------------------------------------------------

下斷:BP IsDebuggerPresent 斷下後取消斷點
現在我們Ctrl+G:711A0000
為何用這個地址?因為V12003518.EPE是相同的。呵呵,鑽了個舊版的空子。

其實可以再BP GetProcAddress,根據返回地址來判斷。如果返回地址是711XXXXX,說明這是V12003518.EPE的調用,就可以取消斷點Ctrl+F9返回了。具體情況以堆棧的返回地址為准。

現在Ctrl+S 在「整個區段」搜索命令序列:

代碼:--------------------------------------------------------------------------------
mov eax,edi
mov edx,dword ptr ss:[ebp-8]
mov dword ptr ds:[eax],edx
xor eax,eax
--------------------------------------------------------------------------------

找到在711A339F處,我們在711A339F處下個 硬體執行 斷點。
現在我們關閉Ollydbg,重新載入這個dll,直接Shift+F9運行,中斷在711A339F處

代碼:--------------------------------------------------------------------------------
711A339F 8BC7 mov eax,edi
711A33A1 8B55 F8 mov edx,dword ptr ss:[ebp-8]
//改為: mov edx,dword ptr ss:[ebp-4] ★ 正確函數寫入
711A33A4 8910 mov dword ptr ds:[eax],edx
711A33A6 33C0 xor eax,eax
711A33A8 5A pop edx
711A33A9 59 pop ecx
711A33AA 59 pop ecx
711A33AB 64:8910 mov dword ptr fs:[eax],edx
711A33AE EB 0A jmp short V1200351.711A33BA
--------------------------------------------------------------------------------

把711A33A1處修改好之後,取消以前下的711A339F處的斷點。
再Ctrl+S搜索命令序列:

代碼:--------------------------------------------------------------------------------
add ebx,4
mov eax,dword ptr ss:[ebp-4C]
add eax,4
--------------------------------------------------------------------------------

找到在711A43C2處,我們在下面xor eax,eax的711A4401下斷。Shift+F9運行

代碼:--------------------------------------------------------------------------------
711A43C2 83C3 04 add ebx,4
711A43C5 8B45 B4 mov eax,dword ptr ss:[ebp-4C]
711A43C8 83C0 04 add eax,4
711A43CB 8945 B4 mov dword ptr ss:[ebp-4C],eax
711A43CE 8B03 mov eax,dword ptr ds:[ebx]
711A43D0 85C0 test eax,eax
711A43D2 0F87 39FDFFFF ja V1200351.711A4111
711A43D8 A1 74C71B71 mov eax,dword ptr ds:[711BC774]
711A43DD 8038 00 cmp byte ptr ds:[eax],0
711A43E0 75 1F jnz short V1200351.711A4401
711A43E2 8B45 C4 mov eax,dword ptr ss:[ebp-3C]
711A43E5 83C0 14 add eax,14
711A43E8 8945 C4 mov dword ptr ss:[ebp-3C],eax
711A43EB 8B45 C4 mov eax,dword ptr ss:[ebp-3C]
711A43EE 8378 0C 00 cmp dword ptr ds:[eax+C],0
711A43F2 76 0D jbe short V1200351.711A4401
711A43F4 8B45 C4 mov eax,dword ptr ss:[ebp-3C]
711A43F7 8378 10 00 cmp dword ptr ds:[eax+10],0
711A43FB 0F87 38FCFFFF ja V1200351.711A4039//循環處理IAT
711A4401 33C0 xor eax,eax//此處下斷! ★
--------------------------------------------------------------------------------

當我們中斷在711A4401處時IAT已經處理完畢,此時就可以用ImportREC得到正確的輸入表了。
因為EncryptPE後面有自校驗,所以我們返回711A33A1處,點右鍵->撤銷選擇,恢復原來的代碼。

—————————————————————————————————
二、得到重定位表信息、獲得OEP

Ctrl+S 在「整個區段」搜索命令序列:

熱點內容
文件夾自動生成exe 發布:2025-09-20 15:11:45 瀏覽:873
水密碼去角質啫喱如何使用 發布:2025-09-20 15:10:38 瀏覽:473
貪吃蛇代碼java 發布:2025-09-20 15:04:45 瀏覽:815
kindle壓縮 發布:2025-09-20 15:01:16 瀏覽:761
新浪java 發布:2025-09-20 14:54:46 瀏覽:705
好前綴演算法 發布:2025-09-20 14:43:43 瀏覽:621
狀態連接地址伺服器失敗 發布:2025-09-20 14:28:24 瀏覽:207
ftp帶用戶訪問linux 發布:2025-09-20 14:22:41 瀏覽:590
一般程序密碼都在哪裡 發布:2025-09-20 14:19:59 瀏覽:983
android五種布局 發布:2025-09-20 14:15:33 瀏覽:32