轉(zhuǎn)帖|使用教程|編輯:楊鵬連|2021-06-17 13:55:31.100|閱讀 806 次
概述:?看了網(wǎng)上大神們寫了好多的vmp 虛擬代碼的分析 ,但是在對實(shí)在項(xiàng)目時(shí),插件總是提示不對或者未知版本,一直對vm代碼的還原有質(zhì)疑,于是就萌發(fā)了具體分析這個(gè)vm代碼是怎么回事,若有錯(cuò)誤,歡迎指出,能力有限只能分析皮毛,只談vm的代碼。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
VMProtect是一種很可靠的工具,可以保護(hù)應(yīng)用程序代碼免受分析和破解,但只有在應(yīng)用程序內(nèi)保護(hù)機(jī)制正確構(gòu)建且沒有可能破壞整個(gè)保護(hù)的嚴(yán)重錯(cuò)誤的情況下,才能實(shí)現(xiàn)最好的效果。
VMProtect通過在具有非標(biāo)準(zhǔn)體系結(jié)構(gòu)的虛擬機(jī)上執(zhí)行代碼來保護(hù)代碼,這將使分析和破解軟件變得十分困難。除此之外,VMProtect還可以生成和驗(yàn)證序列號,限制免費(fèi)升級等等。
VMProtect正版授權(quán)在線訂購享受最低價(jià),僅售801元起!還不趕緊加入你的訂購清單?>>更多詳情可點(diǎn)擊咨詢購買
相關(guān)鏈接:
代碼保護(hù)軟件VMP逆向分析虛擬機(jī)指令:初步認(rèn)識與環(huán)境搭建
二、VM代碼的提取
承接上文,我們寫了個(gè)例子,然后用vmp3.3.1加殼程序把那4句匯編代碼給VM了,那么VM的代碼是哪里到哪里,我們用OD的run trace去跟蹤提取。操作如下:
1.首先下2個(gè)斷點(diǎn) 在準(zhǔn)備進(jìn)入VM代碼和退出VM代碼執(zhí)行未VM代碼位置下斷點(diǎn)
2.然后我們按F9到達(dá)我們第一個(gè)斷點(diǎn) 在按快捷鍵Ctrl+F11 跟蹤步入 然后到我們的第二個(gè)斷點(diǎn),這個(gè)時(shí)候 我們查看我們r(jià)un trace查看追蹤出的信息 然后右鍵關(guān)閉記錄文件 下圖是記錄的跟蹤信息
然后看看保存的跟蹤文件大概是這個(gè)樣子 我有處理過
那么到現(xiàn)在我們就把vm后的代碼給扒下來了 之后我們只要好好分析這個(gè)文件就OK了
下面我們先搜索一下我們之前vm的匯編中的常量 我們先搜索第一個(gè) 1111 為什么是00001111就不多解釋了0041DB98 Main BSWAP ECX ; ECX=00001111 0041DB9A Main RCR AH,CL 0041DB9C Main OR EAX,EBP ; EAX=0041DBFF 0041DB9E Main NEG AX ; EAX=00412401 0041DBA1 Main XOR EBX,ECX ; EBX=0046B588 0041DBA3 Main BSR EAX,ESP ; EAX=00000014 0041DBA6 Main SUB EDI,4 ; EDI=0012FF88 0041DBAC Main LAHF ; EAX=00000614 0041DBAD Main MOV DWORD PTR DS:[EDI],ECX我們?nèi)ヒ幌禄煜?/span>
0041DB98 Main BSWAP ECX ; ECX=00001111 0041DBA6 Main SUB EDI,4 ; EDI=0012FF88 0041DBAD Main MOV DWORD PTR DS:[EDI],ECX就這3句有用的 得到00001111 怎么來的我們先不深究 EDI-=4 然后在向 [EDI]=ECX 這個(gè)像不像是壓棧的操作,棧的增長方向是向下的是吧 棧頂減小就是壓棧 (思考一下 那有沒有棧頂減小的是出棧呢)。回到上文(一、認(rèn)識與環(huán)境搭建)中我們說了ebp是代表?xiàng)#珽DI是跳轉(zhuǎn)基址(JumpBase),怎么現(xiàn)在又說這個(gè)EDI是代表?xiàng)A恕D蔽覀冊谕驴纯?/span>
0041DBBF Main MOV EAX,DWORD PTR DS:[ESI] ; EAX=1AB34C77 0041DBC1 Main CMP EDX,EDX 0041DBC3 Main XOR EAX,EBX ; EAX=1AF5F9FF 0041DBC5 Main JMP vmptest_.0046A2FF 0046A2FF Main BSWAP EAX ; EAX=FFF9F51A 0046A301 Main JMP vmptest_.00476E95 00476E95 Main DEC EAX ; EAX=FFF9F519 00476E96 Main NOT EAX ; EAX=00060AE6 00476E98 Main JMP vmptest_.0044E862 0044E862 Main DEC EAX ; EAX=00060AE5 0044E863 Main XOR EBX,EAX ; EBX=0040BF6D 0044E865 Main JMP vmptest_.0041F316 0041F316 Main ADD EBP,EAX ; EBP=0047E65C 0041F318 Main JMP vmptest_.00472E41 00472E41 Main LEA EDX,DWORD PTR SS:[ESP+60] ; EDX=0012FF00 00472E45 Main TEST DH,AL 00472E47 Main CLC 00472E48 Main CMP EDI,EDX 00472E4A Main JMP vmptest_.0046EE86 0046EE86 Main JA vmptest_.00480A05 00480A05 Main JMP EBP很亂我們?nèi)セ煜幌?/span>
0041DBBF Main MOV EAX,DWORD PTR DS:[ESI] ; EAX=1AB34C77 0041DBC3 Main XOR EAX,EBX 0046A2FF Main BSWAP EAX ; EAX=FFF9F51A 00476E95 Main DEC EAX ; EAX=FFF9F519 00476E96 Main NOT EAX ; EAX=00060AE6 0044E862 Main DEC EAX ; EAX=00060AE5 0041F316 Main ADD EBP,EAX ; EBP=0047E65C 00472E41 Main LEA EDX,DWORD PTR SS:[ESP+60] ; EDX=0012FF00 00472E48 Main CMP EDI,EDX 0046EE86 Main JA vmptest_.00480A05 00480A05 Main JMP EBP我們看到esi 還是bytescode 他這里是得到了跳轉(zhuǎn)間隔密文, 我們往的話發(fā)現(xiàn)之前的00001111值也是從esi中得到密文解密出來的,那么說明esi里面不僅存在數(shù)據(jù)常量也有跳轉(zhuǎn)間隔, 而且他們都是密文 然后回到這里 我們又發(fā)現(xiàn) ebp變?yōu)榱颂D(zhuǎn)base(JumpBase)。看到00472E41 這條指令 給edx賦值 esp + 0x60 你還記得最開始虛擬機(jī)入口時(shí) 那兩句匯編嗎
.vmp30:00430A1F 8B EC mov ebp, esp ; ebp 為壓環(huán)境后esp的值 .vmp30:00430A21 81 EC C0 00+ sub esp, 0C0h ; esp下移 0xC0然后我們之前說了 edi是棧, 因?yàn)樯厦婺莻€(gè)語句是edi-=4 然后把00001111賦值給這個(gè)EDI指向的地址(其實(shí)這里我們截取了VM_PushImm32指令分析的) 是吧, 然后edi就是棧 然后edi這里又與這個(gè)esp + 0x60比教, 這里的結(jié)果是大于的結(jié)果(因?yàn)槭亲粉櫝鰜淼乃灾挥幸粋€(gè)分支)我們結(jié)合這3個(gè)塊 分析出一個(gè)圖
如果您對該加密/解密軟件感興趣,歡迎加入加密/解密QQ交流群:740060302
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: