當前位置:編程學習大全網 - 源碼下載 - 程序脫殼是什麽意思?

程序脫殼是什麽意思?

殼的概念:

所謂“殼”就是專門壓縮的工具。

這裏的壓縮並不是我們平時使用的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 "04893e058f9c1c9fb16764c3b86f78e6"

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

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

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

步驟8

制作註冊機

註冊機我們需要的是壹個KEYMAKE的軟件

因為2.0是演示版而且停止更新了

所以我們用1.73版

做壹個內存註冊機 需要下面幾個資料

中斷地址:406F0C

中斷次數:1

第壹字節:51

指令長度:1

好了 壹個完美的註冊機 就產生了

還不趕快發給妳的朋友 炫耀壹下

保證讓他迷糊死 佩服得妳要死

其實最後還有幾個步驟

就是撰寫破文

不過大家都是新手 這個步驟 就去了吧

不知不覺說了這麽多廢話 希望能對大家有些作用

如果有什麽不懂 不理解的事情 請聯系我 或者到論壇發貼

QQ:9595859

MSN:kcarhc@163.com

今天的課程就到這裏 大家趕快去動手實踐吧~!

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

-- 作者: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 "1000464401458371268751252821609291844811465000")

EDX=00000000

懷疑EAX為的

1000464401458371268751252821609291844811465000

為註冊碼

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

步驟七 用不確定正確的註冊 嘗試註冊

1000464401458371268751252821609291844811465000

這個註冊後

我們發現 註冊成功

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

步驟八 制做註冊機

Keymake v1.73

中斷地址:4792AC

中斷次數:1

第壹字節:8B

指令長度:2

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

步驟九 發布註冊機

找壹個網站比如黑基或者妳的朋友之間

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

步驟十 休息

黑社會終於幹掉了

現在去找妳的男朋友或者女朋友

老公或者老婆

找個地方聊聊天 放松放松

告訴他們 妳剛剛把黑社會 擺平了

壹定很有趣的

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

課程結束

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

有事情大家可以去論壇

不過妳如果性子急

或者嫌我回復的速度慢

我建議妳直接聯系我

只要我在 基本可以馬上給妳解答

不在可以留言

我的兩個聯系方式

QQ:9595859

MSN:kcarhc@163.com

最後 說壹個事

我的女朋友最近生病了

所以才導致這期的課程 這麽晚才做出來

希望大家能理解我

我還希望大家能祝福她早日康復

不然的話

妳們見到我的日子可能會少了

甚至可能會消失在妳們眼前

好了不說了 今天就是到此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 > 60       PUSHAD ;殼的入口。準備開始解壓,保護寄存器

0040D002  E8 03000000  CALL  NOTEPAD.0040D00A

……

我們不管它,直接向下翻頁找POPAD指令。在40D3AF處找到POPAD

……

0040D3AF  61       POPAD ;解壓完成,恢復寄存器

0040D3B0  75 08     JNZ  SHORT NOTEPAD.0040D3BA

0040D3B2  B8 01000000  MOV  EAX, 1

0040D3B7  C2 0C00    RETN  0C

0040D3BA  68 CC104000  PUSH  NOTEPAD.004010CC ;返回到原程序OEP處

0040D3BF  C3       RETN

……

選定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。

……

0040E9FE  61       POPAD

0040E9FF - E9 C826FFFF  JMP  NOTEPAD.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 在“整個區段”搜索命令序列:

  • 上一篇:如何將兩套監控系統合並到壹個軟件當中
  • 下一篇:416源代碼
  • copyright 2024編程學習大全網