授权加密
GProtect 客户服务端授权加密文件对比
GProtect 软件保护说明
GProtect 是一个软件保护系统,主要包括软件授权加密、源代码防篡改、反逆向技术、基于网络的软件防护等。
代码加密:
代码加密是指对PE文件的代码段(.text) 中的代码进行加密保护,在被保护程序加载到内存中执行时才解密并且执行。
经过对比可以发现原本程序中 .text 代码段已经不存在,被替换成 .GP 开始的加密区段
导入表加密:
去除原程序的导入表,由GProtector代码接管导入函数的跳转,防止逆向工程师通过导入表入手对程序分析。
加壳前后区段表变化
代码混淆虚拟化
程序未加密前有一点反汇编基础的逆向工程师看着这些汇编代码就和看C/C++源码一样, 程序是比较当前输入数据是否为"0x3A09B8D2",如果于这个十六进制数相等则输出 yes!
程序混淆虚拟化后首先将原始代码处使用0xCC 填充
在 x86架构中,CPU读取到一条指令53,通过Intel手册可以直观查询到这个定长指令对应的汇编指令是 push ebx ,同理GProtect 代码虚拟机为了在软件层模拟CPU执行二进制代码指令,定义了属于自己的指令集,有自己的VM寄存器、VMHandle、VM堆栈、VM指令流缓冲区。 下面简述下GProtect虚拟机的执行流程
为了防止逆向工程师准确清晰的判断VMHandle边界, 在对VMHandle混淆膨胀时也将VMHandle 细分为一个个小的混淆代码块, 混淆代码块间跳转和VMHandle跳转是相同的。