VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。
【下载VMProtect最新试用版】
第四章:Handle块优化与壳模板初始化
处理Jmp Ret指令
1、通过随机数决定jmp ret指令是变换成:
随机数==2
lea exx,dword ptr ds:[eax*4+0x474FCF]
jmp [exx]
随机数==1
push dword ptr ds:[eax*4+0x4051BB]
retn
2、注意v238 = GetRandInt0123((int)&savedregs);这一句,表示它的Mod.Reg寄存器是随机的0~3
处理Handle里面的Vmp_Ret函数
跟前面一样,将popad复杂化,变成pop eax、pop ecx等等
1、ESI_Matching_Array[2] == VMOpcode,符合条件的是:Vmp_Ret指令(pop xx popad popfd这种)
,{ 0x06,0x01,0x09,0x00,0x00,0x02,0x00,0x00, }//00474FCB 58 pop eax; 123.0047499B//00474FCC 61 popad//00474FCD 9D popfd,{ 0x06,0x00,0x08,0x00,0x00,0x02,0x01,0x00, }//00474FC7 58 pop eax; 123.0047499B//00474FC8 61 popad//00474FC9 9D popfd
2、将popad跟popfd删除,直到遍历到ret就退出
3、将前面v7->struc_PushRegister保存的寄存器递减方式存储,注意去掉Esp寄存器
4、总结
原始的:
pop eax
popad
popfd
ret
修改成:
pop eax
pop xx
pop xx
pop xx
xxxxx
ret
— 未完待续 —
VMProtect正版授权专享在线订购特享超低价格!还不赶紧加入你的订购清单/span>>>更多详情可点击咨询购买
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!