編譯vbox61-ag真人国际官网
1. 程序脫殼是什麼意思
殼的概念:
所謂「殼」就是專門壓縮的工具。
這里的壓縮並不是我們平時使用的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 在「整個區段」搜索命令序列: