目前常見的保護(hù)殼,多為VMProtect,Safengine。其主要保護(hù)核心為“代碼虛擬化”功能
功能主要將被保護(hù)的代碼抹去后以其獨(dú)特的體系去執(zhí)行被抹去的代碼【注:相當(dāng)于一句chinese的句子里面插入了English
,或者other外語,以一種不被理解的字義來代替原始文字】,常稱之為:VMCODE,被VM的代碼
下文共以兩例講解這套“獨(dú)特的體系”
(一例為論壇用戶suno 所發(fā)帖子demoVMcrackme)(一例自寫CrackMe+VMProtect)
例一http://www.52pojie.cn/forum.php?mod=viewthread&tid=572327
感謝suno ,先以此貼demo講解【請(qǐng)一定將帖子看完,最好動(dòng)手一試再來看】
首先可以看到CrackMe要求輸入NAME KEY進(jìn)行注冊(cè)。
輸入錯(cuò)誤信息可以看到會(huì)彈出信息框提示 Wrong OD載入,找按鈕的派發(fā)事件(不解釋,這都不會(huì)就沒必要繼續(xù)看了)
可以看到賬號(hào)密碼驗(yàn)證都CALL了401060,MesageBox TEXT參數(shù)為固定地址4014F4
賬號(hào)驗(yàn)證CALL處步進(jìn)看看
一般到這里可能都懵了What the fk shit?
這就是一段被VM的代碼了,現(xiàn)在進(jìn)入的代碼段可以稱呼為VM代碼虛擬機(jī)(原指令已經(jīng)不可視化,由代碼虛擬機(jī)將原指令
實(shí)現(xiàn)執(zhí)行)現(xiàn)在需要分析代碼虛擬機(jī)得出原始指令,修改實(shí)現(xiàn)破解。這里說一下這個(gè)VM代碼虛擬機(jī)的結(jié)構(gòu)
那么看完后明白了,現(xiàn)在要破解就需要找到比較賬號(hào)密碼的Handler,將其修改就OK。現(xiàn)在怎么找?看堆棧 4017C4,
執(zhí)行完Handler后他還是會(huì)VMretn回去的,下斷
選項(xiàng)-調(diào)試設(shè)置
設(shè)置一下,CTRL+F11 然后斷在4017C4,現(xiàn)在跟蹤功能已經(jīng)記錄了,賬號(hào)驗(yàn)證CALL的代碼(不過是被VM的)
這是賬號(hào)驗(yàn)證所執(zhí)行的”代碼塊”
很明顯,第一條就是dispatch第二條進(jìn)去看看
先定義一下,方便理解[EBP-F]=A [EBP-1C]=B [EBP-14]=C [EBP-10]=D [EBP-B]=F [EBP-18]=XAdd a,4Mov b,aInc [c]Mov al,
[c]Mov D,alMov F,DMov X,DMov [B],D *一條MOV的HANDLER 。 并不是類似test cmp的命令 下一條
也是MOV一堆參數(shù)之類的下一條
Sub Sete Sets sub改變標(biāo)志位,sete sets保存標(biāo)志位 相當(dāng)于test cmp之類指令的HANDLER很明顯這是一條比較的HANDLER。
401196先記錄下來。下一條
不是比較的,略過下一條
不是比較的,略過下一條
有一條cmp,不過并不是比較的HANDLER下一條
也不是比較的HANDLER下一條
VM RETN~ 那么比較的HANDLER就是401196,調(diào)試一下看看
賬號(hào)驗(yàn)證處,斷下。CTRL+G 401196. F4
35比0?在4011AB再按一下F4
32比0?繼續(xù)F4
70比0?繼續(xù)F4
正在對(duì)賬號(hào)進(jìn)行驗(yàn)證~不過這個(gè)0是什么鬼?就是說并沒有正確的賬號(hào)咯?不管他,也不打算逆推,直接在4011AB改 SUB EAX,EAX,
將VM中進(jìn)行比較的HANDLER改成比較什么都說對(duì), - -
OK!(因?yàn)槊艽a比較也是經(jīng)過這條HANDLER的,可以自己去調(diào)試看看,我已經(jīng)改成他說什么都對(duì)了,密碼比較經(jīng)過也說對(duì),所以OK)
例二自寫一個(gè)CrackMe ,然后加個(gè)VM
OK,源碼都貼上了,CM就不介紹了。直接OD載入,找按鈕派發(fā)事件
剩下的有人看再補(bǔ)上去吧, 亂 ~ 懶~
word.zip (1.73 MB, 下載次數(shù): 2, 售價(jià): 5 CB吾愛幣) 打包.rar (1.69 MB, 下載次數(shù): 3)
|