提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2012-11-07 17:06:33.000|阅读 1103 次
概述:VMProtect的VM是基于堆栈的虚拟家,理解好VM的堆栈空间划分和操作,是理解整个VM运行的基础。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
代码保护利器VMProtect在线订购315特惠,个人授权专享折扣立即购买>>
VMProtect的VM是基于堆栈的虚拟家,理解好VM的堆栈空间划分和操作,是理解整个VM运行的基础。VMProtect2.12加壳程序是从TLS开始运行的,首先点击OD的options菜单,修改Startup and exit选项,让OD中断在TLS callback里。加壳程序运行后,VMP初始化VM,并进入DISPATCH部分。这里就以初始化后的堆栈为例。
EDI=0013F8BC EBP=0013F9B0 CPU Stack Locked Value ASCII Comments 0013F8BC 009539E8 9. ;这里是EDI指向 0013F8C0 00950000 ... 0013F8C4 00150000 ... 0013F8C8 00000080 ... 0013F8CC 019314D6 0013F8D0 0013F8A8 . 0013F8D4 7C92E920 | 0013F8D8 00000000 .... 0013F8DC 00000000 .... 0013F8E0 00000000 .... 0013F8E4 FFFFFFFF 0013F8E8 7C98FEFF | 0013F8EC 7C00ADE7 .| 0013F8F0 00000000 .... 0013F8F4 00150000 ... 0013F8F8 0013F6F0 . 0013F8FC 0013F940 @. 0013F900 0013F944 D. 0013F904 7C92E920 | 0013F908 7C9301E0 | 0013F90C FFFFFFFF 0013F910 7C9301DB | 0013F914 7C9314D6 | 0013F918 7C931514 | 0013F91C 7C99E120 | 0013F920 7C9314EA | 0013F924 5ADF1158 XZ 0013F928 00000001 ... 0013F92C 00000000 .... 0013F930 7FFDA000 . 0013F934 7FFDF000 . 0013F938 00158070 p. 0013F93C 0013F890 . 0013F940 00000000 .... 0013F944 0043D759 YC. 0013F948 0000E9ED .. 0013F94C 409B0002 .@ 0013F950 00000020 ... 0013F954 0013F9CC . 0013F958 0013F96C l. 0013F95C 0043E9ED C. 0013F960 000359F4 Y. 0013F964 00000020 ... 0013F968 004253CD SB. 0013F96C 409B0000 ..@ 0013F970 00000020 ... 0013F974 0013F9CC . 0013F978 0013F98C . 0013F97C 00000000 .... ;这里是EBP指向 0013F980 00000000 .... ;这里是VM初始化保存的各个寄存器 0013F984 00000246 F.. 0013F988 000359F4 Y. 0013F98C 00000020 ... 0013F990 00000000 .... 0013F994 0013F9CC . 0013F998 004253CD SB. 0013F99C 000359F4 Y. 0013F9A0 00400000 ..@. 0013F9A4 0013F9C0 . 0013F9A8 C456C619 V ;这里是VMP的2个加密数据 0013F9AC 2EF6420A .B. 0013F9B0 7C92118A | ; RETURN to ntdll.7C92118A ;(这里是TLS进来时的栈顶)
VM的堆栈一共使用61个DWORD,上下分别有2个堆栈指针,下面为EBP指针,上面为EDI指针。下面是VM初始化时,给EDI和EBP指针赋值后的堆栈。
在这里把上面的EDI指向的堆栈称为EDISTACK,把EBP指向的堆栈称为EBPSTACK。在VM中,EBPSTACK是运算区,各类数据的运算操作在这里完成;EDISTACK是存储区包括长期存储数据和临时存储EBPSTACK的运算数。
接下来来看一条数据移动伪指令:
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
指令说明:把1个dword的数据从EBPSTAK栈顶移动到EDISTACK,使用EAX作为偏移量。
在EDISTACK的数据移动中,使用[EDI+EAX]的方式来存储与获取各个值。通过计算不同的EAX的值,可以到达EDISTACK中不同位置。在计算EAX值时,实际真正计算的是AL的值,例如:
AL最大值: AL=00时[EDI+EAX]=[0013F8BC+00000000]=0013F8BC
AL最小值:AL=FF时[EDI+EAX]=[0013F8BC+000000FF]=0013F9BB
这一对最值就是使用[EDI+EAX]可以读取的上下限。但是,在VM的AL值计算过程中,最后有一条AND AL,0x3C指令,0x3C=00111100bit由于这条指令的限制,无论AL为任何值(从00000000bit到11111111bit),通过AND操作,只能有1111bit的活动空间大小,1111bit相当于16,所以EDISTACK最多可以读取16个dword;由于00111100bit最后两个00位的限制,任何数字与它AND后,后两位都必然为0,变成与4对齐的值,说明VM都是按照0013F8BC 0013F8C0 0013F8C4 0013F8C8这样的4对齐来读取。在读取时,VM可以读取byte word dword,但是VM将不会去读取0013F8BE。
由于EDISTACK堆栈向下发展,EBPSTACK堆栈向上发展,EDISTACK有0x3C控制着范围,而EBPSTACK是操作区,没有硬性的范围控制。为了预防两个空间相撞,在每次往EBPSTACK移动数据后,VM都有相应的边界检测指令如下:
0043CE5A |. 8D47 50 LEA EAX,[EDI+50] 0043EE5D |. 39C5 CMP EBP,EAX 0043F08C |.^\0F87 29F6FFFF JA 0043E6BB
执行此指令后得到的结果是“>”,如果是“<”, 也就是EBPSTACK栈顶已经到达[EDI+50]位置,VM将会重新分配堆栈空间。0x50的偏移量比0x3C的偏移量多5个dword的缓冲区。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢