提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|使用教程|编辑:杨鹏连|2021-06-17 13:55:31.100|阅读 705 次
概述:看了网上大神们写了好多的vmp 虚拟代码的分析 ,但是在对实在项目时,插件总是提示不对或者未知版本,一直对vm代码的还原有质疑,于是就萌发了具体分析这个vm代码是怎么回事,若有错误,欢迎指出,能力有限只能分析皮毛,只谈vm的代码。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。
VMProtect通过在具有非标准体系结构的虚拟机上执行代码来保护代码,这将使分析和破解软件变得十分困难。除此之外,VMProtect还可以生成和验证序列号,限制免费升级等等。
VMProtect正版授权在线订购享受最低价,仅售801元起!还不赶紧加入你的订购清单?>>更多详情可点击咨询购买
相关链接:
二、VM代码的提取
承接上文,我们写了个例子,然后用vmp3.3.1加壳程序把那4句汇编代码给VM了,那么VM的代码是哪里到哪里,我们用OD的run trace去跟踪提取。操作如下:
1.首先下2个断点 在准备进入VM代码和退出VM代码执行未VM代码位置下断点
2.然后我们按F9到达我们第一个断点 在按快捷键Ctrl+F11 跟踪步入 然后到我们的第二个断点,这个时候 我们查看我们run trace查看追踪出的信息 然后右键关闭记录文件 下图是记录的跟踪信息
然后看看保存的跟踪文件大概是这个样子 我有处理过
那么到现在我们就把vm后的代码给扒下来了 之后我们只要好好分析这个文件就OK了
下面我们先搜索一下我们之前vm的汇编中的常量 我们先搜索第一个 1111 为什么是00001111就不多解释了0041DB98 Main BSWAP ECX ; ECX=00001111 0041DB9A Main RCR AH,CL 0041DB9C Main OR EAX,EBP ; EAX=0041DBFF 0041DB9E Main NEG AX ; EAX=00412401 0041DBA1 Main XOR EBX,ECX ; EBX=0046B588 0041DBA3 Main BSR EAX,ESP ; EAX=00000014 0041DBA6 Main SUB EDI,4 ; EDI=0012FF88 0041DBAC Main LAHF ; EAX=00000614 0041DBAD Main MOV DWORD PTR DS:[EDI],ECX我们去一下混淆
0041DB98 Main BSWAP ECX ; ECX=00001111 0041DBA6 Main SUB EDI,4 ; EDI=0012FF88 0041DBAD Main MOV DWORD PTR DS:[EDI],ECX就这3句有用的 得到00001111 怎么来的我们先不深究 EDI-=4 然后在向 [EDI]=ECX 这个像不像是压栈的操作,栈的增长方向是向下的是吧 栈顶减小就是压栈 (思考一下 那有没有栈顶减小的是出栈呢)。回到上文(一、认识与环境搭建)中我们说了ebp是代表栈,EDI是跳转基址(JumpBase),怎么现在又说这个EDI是代表栈了。莫急我们在往下看看
0041DBBF Main MOV EAX,DWORD PTR DS:[ESI] ; EAX=1AB34C77 0041DBC1 Main CMP EDX,EDX 0041DBC3 Main XOR EAX,EBX ; EAX=1AF5F9FF 0041DBC5 Main JMP vmptest_.0046A2FF 0046A2FF Main BSWAP EAX ; EAX=FFF9F51A 0046A301 Main JMP vmptest_.00476E95 00476E95 Main DEC EAX ; EAX=FFF9F519 00476E96 Main NOT EAX ; EAX=00060AE6 00476E98 Main JMP vmptest_.0044E862 0044E862 Main DEC EAX ; EAX=00060AE5 0044E863 Main XOR EBX,EAX ; EBX=0040BF6D 0044E865 Main JMP vmptest_.0041F316 0041F316 Main ADD EBP,EAX ; EBP=0047E65C 0041F318 Main JMP vmptest_.00472E41 00472E41 Main LEA EDX,DWORD PTR SS:[ESP+60] ; EDX=0012FF00 00472E45 Main TEST DH,AL 00472E47 Main CLC 00472E48 Main CMP EDI,EDX 00472E4A Main JMP vmptest_.0046EE86 0046EE86 Main JA vmptest_.00480A05 00480A05 Main JMP EBP很乱我们去混淆一下
0041DBBF Main MOV EAX,DWORD PTR DS:[ESI] ; EAX=1AB34C77 0041DBC3 Main XOR EAX,EBX 0046A2FF Main BSWAP EAX ; EAX=FFF9F51A 00476E95 Main DEC EAX ; EAX=FFF9F519 00476E96 Main NOT EAX ; EAX=00060AE6 0044E862 Main DEC EAX ; EAX=00060AE5 0041F316 Main ADD EBP,EAX ; EBP=0047E65C 00472E41 Main LEA EDX,DWORD PTR SS:[ESP+60] ; EDX=0012FF00 00472E48 Main CMP EDI,EDX 0046EE86 Main JA vmptest_.00480A05 00480A05 Main JMP EBP我们看到esi 还是bytescode 他这里是得到了跳转间隔密文, 我们往的话发现之前的00001111值也是从esi中得到密文解密出来的,那么说明esi里面不仅存在数据常量也有跳转间隔, 而且他们都是密文 然后回到这里 我们又发现 ebp变为了跳转base(JumpBase)。看到00472E41 这条指令 给edx赋值 esp + 0x60 你还记得最开始虚拟机入口时 那两句汇编吗
.vmp30:00430A1F 8B EC mov ebp, esp ; ebp 为压环境后esp的值 .vmp30:00430A21 81 EC C0 00+ sub esp, 0C0h ; esp下移 0xC0然后我们之前说了 edi是栈, 因为上面那个语句是edi-=4 然后把00001111赋值给这个EDI指向的地址(其实这里我们截取了VM_PushImm32指令分析的) 是吧, 然后edi就是栈 然后edi这里又与这个esp + 0x60比教, 这里的结果是大于的结果(因为是追踪出来的所以只有一个分支)我们结合这3个块 分析出一个图
如果您对该加密/解密软件感兴趣,欢迎加入加密/解密QQ交流群:740060302
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.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@capbkgr.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢