提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|使用教程|编辑:杨鹏连|2021-06-15 11:19:45.757|阅读 723 次
概述:看了网上大神们写了好多的vmp 虚拟代码的分析 ,但是在对实在项目时,插件总是提示不对或者未知版本,一直对vm代码的还原有质疑,于是就萌发了具体分析这个vm代码是怎么回事,若有错误,欢迎指出,能力有限只能分析皮毛,只谈vm的代码。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。
VMProtect通过在具有非标准体系结构的虚拟机上执行代码来保护代码,这将使分析和破解软件变得十分困难。除此之外,VMProtect还可以生成和验证序列号,限制免费升级等等。
VMProtect正版授权在线订购享受最低价,仅售801元起!还不赶紧加入你的订购清单?>>更多详情可点击咨询购买
VMP3逆向分析虚拟机指令
分析环境:
windows 10 + OD + IDA7.2 + Win7x32vmware + vmp3.3.1 pro
一、初步认识与环境搭建
看了网上大神们写了好多的vmp 虚拟代码的分析 ,但是在对实在项目时,插件总是提示不对或者未知版本,一直对vm代码的还原有质疑,于是就萌发了具体分析这个vm代码是怎么回事,若有错误,欢迎指出,能力有限只能分析皮毛,只谈vm的代码。首先我们写一下一个简单的demo,主要代码如下,然后输出eax的值,我是用win32asm环境写的,其他部分我就不写出来了,就是常规的框架,这里主要是把下面这4句汇编vm然后分析虚拟机是怎么处理的,如果你没有masm32汇编环境你也可以用vs内联汇编代替:
mov eax, 1111H mov eax, 3333H add eax, 2222H sub eax, 1010H然后我们在看看OD上是怎么显示的
但是在汇编上是怎么加入这个vm标志的呢我是这样处理的 首先他主要就是加这个jmp xxxx和vmp start等这样的汇编和字符串是吧 但是在汇编层面上我们家这个字符串他就编译不了 我是吧他们都用NOP代替 数数是几个字节 然后写几个NOP 然后编译生成exe后 在用16进制编辑器打开他 修改就可以了。
EB 10 56 4D 50 72 6F 74 65 63 74 20 62 65 67 69 6E 00 vmpbegin EB 0E 56 4D 50 72 6F 74 65 63 74 20 65 6E 64 00 vmpend
然后其他无关vm代码的我们就关闭了
OK 生成 我们打开OD对比一下加壳前和加壳后的代码样子
很明显左边被vm了 ,代码很乱是吧 右边的看着很舒服
我们在用IDA打开看看
图也是没逻辑 不过看到 push 和call 的组合 与jmp reg 如果之前我们分析过或看过分析vmp的文章的话
这不就是vm的入口吗 进入vm虚拟机的入口 进入sub_42FA52函数 又是很乱的代码
我们手工去除一下这些指令 : [patch_byte(here()+i,0x90) for i in range(3)] 我们用0x90(NOP)这个值去去除 那些无用的指令 然后后面那个range(3)中的3用我们自己的肉眼去看是多少个字节 鼠标移动到我们要去除的指令 python命令这里打上上面的脚本语句 修改这个多少个byte 回车即可
Python>[patch_byte(here()+i,0x90) for i in range(3)] [True, True, True]经过我们手工处理后 他大概成下面这个样子 push reg 和 pushf 是环境快照 保存未入虚拟机时的环境
.vmp30:0042FA52 52 push edx .vmp30:0042BF92 9C pushf .vmp30:0042BF97 51 push ecx .vmp30:0042BFA0 53 push ebx .vmp30:0042BFA5 55 push ebp .vmp30:0042BFA6 56 push esi .vmp30:0042BFA7 50 push eax .vmp30:0042BFA8 57 push edi .vmp30:0042BFAF B8 00 00 00+ mov eax, 0 .vmp30:0042BFBA 50 push eax .vmp30:0042BFBE 8B 74 24 28 mov esi, [esp+24h+arg_0] ; 这个应该是bytescode地址 .vmp30:0042BFC2 8D B6 F1 E2+ lea esi, [esi-2F6C1D0Fh] ; ESI 代表了bytescode地址 .vmp30:0042BFC8 F7 DE neg esi .vmp30:00430A03 D1 CE ror esi, 1 .vmp30:00430A05 46 inc esi .vmp30:00430A13 0F CE bswap esi .vmp30:00430A1D 03 F0 add esi, eax .vmp30:00430A1F 8B EC mov ebp, esp ; ebp 为压环境后esp的值 .vmp30:00430A21 81 EC C0 00+ sub esp, 0C0h ; esp下移 0xC0 .vmp30:00430A27 8B DE mov ebx, esi ; 注意这里 esp代表vm_context .vmp30:00430A29 B9 00 00 00+ mov ecx, 0 .vmp30:00430A30 2B D9 sub ebx, ecx .vmp30:00430A35 8D 3D 35 0A+ lea edi, loc_430A35 ; 跳转base值 .vmp30:00430A45 8B 0E mov ecx, [esi] ; 获取跳转间隔密文 .vmp30:00430A47 81 C6 04 00+ add esi, 4 .vmp30:00430A4F 33 CB xor ecx, ebx .vmp30:00439FEC 8D 89 D9 95+ lea ecx, [ecx-21016A27h] .vmp30:00439FF9 F7 D1 not ecx .vmp30:0043A003 F7 D9 neg ecx .vmp30:0043A005 8D 89 71 E2+ lea ecx, [ecx-5AFB1D8Fh] .vmp30:00416562 0F C9 bswap ecx .vmp30:00416564 33 D9 xor ebx, ecx .vmp30:0041656B 03 F9 add edi, ecx ; 解密跳转间隔 .vmp30:0045F2B5 57 push edi ; 压栈反弹进入vm指令 .vmp30:0045F2B6 C3 retn看着没什么复杂的,就是压入寄存器保存未进入虚拟机时的环境状态,然后给虚拟机的栈和寄存器开辟空间,esi指向bytescode 中间那里取了一个4byte值然后指针+4 取的值是密文经过 解密得出正在的值 这个值是要跳转的长度,从哪里跳转相对谁,edi给出了答案 (汇编代码这么乱 而且无用的指令一大堆 时隔多年后 我们才知道这个叫混淆)
那么到这里我们得到了什么信息:
1.未进入虚拟机时,环境状态的压入
2.虚拟机初始化,栈(EBP)、寄存器组(ESP)、跳转base(EDI)、字节码(ESI)、解密因子(EBX)
我给的这个名字名称可能是和别人分析的名字不一样 不过内容是一样的 本质没什么区别
那么这个时候我们就问了,我们怎么知道EBP是虚拟机的栈、ESP是寄存器组(或者说vm_context)和ESI是字节码(Bytescode)呢 当然我们可以看前人分析的结果是吧 但是我们应该说的是一个无到有的过程 而不是直接就说他是了 然后我们在回过头了 假如我们不知道vm中esp是什么 ebp是什么,但是esi 这个应该可以看出来了 他肯定是保存了一串数据的 那么这一串数据是什么 我们暂且不清楚 但是我们看到有个取值 然后解析这个存在 有点像eip 是不 虚拟机是不是就是执行模拟 翻译 你看看这个有没有点对上的意思 然后在看看edi 他明显是赋值一个地址 然后 +解密后的间隔 运行下去
现在我们脑子应该是有一个印象了 这里我先写一个类似OD的界面 看看当然有的我还没给出怎么识别 我们后面会给出 差不多就是这个样子
如果您对该加密/解密软件感兴趣,欢迎加入加密/解密QQ交流群:740060302
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢