首頁>Club>
6
回覆列表
  • 1 # 使用者4784282019406

    想要脫VMP的殼,首要工作當然是要找一個強OD啦!至於是什麼版本的OD自己多試驗幾個,網上大把大把的,一般來說只要載入了你想脫的VMP加殼程式不關閉都可以。

    其次就是StrongOD.dll這個外掛了,現在用的比較多的就是海風月影,同樣網上也是大把大把的。下載回來後複製到你的OD程式所在的資料夾裡面的plugin裡。StrongOD的設定選項搞不懂就全部打鉤。

    接下來要做的工作就是搞清楚我們要脫殼的程式程式設計的語言了,可以用PEID或者fastscanner檢視,如果在這裡看不到也可以在OD載入以後透過裡面的字串判斷了。例如VB的程式會出現MSVB----/VC的會出現MSVC---等等。這些都是程式執行所需要的windows連結檔案。

    做完這些預備工作接下來當然是用OD載入檔案啦。檔案載入後在反彙編視窗CTRL+G搜尋VirtualProtect(注意V跟P要大寫,至於為什麼要搜尋這個別問我)。一般來說搜尋的結果會出現以下的類似:

    7C801AE3 E8 75FFFFFF call kernel32.VirtualProtectEx

    我們在這裡下F2斷點。然後F9執行到我們下的這個斷點。接下來我們就要注意觀察堆疊視窗了。一般來說當我們F9執行到我們上面下的斷點的時候在堆疊視窗會出現以下類似:

    0012F66C 00401000 |Address = TradeCen.00401000

    0012F670 000280D1 |Size = 280D1 (164049.)

    0012F674 00000004 |NewProtect = PAGE_READWRITE

    0012F678 0012FF98 \pOldProtect = 0012FF98

    我們要注意觀察的就是在接下來我們F9執行的時候,ADDRESS和NEWPROTECT這兩行的變化。按F9-速度別太快,直到NewProtect項變為PAGE_READONLY,這時候程式就釋放完畢了。

    0012F66C 0042A000 |Address = TradeCen.0042A000

    0012F670 000069DE |Size = 69DE (27102.)

    0012F674 00000002 |NewProtect = PAGE_READONLY

    0012F678 0012FF98 \pOldProtect = 0012FF98

    現在可以取消剛才我們下的斷點了。接下來就是找OEP了。找OEP的時候我個人的一個經驗就是OEP一般就在接近上面的ADDRESS地址的附近。例如上面的地址是0042A000,我一般就在這個基礎上減到420000搜尋程式的特徵段,當然我們也可以直接跳到401000開始搜尋。雖然我們搜尋的範圍比較大,但是因為我們搜尋的是命令序列,所以工作量還不是很大。

    廢話不多說,CTRL+G--上面的地址,然後CTRL+S 查詢命令序列。命令序列的內容就是我們用查到的程式語言的特徵段。我們可以在特徵段裡面選擇兩三句固定不變的命令查詢。例如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

    我們可以只搜尋前三條命令。找到符合前三條命令的,我們在對照接下來的命令。只要命令相符那這個地址八九不離十就是OEP了。如果在ADDRESS地址附近找不到OEP,那就只好用笨辦法,從401000開始找吧。

    找到OEP地址後,我們在OEP處點滑鼠右鍵《此處為新EIP》。接下來就可以dump啦。通常選擇OD的dump外掛脫殼要好點,用loadpe脫殼後要麼程式不執行要麼乾脆沒脫。用OD的dump外掛脫殼的時候,脫殼視窗下面的(重建輸入表)項前面的勾一定要去掉,這個也是前輩總結的經驗。

    到此脫殼就結束了。可以試驗一下脫殼後的程式了。能執行說明它在70-80%的範圍,不能執行的話那也是我還在學習的內容,大家共同探討!

    以下是主要幾種程式語言的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

  • 中秋節和大豐收的關聯?
  • 你有什麼刻骨銘心的記憶?