日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

VMP脫殼步驟

 hjd7578 2023-04-11 發(fā)布于廣西
    想要脫VMP的殼,首要工作當(dāng)然是要找一個(gè)強(qiáng)OD啦!至于是什么版本的OD自己多試驗(yàn)幾個(gè),網(wǎng)上大把大把的,一般來說只要加載了你想脫的VMP加殼程序不關(guān)閉都可以。     
 
其次就是StrongOD.dll這個(gè)插件了,現(xiàn)在用的比較多的就是海風(fēng)月影,同樣網(wǎng)上也是大把大把的。下載回來后復(fù)制到你的OD程序所在的文件夾里面的plugin里。StrongOD的設(shè)置選項(xiàng)搞不懂就全部打鉤。     
 
接下來要做的工作就是搞清楚我們要脫殼的程序編程的語言了,可以用PEID或者fastscanner查看,如果在這里看不到也可以在OD載入以后通過里面的字符串判斷了。例如VB的程序會(huì)出現(xiàn)MSVB----/VC的會(huì)出現(xiàn)MSVC---等等。這些都是程序運(yùn)行所需要的windows鏈接文件。
 
     做完這些預(yù)備工作接下來當(dāng)然是用OD載入文件啦。文件載入后在反匯編窗口CTRL+G搜索VirtualProtect(注意V跟P要大寫,至于為什么要搜索這個(gè)別問我)。一般來說搜索的結(jié)果會(huì)出現(xiàn)以下的類似:     

7C801AE3 E8 75FFFFFF call kernel32.VirtualProtectEx  

 我們在這里下F2斷點(diǎn)。然后F9運(yùn)行到我們下的這個(gè)斷點(diǎn)。接下來我們就要注意觀察堆棧窗口了。一般來說當(dāng)我們F9運(yùn)行到我們上面下的斷點(diǎn)的時(shí)候在堆棧窗口會(huì)出現(xiàn)以下類似: 
0012F66C   00401000  |Address = TradeCen.00401000 
0012F670   000280D1  |Size = 280D1 (164049.) 
0012F674   00000004  |NewProtect = PAGE_READWRITE 
0012F678   0012FF98  \pOldProtect = 0012FF98     
我們要注意觀察的就是在接下來我們F9運(yùn)行的時(shí)候,ADDRESS和NEWPROTECT這兩行的變化。按F9-速度別太快,直到NewProtect項(xiàng)變?yōu)?span style="color: rgb(0, 0, 255); line-height: 28px;">PAGE_READONLY,這時(shí)候程序就釋放完畢了。 
0012F66C   0042A000  |Address = TradeCen.0042A000 
0012F670   000069DE  |Size = 69DE (27102.) 
0012F674   00000002  |NewProtect = PAGE_READONLY 
0012F678   0012FF98  \pOldProtect = 0012FF98     
現(xiàn)在可以取消剛才我們下的斷點(diǎn)了。接下來就是找OEP了。
找OEP的時(shí)候我個(gè)人的一個(gè)經(jīng)驗(yàn)就是OEP一般就在接近上面的ADDRESS地址的附近。
例如上面的地址是0042A000,我一般就在這個(gè)基礎(chǔ)上減到420000搜索程序的特征段,當(dāng)然我們也可以直接跳到401000開始搜索。雖然我們搜索的范圍比較大,但是因?yàn)槲覀兯阉鞯氖敲钚蛄校怨ぷ髁窟€不是很大。
      廢話不多說,CTRL+G--上面的地址,然后CTRL+S 查找命令序列。命令序列的內(nèi)容就是我們用查到的編程語言的特征段。我們可以在特征段里面選擇兩三句固定不變的命令查找。
例如VC++6.0的特征段是  
0046C07B U>  55                push ebp 
0046C07C     8BEC              mov ebp,esp 
0046C07E     6A FF             push -1 
0046C080     68 18064C00       push UltraSna.004C0618 
0046C085     68 F8364700       push UltraSna.004736F8 
0046C08A     64:A1 00000000    mov eax,dword ptr fs:[0] 
0046C090     50                push eax 
0046C091     64:8925 00000000  mov dword ptr fs:[0],esp 
0046C098     83EC 58           sub esp,58 
0046C09B     53                push ebx 
0046C09C     56                push esi 
0046C09D     57                push edi    
我們可以只搜索前三條命令。找到符合前三條命令的,我們在對照接下來的命令。只要命令相符那這個(gè)地址八九不離十就是OEP了。如果在ADDRESS地址附近找不到OEP,那就只好用笨辦法,從401000開始找吧。
 
     找到OEP地址后,我們在OEP處點(diǎn)鼠標(biāo)右鍵《此處為新EIP》。接下來就可以dump啦。通常選擇OD的dump插件脫殼要好點(diǎn),用loadpe脫殼后要么程序不運(yùn)行要么干脆沒脫。
用OD的dump插件脫殼的時(shí)候,脫殼窗口下面的(重建輸入表)項(xiàng)前面的勾一定要去掉,這個(gè)也是前輩總結(jié)的經(jīng)驗(yàn)。    
 到此脫殼就結(jié)束了??梢栽囼?yàn)一下脫殼后的程序了。能運(yùn)行說明它在70-80%的范圍,不能運(yùn)行的話那也是我還在學(xué)習(xí)的內(nèi)容,大家共同探討!     
 
以下是主要幾種編程語言的OEP特征段: 
Borland C++  
0040163C B> /EB 10             jmp short Borland_.0040164E 
0040163E    |66:623A           bound di,dword ptr ds:[edx] 
00401641    |43                inc ebx 
00401642    |2B2B              sub ebp,dword ptr ds:[ebx] 
00401644    |48                dec eax 
00401645    |4F                dec edi 
00401646    |4F                dec edi 
00401647    |4B                dec ebx 
00401648    |90                nop 
00401649   -|E9 98E04E00       jmp SHELL32.008EF6E6 
0040164E    \A1 8BE04E00       mov eax,dword ptr ds:[4EE08B] 
00401653     C1E0 02           shl eax,2 
00401656     A3 8FE04E00       mov dword ptr ds:[4EE08F],eax 
0040165B     52                push edx 
0040165C     6A 00             push 0 
0040165E     E8 DFBC0E00       call <jmp.&KERNEL32.GetModuleHandleA>  
********************************************************************************** 
Delphi  
00458650 D>  55                push ebp 
00458651     8BEC              mov ebp,esp 
00458653     83C4 F0           add esp,-10 
00458656     B8 70844500       mov eax,Delphi.00458470 
0045865B     E8 00D6FAFF       call Delphi.00405C60 
00458660     A1 58A14500       mov eax,dword ptr ds:[45A158] 
00458665     8B00              mov eax,dword ptr ds:[eax] 
00458667     E8 E0E1FFFF       call Delphi.0045684C 
0045866C     A1 58A14500       mov eax,dword ptr ds:[45A158] 
00458671     8B00              mov eax,dword ptr ds:[eax] 
00458673     BA B0864500       mov edx,Delphi.004586B0 
00458678     E8 DFDDFFFF       call Delphi.0045645C 
0045867D     8B0D 48A24500     mov ecx,dword ptr ds:[45A248]            ; Delphi.0045BC00 
00458683     A1 58A14500       mov eax,dword ptr ds:[45A158] 
00458688     8B00              mov eax,dword ptr ds:[eax] 
0045868A     8B15 EC7D4500     mov edx,dword ptr ds:[457DEC]            ; Delphi.00457E38 
00458690     E8 CFE1FFFF       call Delphi.00456864 
00458695     A1 58A14500       mov eax,dword ptr ds:[45A158] 
0045869A     8B00              mov eax,dword ptr ds:[eax] 
0045869C     E8 43E2FFFF       call Delphi.004568E4 
********************************************************************************** 
Visual C++ 6.0  
0046C07B U>  55                push ebp 
0046C07C     8BEC              mov ebp,esp 
0046C07E     6A FF             push -1 
0046C080     68 18064C00       push UltraSna.004C0618 
0046C085     68 F8364700       push UltraSna.004736F8 
0046C08A     64:A1 00000000    mov eax,dword ptr fs:[0] 
0046C090     50                push eax 
0046C091     64:8925 00000000  mov dword ptr fs:[0],esp 
0046C098     83EC 58           sub esp,58 
0046C09B     53                push ebx 
0046C09C     56                push esi 
0046C09D     57                push edi 
0046C09E     8965 E8           mov dword ptr ss:[ebp-18],esp 
0046C0A1     FF15 74824A00     call dword ptr ds:[<&KERNEL32.GetVersion>]  ; kernel32.GetVersion 
0046C0A7     33D2              xor edx,edx 
0046C0A9     8AD4              mov dl,ah 
0046C0AB     8915 403F4F00     mov dword ptr ds:[4F3F40],edx 
0046C0B1     8BC8              mov ecx,eax 
0046C0B3     81E1 FF000000     and ecx,0FF 
0046C0B9     890D 3C3F4F00     mov dword ptr ds:[4F3F3C],ecx 
********************************************************************************** 
Visual C++ 7.0  
0100739D > $  6A 70         push 0x70 
0100739F   .  68 98180001   push NOTEPAD.01001898 
010073A4   .  E8 BF010000   call NOTEPAD.01007568 
010073A9   .  33DB          xor ebx,ebx 
**********************************************************************************  
匯編  
00401000 匯>  6A 00            push 0 
00401002     E8 C50A0000       call <jmp.&KERNEL32.GetModuleHandleA> 
00401007     A3 0C354000       mov dword ptr ds:[40350C],eax 
0040100C     E8 B50A0000       call <jmp.&KERNEL32.GetCommandLineA> 
00401011     A3 10354000       mov dword ptr ds:[403510],eax 
00401016     6A 0A             push 0A 
00401018     FF35 10354000     push dword ptr ds:[403510] 
0040101E     6A 00             push 0 
00401020     FF35 0C354000     push dword ptr ds:[40350C] 
00401026     E8 06000000       call 匯編.00401031 
0040102B     50                push eax 
0040102C     E8 8F0A0000       call <jmp.&KERNEL32.ExitProcess> 
00401031     55                push ebp 
00401032     8BEC              mov ebp,esp 
00401034     83C4 B0           add esp,-50 
00401037     C745 D0 30000000  mov dword ptr ss:[ebp-30],30 
0040103E     C745 D4 0B000000  mov dword ptr ss:[ebp-2C],0B 
00401045     C745 D8 37114000  mov dword ptr ss:[ebp-28],匯編.00401137 
********************************************************************************** 
VB 
0040116C V>/$  68 147C4000     push VB.00407C14 
00401171   |.  E8 F0FFFFFF     call <jmp.&MSVBVM60.#100> 
00401176   |.  0000            add byte ptr ds:[eax],al 
00401178   |.  0000            add byte ptr ds:[eax],al 
0040117A   |.  0000            add byte ptr ds:[eax],al 
0040117C   |.  3000            xor byte ptr ds:[eax],al

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約