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