当前位置: 首页 > news >正文

加密解密软件VMProtect教程(四):准备项目之SDK功能

VMProtect 是保护应用程序代码免遭分析和破解的可靠工具,但只有在正确构建应用程序内保护机制并且没有可能破坏整个保护的典型错误的情况下才能最有效地使用。

SDK 功能可以集成到受保护应用程序的源代码中,以设置受保护区域的边界,以检测调试器或虚拟化工具。

代码标记

  • VMProtectBegin
  • VMProtectBeginVirtualization
  • VMProtectBeginMutation
  • VMProtectBeginUltra
  • VMProtectBeginVirtualizationLockByKey
  • VMProtectBeginUltraLockByKey
  • VMProtectEnd

服务功能

  • VMProtectIsProtected
  • VMProtectIsDebuggerPresent
  • VMProtectIsVirtualMachinePresent
  • VMProtectIsValidImageCRC
  • VMProtectDecryptStringA
  • VMProtectDecryptStringW
  • VMProtectFreeString

许可功能

  • VMProtectSetSerialNumber
  • VMProtectGetSerialNumberState
  • VMProtectGetSerialNumberData
  • VMProtectGetCurrentHWID

VMProtectBegin

void VMProtectBegin(const char *MarkerName);

识别代码保护区域的开始的标记,必须在受保护代码块的第一个命令(或过程或函数调用)之前调用 VMProtectBegin。MarkerName 定义标记的名称,类似于 VMProtect 中的“VMProtectMarker”+MarkerName。例如,标记 VMProtectBegin('CheckRegistration') 将看起来像 VMProtectMarker “CheckRegistration”。如果未设置标记的名称,则以“VMProtectMarker”+marker_serial_number 的形式为其指定一个唯一名称。你可以在 VMProtect 中设置给定受保护块的编译类型。

VMProtectBeginVirtualization

void VMProtectBeginVirtualization(const char *MarkerName);

识别具有预定义 "虚拟化 "编译类型的代码保护区域的开始的标记。MarkerName 定义了标记的名称,在进一步使用 VMProtect 期间,无法更改此标记的编译类型。

VMProtectBeginMutation

void VMProtectBeginMutation(const char *MarkerName);

识别具有预定 "突变 "编译类型的代码保护区域的开始的标记。MarkerName 定义了标记的名称,在进一步使用 VMProtect 期间,无法更改此标记的编译类型

VMProtectBeginUltra

void VMProtectBeginUltra(const char *MarkerName);

识别预定义的“超(虚拟化+变异)”编译类型标识代码保护区开始的标记。MarkerName 定义标记的名称。在进一步使用 VMProtect 期间,无法更改此标记的编译类型。

VMProtectBeginVirtualizationLockByKey

void VMProtectBeginVirtualizationLockByKey(const char *MarkerName);

使用预定义的“虚拟化”编译类型和启用“锁定到密钥”选项标识代码保护区开始的标记。MarkerName 定义标记的名称。在进一步使用 VMProtect 期间,无法更改此标记的编译类型。

VMProtectBeginUltraLockByKey

void VMProtectBeginUltraLockByKey(const char *MarkerName);

使用预定义的“虚拟化”编译类型和启用“锁定到密钥”选项标识代码保护区开始的标记。MarkerName 定义标记的名称。在进一步使用 VMProtect 期间,无法更改此标记的编译类型。

VMProtectEnd

void VMProtectEnd(void);

识别代码保护区结束的标记。对 VMProtectEnd 的调用必须放在受保护代码块的最后一个命令(过程或函数调用)之后。

VMProtectIsProtected

bool VMProtectIsProtected(void);

如果文件由 VMProtect 处理,则 MProtectIsProtected 函数返回 True。

VMProtectIsDebuggerPresent

bool VMProtectIsDebuggerPresent(bool CheckKernelMode);

VMProtectIsDebuggerPresent函数允许检测应用程序在调试器下的启动。结果(真/假)可以被应用内保护机制处理。如果CheckKernelMode=False,该函数检查用户模式的调试器(OllyDBG, WinDBG等)。如果CheckKernelMode=True,用户模式和内核模式的调试器(SoftICE,Syser等)。当保护驱动时,CheckKernelMode的值没有意义,因为驱动总是在内核模式下工作,所以内核模式调试器的存在总是被检查。

VMProtectIsVirtualMachinePresent

bool VMProtectIsVirtualMachinePresent(void);

VMProtectIsVirtualMachinePresent函数允许检测应用程序在虚拟机工具下的启动: VMware, Virtual PC, VirtualBox, Sandboxie. 结果(真/假)可以用应用内保护机制来处理。

VMProtectIsValidImageCRC

bool VMProtectIsValidImageCRC(void);

VMProtectIsValidImageCRC函数检测可执行模块在进程的内存中被改变的事实(只检查不可改变的代码和数据段)。结果(真/假)可以用应用内保护机制来处理。

VMProtectDecryptStringA

const char * VMProtectDecryptStringA(const char *Value);

VMProtectDecryptStringA函数解密了ANSI字符串常量--Value。要解密常数,你必须把它列入受保护对象的列表中。

VMProtectDecryptStringW

const wchar_t * VMProtectDecryptStringW(const wchar_t *Value);

VMProtectDecryptStringW函数对Unicode字符串常数--Value进行解密。要解密该常量,你必须将其纳入受保护对象的列表中。

VMProtectFreeString

bool VMProtectFreeString(const void *Value);

VMProtectFreeString 函数释放为解密字符串分配的动态内存。释放内存不是必须的,但如果你这样做 – 你必须使用此功能。如果 VMProtectDecryptStringA/VMProtectDecryptStringW 第二次使用相同的参数而不破坏先前解密的字符串,则不会分配额外的内存。

以上便是本篇文章的分享,有感兴趣的小伙伴,可以私我了解~

相关文章:

加密解密软件VMProtect教程(四):准备项目之SDK功能

VMProtect 是保护应用程序代码免遭分析和破解的可靠工具,但只有在正确构建应用程序内保护机制并且没有可能破坏整个保护的典型错误的情况下才能最有效地使用。 SDK 功能可以集成到受保护应用程序的源代码中,以设置受保护区域的边界,以检测调…...

夏令营教育小程序开发功能和优势有哪些?

随着人们生活水平的提高,对于孩子的教育问题也是越来越重视,无论是教育方式还是教育内容上都追求新颖、多样化。在暑假期间,很多家长也希望孩子能够在这个长假期之间参加一些活动,培养孩子兴趣的同时也丰富假期内容,让…...

Cocos CreatorXR 1.2.0 今日发布,正式支持 WebXR ,并开启 MR 之路

去年九月,Cocos CreatorXR v1.0.1 版本支持了 VR 内容创作,成为率先支持 XR 的国产引擎,今年三月,Cocos CreatorXR v1.1.0 版本实现了对 AR 内容开发的支持。在完成基本功能的建设后,更多开发者开始尝试使用 Cocos Cre…...

Linux 使用笔记(本人出品,必属精品)

文章目录 Part.I IntroductionChap.I 快应用Chap.II 课程所学 Part.II 基础知识Chap.X 杂记 Part.I Introduction Linux 是笔者在大四上学期学的,当时授课的刘老师现在还能偶尔见到。但是平时一般用 Windows,有机会接触 Linux 一般是偶尔在服务器上跑跑程…...

【2023 · CANN训练营第一季】初识新一代开发者套件 Atlas 200I DK A2 第二章——安装Atlas 200I DK A2跑通第一个案例

准备相关软件 包括一台PC机(空间大于10g),读卡器,32gsd卡,一根网线。 具体步骤: 开始烧录开发板镜像:将sd卡插入读卡器,将读卡器插入PC机的USB接口,根据相关链接在PC机下载制卡工具…...

concurrenthashmap

SizeCtl的用法 sizeCtl0或容量大小 &#xff08;二个构造方法&#xff09; sizeCtl>0&#xff08;初始化或扩容后&#xff09;扩容阈值 sizeCtl-1&#xff1a;正在初始化中 sizeCtl<-1&#xff1a;线程扩容中 知道为什么第一个线程扩容时2&#xff0c;后面的其他线程扩容…...

8年测试总结,项目/团队如何做自动化测试?效率价值?吐血整理...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…...

图像动态裁剪

1. 背景 以两级级联模型为例&#xff0c;第一级目标检测模型用于检测人员&#xff0c;第二级目标检测模型用于检测手机、对讲机等。然后实际数据采集过程中&#xff0c;手机、对讲机这些设备并不在人员的一级检测框内&#xff0c;使得二级模型训练的样本较少。 二级目标检测模…...

Thematica: 炫彩主题与黑暗奇观的Vue3之旅

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 一、介绍1.1 博客主题和目的1.2 Vue 3简介二、炫彩主题2.1 准备工作2.2 安装必要依赖2.3 创建Vue项目2.4 设置全局样式...

平凡的Python为什么能一跃成为世界排名第一的语言

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;大周|慕课网讲师 一、前言 本文将结合个人经历为各位同学客观的分析是否有学习Python的必要、Python适合谁学、为什么…...

Wijmo 2023 v1 Crack

改进了 FlexGrid&#xff0c;支持 React 18 严格模式和可访问性。 5月 15&#xff0c; 2023 - 10&#xff1a;51 新版本 特征 改进了对 React 18 的支持 - 添加了对 React 18 严格模式的支持&#xff0c;可帮助开发人员在开发过程中查找常见错误。辅助功能改进 - 以下是此版本中…...

万物互联时代的边缘计算安全需求与挑战

随着物联网技术的快速发展&#xff0c;越来越多的设备和应用程序开始互联&#xff0c;这不仅提高了我们的生活质量&#xff0c;也带来了很多新的安全威胁。边缘计算作为连接数据和应用程序的关键环节&#xff0c;在万物互联的时代变得尤为重要。本文将讨论万物互联背景下的边缘…...

函数序列与函数项级数

文章目录 函数序列与函数项级数函数序列函数项级数Weierstrass M 判别法 函数序列与函数项级数 函数序列 点态收敛&#xff1a;设 f n ( x ) : [ a , b ] → R f_n(x):\,[a,\,b]\to\bold{R} fn​(x):[a,b]→R 是定义在区间 [ a , b ] [a,\,b] [a,b] 上的函数序列&#xff1…...

UML时序图详解

上篇文章&#xff0c;介绍了UML状态图&#xff0c;并通过visio绘制一个全自动洗衣机的UML状态图实例进行讲解。 本篇&#xff0c;来继续介绍UML中的另一种图——时序图。 1 时序图简介 时序图(Sequence Diagram)&#xff0c;也叫顺序图&#xff0c;或序列图&#xff0c;是一…...

Centos7.6部署postgresql15主从

目录 安装pg15&#xff08;master和standby&#xff09;主数据库配置(master)初始化数据库创建归档日志目录设置数据库访问权限修改数据库配置文件开启数据库 从数据库配置(standby)同步主库的数据文件创建文件standby.signal启动从数据库 主从状态验证master上验证standby上验…...

【ThinkPHP6系列学习-2】多应用模式配置

这里写一写TP6下配置多应用。因为TP6和TP5有所差异&#xff0c;TP6默认是单应用模式&#xff08;单模块&#xff09;&#xff0c;而我们实际项目中往往是多应用的&#xff08;多个模块&#xff09;&#xff0c;所以在利用TP6是就需要进行配置&#xff0c;开启多应用模式。 目录…...

Linux内核oops panic简析

源码基于&#xff1a;Linux 5.4 0. 前言 内核异常的级别大致分为三个&#xff1a;BUG、oops、panic。 BUG 是指那些不符合内核的正常设计&#xff0c;但内核能够检测出来并且对系统运行不会产生影响的问题&#xff0c;比如在原子上下文中休眠&#xff0c;在内核中用 BUG 标识。…...

Spark大数据处理讲课笔记4.8 Spark SQL典型案例

文章目录 零、本讲学习目标一、使用Spark SQL实现词频统计&#xff08;一&#xff09;数据源 - words.txt&#xff08;二&#xff09;创建Maven项目&#xff08;三&#xff09;添加依赖和构建插件&#xff08;四&#xff09;修改源目录名称&#xff08;五&#xff09;创建日志属…...

WhatsApp Business 多人使用终极指南

今时今日&#xff0c;几乎每个人的手机上都安装了 WhatsApp&#xff0c;不少电商更会依赖 WhatsApp作为和客户沟通的主要渠道。但对有一定规模的店铺来说&#xff0c;WhatsApp绑定一个号码和设备的设定实在很不方便。如何才能用WhatsApp Business批量处理客户查询呢&#xff1f…...

布局和视图的常用属性

0、用户界面由布局和GUI组件组成 之前的项目中都是使用线性布局LinearLayout&#xff0c;LinearLayout将视图显示在一行或一列中。其使用方法如下所示&#xff1a; <LinearLayoutxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...