大小:39.54MB 版本:免费版 分类:行业软件 系统:安卓
免费下载需跳转至第三方下载VMProtect破解版是采用全新的VM架构与C++重构代码打造的新一代软件保护系统,能够帮助你为程序添加外壳,并且还支持使用MAP文件或内建的反编译引擎来快速选择需要保护的代码,使其分析反编译后的代码和破解变得极为困难,很好防止他人的滥用修改。
VMProtect是一款功能强大且实用性的程序加壳软件,能够很好保护应用程序不被反编译,并且该软件还支持屏保、Active-X组件、BPL库等动态加载库和驱动程序,也支持虚拟化代码与几乎所有的可执行文件格式,让你能够尽情使用。
1、支持的文件和格式
VMProtect 支持32位和64位可执行文件,动态加载库和驱动程序。这包括屏保、Active-X 组件、BPL 库和其他 PE 格式的文件。受保护的文件基本上可在任何版本的 Windows 系统上运行,甚至是较早的 Windows 95!不过,授权功能的系统要求至少为 Windows 2000。VMProtect 不支持 .NET 可执行文件,而且只能有限地支持 VB 可执行程序。
2、序列号
VMProtect 的 Ultimate 版本允许用户将序列号轻松添加到受保护的应用程序中。PayPro Global 电子商务供应商支持这一功能,因此您甚至无需设置您自己的序列号生成器(当然,如果您确实需要也可实现)。授权功能帮助用户限制免费更新周期、设置序列号的有效时间、防范在未输入序列号的情况下执行代码,并提供大量其他功能。还可阻止任何序列号,新的受到保护的文件不会接受此序列号。
3、用户界面
VMProtect 提供两种模式的用户界面:简单模式和专家模式。简单模式帮助用户只需点击几下鼠标便能轻松选取保护功能、调整选项、并获得受保护的文件。专家模式供高级用户使用,该模式显示汇编代码、允许写入脚本、绑定 DLL 等。此外,在“选项”标签卡中提供更多设置。
4、控制台版本
VMProtect 的 Professional 和 Ultimate 版本拥有一个控制台版本,支持命令行参数,而且可在自动构建过程中使用。该版本完全支持脚本、水印、序列号和 VMProtect 的所有其他功能。
5、国际知名厂商,值得信赖
国际老牌名气厂商VMProtect software长期致力于开发研究软件保护程序,开发的工具软件是目前国际上最流行的保护壳之一,受到全球诸多客户的信赖,深受客户推崇。
1、虚拟化代码
软件保护的下一步。大多数保护系统在应用程序启动时加密和解密代码。VMProtect 根本不对代码进行解密。相反,被加密的代码运行在一个虚拟的CPU上,该CPU与通用的x86和x64CPU明显不同,因为命令集对于每个被保护的文件都是不同的。
2、支持几乎所有的可执行文件格式
VMProtect 允许对可执行文件、动态链接库和驱动程序进行保护。
3、支持64位架构
VMProtect允许对32位和64位应用、库和驱动进行保护。
4、支持大多数版本的Windows
MProtec保护的文件可以在几乎任何版本Windows OS上运行,自Windows 95开始。32和64位版本都被支持,VMProtect兼容DEP和UAC。
5、完美的代码保护解决方案
VMProtect允许生成和验证序列号。手动和自动生成都被支持。序列号可以是有限的时间或日期和硬件锁定的,而免费升级期间也可以被限制。 VMProtect确保它实际上无法运行没有一个序列号代码。
6、快速便捷生成序列号
VMProtect允许生成和验证序列号,手动和自动均可。还可设置过期时间,限制免费更新等。
1、字节码:代码后收到的本地机器翻译指令转换成虚拟机指令。
2、虚拟化:翻译的一部分的过程中与应用程序的可执行代码的虚拟机的指令指令集,是未知的一个潜在的裂解装置的体系结构和逻辑。虚拟部分的代码被执行的解释(虚拟机)没有被预编译为本机代码。一般情况下,再造虚拟化的片段来自虚拟机体系结构的研究。这将导致在创建对应到CPU的反汇编器体系结构,该体系结构是由虚拟机模拟和分析反汇编代码。
3、虚拟机:直接执行的软件代码在受保护的程序的字节码。
4、水印:一个字节数组,每个用户特有的可以明确标识的合法拥有人的破解软件的副本。
5、突变:更换的源代码指令,其模拟(或一定的指令序列),它给出了相同的结果作为源指令。
6、混淆:一组方法和技术,旨在使它很难分析的软件代码。根据不同的编程语言的受保护的程序,不同类型的模糊处理程序使用。如果在解释型语言(比如Perl,PHP等)编写的应用程序混淆,变量的变化都在他们的源代码:评论将被删除,无意义的名称,字符串常量加密等。如果编写的软件在Java /。NET是混淆的,执行的字节码由虚拟机转化。如果编译的软件进行模糊处理,机器代码修改:“垃圾”的指示,“死码”,随机跳跃插入,一些操作移动到堆栈中,各种结构性(更罕见数学)转换。在重组混淆的部分代码,尝试将它们转换回原来的,这变成了一个非常如果采用全面的方法来混淆耗时的任务。
7、保护:所使用的程序,以保护其他软件产品对被破解。最现代化的保护不修改源代码应用程序,但包/加密保护密切关注程序(程序),解压/解密受保护的软件。
8、入口点:初始地址所在的文件开始执行。
9、包装方式:应用程序代码保护法压缩的可执行文件的程序和/或它的库存帮助不寻常的算法。使用包装时,包装机压缩受保护的软件代码和最终用户运行该应用程序时,它是完全或部分解压缩。
10、加密:保护的应用程序的一部分的帮助强大的加密算法。在箱子软件的帮助下,保护加密,用户必须输入激活码,禁用未注册版本所施加的限制,开发人员。
一、读取PE基本信息
定义的结构如下:
二、获取到壳要的各种API
三、将用户要VM的Opcode进行解析
四、如何定位到加密按钮
1、使用DarkDe4.exe
2、分析关键函数sub_4A3414(最核心的函数)
五、sub_4A3414函数分析
1、判断RVA合法性
2、内存对齐后的总大小
3、根据保护等级选择使用哪个壳模板,并设置区段保护属性
4、壳模板一共有6个
5、本文使用的是474974,到这里这篇章节就完成了
虚拟机加密,是指像VMP这样的保护程序,它会把源程序的X86指令变成自定义的伪指令,等到执行的时候,VMP内置在保护程序中的VM就会启动,读取伪指令,然后解析执行。VMP是一个堆栈虚拟机,它的一切操作都是基于堆栈传递的。在VMP中,每一个伪指令就是一个handler,VM中有一个核心的Dispatch部分,它通过读取程序的bytecode,然后在DispatchiTable里面定位到不同的handler中执行。绝大多数情况下,在一个handler中执行完成后,程序将回到Dispatch部分,然后到next handler中执行。
下面就将VM所需的伪指令一一罗列,为使伪指令表达清晰,首先介绍以下伪指令的命名方式:移动到EBPSTACK的数据使用PUSH指令,移动到EDISTACK的数据使用MOV指令。在VM中,对数据的操作包括byte和dword,而存储的方式是word和dword,当遇到byte和word交织在一起的时候,可以就把数据作为word操作来看。
以:VM_PUSHw_MEMORYb为例说明命名规则:伪指令的命名统一使用VM_开头;并接上直观的助记符PUSH;EBPSTACK是移动的目的地;MEMORY是移动的来源地;w代表word、b代表byte、dw代表dword;这条指令的表示:这是一条移动指令,把1个byte的数据从内存块移动到EBPSTACK,存储时是按照word来存储。在VMP的伪指令中包含有大量的花指令和junk code。
一、0043DC0A命名:VM_MOVdw_EDISTACKdw_EBPSTACKdw
0043DC19 |. F6D8 NEG AL ; *
0043DC26 |. C0C8 07 ROR AL,7 ; *
0043DC34 |. 2C 20 SUB AL,20 ; *
0043DC41 |. 24 3C AND AL,3C ; *
0043E080 |$ 8B55 00 MOV EDX,DWORD PTR SS:[EBP] ; *
0043E086 |. 83C5 04 ADD EBP,4 ; *
0043D3D7 /> /891438 MOV DWORD PTR DS:[EDI+EAX],EDX
功能:把EBPSTACK栈顶1个dword的数据存储到EDISTACK
二、0043E7E6命名: VM_MOVw_EDISTACKw_EBPSTACKw
0043E7EC 0FB646 FF MOVZX EAX,BYTE PTR DS:[ESI-1] ; *
0043E7F6 28D8 SUB AL,BL ; *
0043E7FE C0C8 05 ROR AL,5 ; *
0043E80C F6D8 NEG AL ; *
0043E816 34 0E XOR AL,0E ; *
0043E822 28C3 SUB BL,AL ; *
0043E82E 66:8B55 00 MOV DX,WORD PTR SS:[EBP] ; *
0043E835 83C5 02 ADD EBP,2 ; *
0043F03F 4E DEC ESI ; *
0043F045 66:891438 MOV WORD PTR DS:[EDI+EAX],DX ; *
功能:把EBPSTACK栈顶1个word的数据存储到EDISTACK
三、0043D374命名:VM_MOVb_EDISTACKb_EBPSTACKw
0043D377 |. 8A46 FF MOV AL,BYTE PTR DS:[ESI-1] ; *
0043F148 /> D8 XOR AL,BL ; *
0043D460 |. FEC0 INC AL ; |*
0043D469 |. C0C8 07 ROR AL,7 ; |*
0043D473 |. FEC0 INC AL ; |*
0043D215 |. 30C3 XOR BL,AL ; *
0043EA9C |. 4E DEC ESI ; *
0043EAA0 |. 66:8B55 00 MOV DX,WORD PTR SS:[EBP] ; *
0043EAAC |. 83C5 02 ADD EBP,2 ; *
0043DBDA /> /881438 MOV BYTE PTR DS:[EDI+EAX],DL ; *
把EBPSTACK栈顶1个word的数据按照byte的方式存储到EDISTACK
四、0043D21C命名:VM_PUSHw_IMMEDIATEw
0043D21F 66:8B46 FE MOV AX,WORD PTR DS:[ESI-2] ; *
0043D22D 86E0 XCHG AL,AH ; *
0043E01A 66:29D8 SUB AX,BX ; *
0043E022 66:05 71F2 ADD AX,0F271 ; *
0043E036 66:F7D8 NEG AX ; *
0043E03D 66:35 A61C XOR AX,1CA6 ; *
0043E054 66:29C3 SUB BX,AX ; *
0043E054 66:29C3 SUB BX,AX ; *
0043E976 8D76 FE LEA ESI,[ESI-2] ; *
0043D094 /66:8945 00 MOV WORD PTR SS:[EBP],AX
功能:从ESI数据中取得1个word的立即数压入EBPSTACK
五、0043E83F命名:VM_PUSHdw_IMMEDIATEdw
0043E845 . 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4] ; *
0043E84D . 0FC8 BSWAP EAX ; *
0043E852 . 01D8 ADD EAX,EBX ; *
0043E857 . C1C8 04 ROR EAX,4 ; *
0043D952 . 8D76 FC LEA ESI,[ESI-4] ; *
0043D956 . 2D E131FF38 SUB EAX,38FF31E1 ; *
0043D967 . C1C0 0A ROL EAX,0A ; |*
0043D96C . 01C3 ADD EBX,EAX ; |*
0043D970 . 83ED 04 SUB EBP,4 ; |*
0043D710 |$ 8945 00 MOV DWORD PTR SS:[EBP],EAX ; *
功能:从ESI数据中获得1个dword的立即数,压入EBPSTACK
六、0043DB11命名:VM_PUSHdw_IMMEDIATEw
0043DB1E 66:8B46 FE MOV AX,WORD PTR DS:[ESI-2] ; *
0043D171 /86E0 XCHG AL,AH ; *
0043E948 66:29D8 SUB AX,BX ; *
0043E951 66:05 71F2 ADD AX,0F271 ; *
0043E95C 66:F7D8 NEG AX ; *
0043E969 8D76 FE LEA ESI,[ESI-2] ; *
0043D62C 66:35 A61C XOR AX,1CA6 ; *
0043D640 6:29C3 SUB BX,AX ; *
0043D648 98 CWDE ; *
0043D190 83ED 04 SUB EBP,4 ; *
0043D933 8945 00 MOV DWORD PTR SS:[EBP],EAX ; *
功能:从ESI数据中获得1个word的立即数,按照dword的方式压入EBPSTACK
七、0043D978命名:VM_PUSHw_IMMEDIATEb
0043D979 . 0FB646 FF MOVZX EAX,BYTE PTR DS:[ESI-1] ; *
0043D97E . 30D8 XOR AL,BL ; *
0043D1ED . FEC8 DEC AL ; *
0043D1F0 . F6D8 NEG AL ; *
0043D1F7 . F6D0 NOT AL ; *
0043D1FD . 30C3 XOR BL,AL ; *
0043CEE8 > /83ED 02 SUB EBP,2 ; *
0043DD79 |. 66:8945 00 MOV WORD PTR SS:[EBP],AX ; |*
0043DD62 /$ 4E DEC ESI ; *
功能:从ESI数据中获得1个byte的立即数,按照word的方式压入EBPSTACK
八、0043D3A5命名:VM_PUSHdw_IMMEDIATEb
0043D3A7 0FB646 FF MOVZX EAX,BYTE PTR DS:[ESI-1] ; *
0043D3AC 30D8 XOR AL,BL ; *
0043D848 FEC8 DEC AL ; *
0043D855 F6D8 NEG AL ; *
0043D866 F6D0 NOT AL ; *
0043D86D 30C3 XOR BL,AL ; *
0043ED8C 66:98 CBW ; *
0043CF7B 98 CWDE ; *
0043EC00 8D76 FF LEA ESI,[ESI-1] ; *
0043DB94 83ED 04 SUB EBP,4 ; *
0043DB9F 8945 00 MOV DWORD PTR SS:[EBP],EAX ; *
功能:从ESI数据中获得1个byte的立即数,按照dword的方式压入EBPSTACK
九、0043CF24命名:VM_ADDdw_EBPSTACK
0043CF2F |. 8B45 00 MOV EAX,DWORD PTR SS:[EBP] ; *
0043EED3 |. 0145 04 ADD DWORD PTR SS:[EBP+4],EAX ; *
0043CE4F |. 9C PUSHFD ; *
0043CE50 |. 8F4424 3C POP DWORD PTR SS:[ESP+3C] ; *
0043D1BF /> \FF7424 3C PUSH DWORD PTR SS:[ESP+3C] ; *
0043D1C3 |. 8F45 00 POP DWORD PTR SS:[EBP] ; *
功能:把EBPSTACK栈顶的2个dword数据相加,结果存储在[EBP+4],EFLAGS标志存储在栈顶。
十、0043D43B命名:VM_PUSHdw_MEMORYdw
0043D43F 8B45 00 MOV EAX,DWORD PTR SS:[EBP] ; *
0043D10A 8B00 MOV EAX,DWORD PTR DS:[EAX] ; *
0043D447 8945 00 MOV DWORD PTR SS:[EBP],EAX ; *
功能:把EBPSTACK栈顶数据作为内存地址,从中读取1个dword的数据压入EBPSTACK
十一、0043E9CA命名:VM_PUSHw_MEMORYw
0043E9D0 8B45 00 MOV EAX,DWORD PTR SS:[EBP] ; *
0043E9D9 83C5 02 ADD EBP,2 ; *
0043DEBB 66:36:8B00 MOV AX,WORD PTR SS:[EAX] ; *
0043DDC4 66:8945 00 MOV WORD PTR SS:[EBP],AX ; *
功能:把EBPSTACK栈顶数据作为内存地址,从中读取1个word的数据压入EBPSTACK
十二、0043D8BD命名:VM_PUSHw_MEMORYb
0043D57B |. 8B55 00 MOV EDX,DWORD PTR SS:[EBP]
0043D589 |. 83C5 02 ADD EBP,2 ; *
0043D591 |. 8A02 MOV AL,BYTE PTR DS:[EDX] ; *
0043E70B |. 66:8945 00 MOV WORD PTR SS:[EBP],AX ; *
功能:把EBPSTACK栈顶数据作为内存地址,从中读取1个byte的数据,按照word的方式压入EBPSTACK
十三、0043DC56命名:VM_PUSHw_EDISTACKw
0043DC5C 8A46 FF MOV AL,BYTE PTR DS:[ESI-1] ; *
0043DC66 28D8 SUB AL,BL ; *
0043DC6D C0C8 05 ROR AL,5 ; *
0043EADA 4E DEC ESI ; *
0043EE2E \F6D8 NEG AL ; *
0043EE34 34 0E XOR AL,0E ; *
0043E740 28C3 SUB BL,AL ; *
0043E746 66:8B0438 MOV AX,WORD PTR DS:[EDI+EAX] ; *
0043D9E4 83ED 02 SUB EBP,2 ; *
0043EE44 66:8945 00 MOV WORD PTR SS:[EBP],AX ; *
功能:从EDISTACK中读取1个word数据压入EBPSTACK
十四、0043CF81命名:VM_PUSHw_EDISTACKb
0043CF84 8A46 FF MOV AL,BYTE PTR DS:[ESI-1] ; *
0043CF8E 30D8 XOR AL,BL ; *
0043EE0A \FEC0 INC AL ; *
0043EE11 C0C8 07 ROR AL,7 ; *
0043EE1E FEC0 INC AL ; *
0043D59C 30C3 XOR BL,AL ; *
0043D2CE 4E DEC ESI ; *
0043D2D7 8A0438 MOV AL,BYTE PTR DS:[EDI+EAX] ; *
0043D2E6 83ED 02 SUB EBP,2 ; *
0043D075 66:8945 00 MOV WORD PTR SS:[EBP],AX ; *
功能:从EDISTACK中读取1个byte数据,按照word方式压入EBPSTACK
十五、0043D72E命名:VM_PUSHdw_EBP
0043D72F /. 89E8 MOV EAX,EBP ; *
0043E613 /$ 83ED 04 SUB EBP,4 ; *
0043E61C |. 8945 00 MOV DWORD PTR SS:[EBP],EAX ; *
功能:复制EBP指针到EBPSTACK栈顶
十六、0043EABE命名:VM_COPYdw_EBPSTACK
0043EACC 8B45 00 MOV EAX,DWORD PTR SS:[EBP] ; *
0043DE1B 36:8B00 MOV EAX,DWORD PTR SS:[EAX] ; *
0043DE25 8945 00 MOV DWORD PTR SS:[EBP],EAX ; *
功能:把EBPSTACK栈顶数据作为堆栈地址,从中读取一个dword的数据压入EBPSTACK
十七、0043E790命名:VM_COPYw_EBPSTACK
0043E79C |. 8B55 00 MOV EDX,DWORD PTR SS:[EBP] ; *
0043E7A7 |. 83C5 02 ADD EBP,2 ; *
0043E7AE |. 36:8A02 MOV AL,BYTE PTR SS:[EDX] ; *
0043D01B |. 66:8945 00 MOV WORD PTR SS:[EBP],AX ; *
功能:把EBPSTACK栈顶数据作为堆栈地址,从中读取一个byte的数据,按照word的方式压入EBPSTACK
1、添加了对.NET Core(3.0+)和.NET Standard(2.1+)的支持
2、添加了导入保护
3、添加了资源保护
4、添加了对混合程序集的支持
5、Mach-O:改进了对类型为S_THREAD_LOCAL_VARIABLES和S_THREAD_LOCAL_REGULAR的部分的支持
6、Mach-O:提升对支持Objective-C
7、ELF:改进了对R_386_PC32类型的重定位的支持
8、PE:改进的反调试
9、.NET:修复了许多错误
10、ELF:修复了获取HDD信息时VMProtectGetCurrentHWID内部发生的错误
行业软件|101 MB
更新时间:2023-07-25
行业软件|106.96 MB
更新时间:2023-04-17
行业软件|113.1MB
更新时间:2023-03-30
行业软件|66.73MB
更新时间:2023-03-24
行业软件|3.29MB
更新时间:2023-03-17
行业软件|0.99MB
更新时间:2023-01-16
行业软件|19.46MB
更新时间:2023-01-11
行业软件|61.03 MB
更新时间:2023-01-07
行业软件|1.03MB
更新时间:2023-01-04
行业软件|3.50MB
更新时间:2023-01-04
224 MB / 行业软件
下 载308.9 MB / 行业软件
下 载19 MB / 行业软件
下 载1.81 MB / 行业软件
下 载78.73 MB / 行业软件
下 载16.88MB / 行业软件
下 载