當前位置:首頁 » 編程軟體 » 腳本脫殼

腳本脫殼

發布時間: 2022-01-11 06:04:59

linux里文件如何進行文件脫殼

linux很少有需要crack的軟體,所以最近總是自娛自樂。自己寫的軟體自己破著玩但是由於都是知道自己的手段,沒有什麼意思。真的希望有高手們寫些crackme for linux 。
最近看了看windows的脫殼大致的理解了脫殼的原理,之前沒有怎麼接觸脫殼,通常只是選擇沒有殼的軟體看看。在linux下的殼沒有找到幾個。只找到了一個upx的殼,在windows下是個弱殼。實際上在linux下面也是弱殼,完全可以使用"upx -d"的命令解決問題。但我總是喜歡自己手動的。呵呵....純屬於自娛自樂。
ok,開始我們的linux的upx的脫殼之旅.........
我在選擇工具的時候花了很多時間,忽然發現GDB在upx面前是那麼的蒼白無力...也終於知道為什麼有人說GDB不適合做逆向了...雖然軟體在調試器里可以正常於運行,正常下斷。但是根本無法查看反匯編的代碼.......。
無奈無奈....使用傳說中最好的工具 IDA 為此我特地簡單的學習了一下IDC腳本的使用方法...
沒有什麼資料可以參考,是一件很不愉快的事情,因為不知道能不能成功。不管了,一步一步來吧...
我用「upx -d「 脫出了原來的文件,發現文件是全的,沒有任何部分丟失,所以我相信這些文件會出現在進程空間的某個時間的某個角落,這個很大的堅定了我手動脫殼的信心(但是實際上到這篇文章的結尾我也沒有能夠在找到完整的程序文件,但我相信理論上內存空間中應該會出現完整的文件的...)。
我的加殼軟體是我上次文章中用到做外掛的mines(掃雷游戲)。先找到了upx-3.03-i386_linux 軟體 附件中我會給出的免的度這篇文章的人去尋找了。
對我們目標軟體加殼,命令如下,的確是個好用的壓縮殼軟體,直接有54%的壓縮律。
代碼:
[jun@beijihuCom mpupx]$Content$nbsp;./upx mines
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2008
UPX 3.03 Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008
File size Ratio Format Name
-------------------- ------ ----------- -----------
13960 -> 7556 54.13% linux/elf386 mines
Packed 1 file.
[jun@beijihuCom mpupx]$Content$nbsp;
好了,我們開始調試他了,加了殼以後,一般的調試軟體已經對他無能為力了...
實驗一下GDB 和 DDD 的效果...以及objmp
readelf還可以正常使用,(僅限於一部分功能.呵呵,不詳談了...)
代碼:
[jun@beijihuCom mpupx]$Content$nbsp;readelf -e ./mines
ELF Header:
Magic: 7f 45 4c 46 01 01 01 03 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2』s complement, little endian
Version: ; 1 (current)
OS/ABI: UNIX - Linux
ABI Version: 0
Type: EXEC (Executable file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0xc02598
Start of program headers: 52 (bytes into file)
Start of section headers: 0 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 2
Size of section headers: 40 (bytes)
Number of section headers: 0
Section header string table index: 0
There are no sections in this file.
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x00c01000 0x00c01000 0x01d60 0x01d60 R E 0x1000
LOAD 0x0002fc 0x0804b2fc 0x0804b2fc 0x00000 0x00000 RW 0x1000
上面的輸出,我們可以發現他的入口點是0xc02598 這個入口點已經和GCC編譯出來的程序大不一樣了。實際上重「upx -d「脫出來的效果來看,原來的入口點基本上是不會改變的,也就是說我們的手動脫殼的時候軟體的入口點,載入方式都是和未加殼的軟體是一樣的...這一點又為我們的脫殼成功,增加了砝碼..
繼續....gdb 調試一下
代碼:
(gdb) b *0xc02598
Breakpoint 1 at 0xc02598
(gdb) r
Starting program: /home/jun/Crack/mpupx/mines
warning: shared library handler failed to enable breakpoint
(no debugging symbols found)
Breakpoint 1, 0x00c02598 in ?? ()
(gdb) disassemble
No function contains program counter for selected frame.
(gdb)
gdb看不反匯編代碼,暈了都不知道下一步的操作是什麼....看來是沒有什麼用了
祭起傳說中的逆向利器IDA.學西習了一下,簡單操作,我開始了調試之旅.
代碼:
[jun@beijihuCom mpupx]$Content$nbsp;idal ./mines
等到載入完成,會停在入口處,呵呵在游標在call上直接按F4,程序運行,停到了入口出
單步運行...實際上我沒有什麼辦法,不知道有什麼下好的方法下斷點,可以使這個簡單方法調試...
這邊我是這么想的,upx是壓縮殼,當他把執行權交給原目標程序的時候,必定會有一個大的跳轉,好多新手在windows脫殼,都是以這個為oep的標準的。linux應該也不會例外的...
F8單步到0xc025c8 跳到 oxc025d1 在 0xc025d3 又會跳回來。顯然是個循環。不在循環里浪費時間了。我們向下找找,下面有個retn返回。游標移到上面F4。實際上沒有什麼把握。只是蒙的,結果很好,沒有飛走.F8單步到了這里
繼續單步,retn到一個地方
不詳細分析了往下看。翻阿翻,不會這么巧吧.看見了 jmp dword ptr [edi]跳轉,這不會是傳說中的大跳吧。
不管直接F4到這里...哈哈很成功。
單步一下,跳到了這里。
不懂代碼的具體含義,但是明顯不是程序的入口...為什麼?單步....繼續
看到這里我忽然頓悟,這里是在做ld連接,不能讓他運行了,很可能是為了我們目標程序的運行進行共享庫的連接..會修改我們內存中的映像文件。這樣我們mp出來的就不是原來的干凈程序,因為我們沒有修復工具,比起windows裡面的PE修復要麻煩多了.....所以趕緊mp出來...
用來mp映像的idc腳本
代碼:
#include <idc.idc>
#define PT_LOAD 1
#define PT_DYNAMIC 2
static main(void)
{
auto ImageBase,StartImg,EndImg;//基址 08048000
auto e_phoff;
auto e_phnum,p_offset;//paddr 0xc 地址,pmemsz ox14大小,p_offset 0x4
auto i,mpfile;
ImageBase=0x08048000;
StartImg=0x08048000;
EndImg=0x0;
Message("%8x\n",Dword(ImageBase));
if (Dword(ImageBase)==0x7f454c46 || Dword(ImageBase)==0x464c457f )
{
if(mpfile=fopen("./mpfile","w+"))
{
e_phoff=ImageBase+Word(ImageBase+0x1c);
e_phnum=Word(ImageBase+0x2c);
for(i=0;i<e_phnum;i++)
{
if (Dword(e_phoff)==PT_LOAD || Dword(e_phoff)==PT_DYNAMIC)
{ p_offset=Dword(e_phoff+0x4);
StartImg=Dword(e_phoff+0xc);
EndImg=Dword(e_phoff+0xc)+Dword(e_phoff+0x14);
mp(mpfile,StartImg,EndImg,p_offset);
Message("mp LOAD%d ok.\n",i);
}
e_phoff=e_phoff+0x20;
}
fseek(mpfile,0x30,0);
fputc(0x00,mpfile);
fputc(0x00,mpfile);
fputc(0x00,mpfile);
fputc(0x00,mpfile);
fclose(mpfile);
}else Message("mp err.");
}
}
static mp(mpfile,startimg,endimg,offset)
{auto i;
auto size;
size=endimg-startimg;
fseek(mpfile,offset,0);
for ( i=0; i < size; i=i+1 )
{
fputc(Byte(startimg+i),mpfile);
}
}
改變文件的屬性,讓他可以運行。
代碼:
[jun@beijihuCom mpupx]$Content$nbsp;su
口令:
[root@beijihuCom mpupx]# chmod 755 ./mpfile
[root@beijihuCom mpupx]# ./mpfile
程序運行的很好..
總結:第一次在linux下手動脫殼,看上去文章中寫的很輕松,實際上在之前做了很多工作。包括ELF的載入等等。還有我發現如果程序的節表頭程序也能很好的運行,什麼的..
另外,我之調試的時候,實際經過很多挫折...沒有足夠的經驗嘛...不過些文章,截圖的時候都很順利..呵呵.共勉........

⑵ 怎麼給按鍵精靈生成的腳本脫殼

現在彷彿沒有辦法。恩。。。也許有吧。。找按鍵的工程師。
恩。。。。要是你肯出rmb的話。估計不是幾百幾千能搞定的。。。

⑶ ZProtect 1.6的殼怎麼脫求可以用的脫殼程序或者腳本

加密殼麻煩的就是SEH花指令,如果有耐心的話OD絕對可以脫掉,只不過卡死幾次而已

⑷ 我想給1個腳本去殼,不會,除了反匯編 有比較簡單的辦法沒

你確定是腳本?
腳本都是明文顯示的啊,不需要反匯編什麼的,也沒有加殼的概念
腳本頂多是加密。無非就是在腳本開頭加入Unicode編碼標記來生成亂碼,或者是直接用演算法加密整個腳本內容。
前一種用一些高級工具可以直接無視
後一種只能根據腳本自身的解密流程自己去解

如果是PE文件,不會脫殼的話
最簡單的方法也只有上網去下脫殼機了。具體要看加的什麼殼。
但現在殼越來越多,會自己寫殼的人也越來越多,所以脫殼機能自動脫掉的殼越來越少了……

⑸ 求ASProtect的脫殼腳本!!!

00401000 c> 68 01D0DE00 push ccproje.00DED001 ; OD入口處
00401005 E8 01000000 call ccproje.0040100B
0040100A C3 retn
0040100B C3 retn
0040100C 2B02 sub eax,dword ptr ds:[edx]
0040100E 37 aaa
0040100F 8D77 F6 lea esi,dword ptr ds:[edi-A]
00401012 - E1 E8 loopde short ccproje.00400FFC
-------------------------------------------------------------------------------------------------
Aspr2.XX_IATfixer腳本停在OEP了。

016C039C E8 5FFC0600 call 01730000 ; OEP=00040190C
016C03A1 50 push eax
016C03A2 E9 3B060000 jmp 016C09E2
016C03A7 68 85056C01 push 16C0585
016C03AC E8 4FFC0600 call 01730000
016C03B1 52 push edx
016C03B2 E9 98000000 jmp 016C044F
016C03B7 43 inc ebx
016C03B8 E9 5B010000 jmp 016C0518
016C03BD F2: prefix repne:
016C03BE EB 01 jmp short 016C03C1
016C03C0 F0:83C4 08 lock add esp,8 ; 不允許鎖定前綴

Alt+l,查看硬體斷點1位於014FCCB4。
IATstartaddr:00A4115C
IATsize:11F8

OEP=016C039C-400000=012C039C
RVA=00A4115C-400000=0064115C

Volx大俠的腳本已經解決了Asprotect SKE 2.x殼的諸多問題,手動修復stolen code,確實很完美,但本人功底太淺,OEP的前面部分基本還能蒙上,後來就陷在殼里了,還跳不出來,還是等修煉N段時間再嘗試吧。

SYSCOM大俠的教程,採用補區段的方法很適合我們菜鳥,用lordpe區域轉存,mp出程序中stolen code和VM區段,如果不清楚那些是stolen code和VM區段,一看OEP部分在哪個區段,二看殼用到哪幾個區段,不妨多mp些區段備用。

VM Address Size
===========================================================
014D0000 47000 <-ASProtect 解密 CODE 區段
01520000 14000 <-ASProtect 資料 DATA 區段
016C0000 2000 <-OEP Stolen Code
016D0000 2000 <-M1 Stolen Code
016E0000 2000 <-M1 Stolen Code
016F0000 1000 <-M2 Stolen Code
01700000 1000 <-M2 Stolen Code
01710000 1000 <-M2 Stolen Code
01720000 1000 <-M3 Stolen Code
01730000 1000 <-M3 Stolen Code
01740000 1000 <-M3 Stolen Code
===========================================================

這里提醒一下,把mp出的區段附加在mped_後面時,所有VM Address要減去基址,如:
014D0000-400000=10D0000。
把mp出的區段附加完成後,用lordpe修復PE Header。

重新在OD中載入程序,開始處理殼的自校驗。

=================================================================================================

===處理殼自校驗===

感謝SYSCOM大俠的教程,他是這樣描述:
//////////////////////////////////////////////////////////////////////////////////////////////
Route CHECK,算是殼的自我檢查,它是由 A,B 兩數值,作互減運算。

A=GetCurrentThreadID
B=CALL Route Address

運算後 ...
B=B-A

當你脫殼之後,B=會發生錯誤 ERROR 111 ,所以我們只要,抓出正確的 CALL Route Address,就可以通過 CHECK SUM ,也就是在 [ESP+58],的 STACK 位址。所以我們使用
MOV EAX,[ESP+58] ,來還原 B 值 +5 後修正 B 值 Address

9F70CE-MOV EAX,[EAX+34]
9F70D1-CALL EAX => GetCurrentThreadID
9FD0D3-SUB [EBP+C],EAX => B=B-A
9FD0D6-MOV EAX,[ENP+C]
//////////////////////////////////////////////////////////////////////////////////////////////

014F8A58 /EB 01 jmp short mped_1.014F8A5B ; ①↓014F8A5B
014F8A5A |698B 73308B7B 14A1>imul ecx,dword ptr ds:[ebx+7B8B3073],37>
014F8A64 50 push eax
014F8A65 018B 4034FFD0 add dword ptr ds:[ebx+D0FF3440],ecx
014F8A6B 2945 0C sub dword ptr ss:[ebp+C],eax
014F8A6B 2945 0C sub dword ptr ss:[ebp+C],eax
014F8A6E 8B45 0C mov eax,dword ptr ss:[ebp+C]
014F8A71 2B43 18 sub eax,dword ptr ds:[ebx+18]
014F8A74 2B43 68 sub eax,dword ptr ds:[ebx+68]
014F8A77 8945 FC mov dword ptr ss:[ebp-4],eax
014F8A7A 8D43 24 lea eax,dword ptr ds:[ebx+24]
014F8A7D 8945 F8 mov dword ptr ss:[ebp-8],eax
014F8A80 85FF test edi,edi
014F8A82 76 38 jbe short mped_1.014F8ABC
014F8A84 EB 01 jmp short mped_1.014F8A87
014F8A86 C7 ??? ; 未知命令
014F8A87 8B45 F8 mov eax,dword ptr ss:[ebp-8]
014F8A8A 0FB600 movzx eax,byte ptr ds:[eax]
014F8A8D 8B5483 40 mov edx,dword ptr ds:[ebx+eax*4+40]
014F8A91 8BC6 mov eax,esi
014F8A93 FFD2 call edx
014F8A95 3B45 FC cmp eax,dword ptr ss:[ebp-4]
014F8A98 75 1A jnz short mped_1.014F8AB4
014F8A9A 8B45 10 mov eax,dword ptr ss:[ebp+10]
014F8A9D 50 push eax
014F8A9E 8B45 14 mov eax,dword ptr ss:[ebp+14]
014F8AA1 50 push eax
014F8AA2 E8 19FAFFFF call mped_1.014F84C0
014F8AA7 50 push eax
014F8AA8 8BCE mov ecx,esi
014F8AAA 8B55 18 mov edx,dword ptr ss:[ebp+18]
014F8AAD 8BC3 mov eax,ebx
014F8AAF E8 D4FDFFFF call mped_1.014F8888
014F8AB4 4F dec edi
014F8AB5 0373 6C add esi,dword ptr ds:[ebx+6C]
014F8AB8 85FF test edi,edi
014F8ABA ^ 77 CB ja short mped_1.014F8A87
014F8ABC 68 D88A4F01 push mped_1.014F8AD8 ; ASCII "111"
014F8AC1 E8 66C3FEFF call mped_1.014E4E2C

由014F8A58跳到這里。
014F8A5B 8B73 30 mov esi,dword ptr ds:[ebx+30] ; mped_1.016C10F9
014F8A5E 8B7B 14 mov edi,dword ptr ds:[ebx+14]
014F8A61 A1 F0375001 mov eax,dword ptr ds:[15037F0]
014F8A66 8B40 34 mov eax,dword ptr ds:[eax+34] ; 從這里開始修改。
014F8A69 FFD0 call eax
014F8A6B 2945 0C sub dword ptr ss:[ebp+C],eax
014F8A6E 8B45 0C mov eax,dword ptr ss:[ebp+C]
014F8A71 2B43 18 sub eax,dword ptr ds:[ebx+18]
014F8A74 2B43 68 sub eax,dword ptr ds:[ebx+68]
014F8A77 8945 FC mov dword ptr ss:[ebp-4],eax

二進制
90 90 8B 44 24 58 83 E8 05 90 90

修改後的代碼,保存文件。
014F8A5B 8B73 30 mov esi,dword ptr ds:[ebx+30] ; mped_1.016C10F9
014F8A5E 8B7B 14 mov edi,dword ptr ds:[ebx+14]
014F8A61 A1 F0375001 mov eax,dword ptr ds:[15037F0]
014F8A66 90 nop
014F8A67 90 nop
014F8A68 8B4424 58 mov eax,dword ptr ss:[esp+58]
014F8A6C 83E8 05 sub eax,5
014F8A6F 90 nop
014F8A70 90 nop
014F8A71 2B43 18 sub eax,dword ptr ds:[ebx+18]
014F8A74 2B43 68 sub eax,dword ptr ds:[ebx+68]
014F8A77 8945 FC mov dword ptr ss:[ebp-4],eax

F9,開始運行,軟體界面一閃後,程序退出了,看來還有自校驗。
================================================================================================

===處理文件自校驗===

重新載入程序,下斷點 BP GetFileSize。

F9大約8次,注意程序返回到本地領空,F8步進。
===================================================================
0012FA50 005BD602 /CALL 到 GetFileSize 來自 mped_1.005BD5FD
0012FA54 000001B0 |hFile = 000001B0 (window)
0012FA58 00000000 \pFileSizeHigh = NULL
===================================================================
斷在這里。
7C810C8F k> 8BFF mov edi,edi
7C810C91 55 push ebp
7C810C92 8BEC mov ebp,esp
7C810C94 51 push ecx
7C810C95 51 push ecx
7C810C96 8D45 F8 lea eax,dword ptr ss:[ebp-8]
7C810C99 50 push eax
7C810C9A FF75 08 push dword ptr ss:[ebp+8]
7C810C9D E8 7FFFFFFF call kernel32.GetFileSizeEx
7C810CA2 85C0 test eax,eax
7C810CA4 ^ 0F84 EA8FFFFF je kernel32.7C809C94

繼續跟蹤,來到這里,修改0040B43E。

0040B437 E8 5C211B00 call mped_1.005BD598
0040B43C 84C0 test al,al
0040B43E 75 5E jnz short mped_1.0040B49E ; 修改jnz-->jmp
0040B440 33DB xor ebx,ebx
0040B442 EB 4C jmp short mped_1.0040B490
0040B444 8BD3 mov edx,ebx
0040B446 A1 F879A300 mov eax,dword ptr ds:[_mainform]
0040B44B E8 18B54000 call mped_1.00816968
0040B450 8B15 14227500 mov edx,dword ptr ds:[752214] ; umped_1.Tbx::TTBXItem::
0040B456 E8 6D894A00 call mped_1.008B3DC8
0040B45B 85C0 test eax,eax
0040B45D 74 30 je short mped_1.0040B48F
0040B45F 8BD3 mov edx,ebx
0040B461 A1 F879A300 mov eax,dword ptr ds:[_mainform]
0040B466 E8 FDB44000 call mped_1.00816968
0040B46B 8B15 14227500 mov edx,dword ptr ds:[752214] ; umped_1.Tbx::TTBXItem::
0040B471 E8 52894A00 call mped_1.008B3DC8

F9,運行很暢快,脫殼過程算是結束了。

我的破解過程,發表過多次了。哪裡不明白在覓我

⑹ 如何使用脫殼腳本

脫殼腳本格式有TXT格式的,有OSC格式的,都是要在OD中載入的,通常在OD中先載入要脫殼的EXE文件,然後選擇針對該EXE的脫殼腳本,然後運行OD,就可以了。但是腳本不是萬能的,一個加殼文件通常有好幾種脫殼腳本如Asprotect、Execryptor、Themida等。

⑺ 怎麼用腳本脫殼

去飯客看看啊,那裡絕對有你想要的答案的!

⑻ 怎麼裝載themida 的脫殼腳本

從LZ口氣得知: themida 還不是你現在可以玩得定的... 有腳本也難行走... 絕對真話... 這個殼多數靠跑腳本還不行,還是需要得手工玩玩~

⑼ 我下了700多個脫殼腳本,但是不知道怎麼使用~

會用OD吧,打開OD點「插件」,在下拉菜單中就會發現一個ODBGscript,在它的子菜單里有一個「run script」,點它,就會提示你給出腳本所在的路徑,接下來就是運行相應的腳本進行你想要做的事了。

熱點內容
好醫生連鎖店密碼多少 發布:2024-09-20 05:09:38 瀏覽:14
魔獸腳本代理 發布:2024-09-20 05:09:35 瀏覽:96
python登陸網頁 發布:2024-09-20 05:08:39 瀏覽:755
安卓qq飛車如何轉蘋果 發布:2024-09-20 04:54:30 瀏覽:177
存儲過程中in什麼意思 發布:2024-09-20 04:24:20 瀏覽:314
php顯示數據 發布:2024-09-20 03:48:38 瀏覽:499
源碼安裝軟體 發布:2024-09-20 03:44:31 瀏覽:353
入門編程游戲的書 發布:2024-09-20 03:31:26 瀏覽:235
e盒的演算法 發布:2024-09-20 03:30:52 瀏覽:143
win10登錄密碼如何修改登錄密碼 發布:2024-09-20 03:09:43 瀏覽:70