软件保护技术

本文已收录至《全国计算机等级考试——信息 安全技术》专栏

软件保护

软件保护技术其实是一个很大的概念,技术上分为很多不同的分支,主要包括加密、防篡改、软件水印、软件多样化、反逆向技术、虚拟机、基于网络的保护和基于硬件的保护等。

加密是指对软件的代码进行加密保护,使用代码前需要进行解密操作,是一种应用最广的软件保护技术,对代码进行加密,并在软件运行前解密就是所谓的加壳。加壳技术虽然源于加密技术但是后来由于其使用的广泛性,逐渐自成一派,而且综合使用了其它各种软件保护技术,可认为是软件保护技术的一种应用。

软件防篡改技术是指在软件中加入一些特殊的处理,使得其他人试图修改软件时,软件做出拒绝执行、随机崩溃或者删除自身文件等保护软件的行为。防篡改算法要完成两个基本任务,第一个是检查程序是否被修改,第二个是在发现代码被修改时执行相应的反制措施。防篡改技术在防止软件被盗版的过程中发挥了重要作用。

软件水印是指在软件中嵌入唯一的标识以证明开发者对软件版权的所有权,从而防止因软件被盗版损害开发者利益。

软件多样化是指一个软件可以生成不同的副本,让每个副本都各不相同以至于攻击者破解了软件的一个副本,不能用于其它副本,防止利用已知的漏洞进行攻击或者通过注册机进行盗版。

反逆向技术是指通过各种方式使攻击者无法获取和逆向程序的代码,又可进一步细分为反调试、代码混淆、自修改代码、代码分离等。

代码混淆主要的目的是保护软件中的一些重要信息不被轻易获得,通过一系列的混淆方法,使非软件开发方通过逆向工程获得软件源代码的难度增大、时间增长,从而达到保护软件结构和数据的目的。代码混淆对逆向工程的抵抗作用明显,作为加密技术的补充和发展,受到越来越多的关注。它的出现使得攻击者难以通过IDA等工具反汇编、反编译逆向分析出程序的源码或中间码,从而获得程序的逻辑和算法。

自修改代码是程序运行期间修改或产生代码的一种机制。自修改代码的根本原理在于应用了冯诺依曼计算机存储程序思想,指令和数据存储在同一个内存空间中,因此指令可以被视作数据被其他指令读取和修改。程序在运行时向代码段中写数据,并且写入的数据被作为指令执行,达到自我修改的效果。自修改保护机制是有效抵御静态逆向分析的代码保护技术之一,广泛应用于软件保护和恶意代码等领域。计算机病毒等恶意代码的作者通常采用该技术动态修改内存中的指令来达到对代码加密或变形的目的,从而躲过杀毒软件的检测与查杀,或者增加恶意代码逆向分析人员对代码进行分析的难度。

虚拟机的软件保护方法属于自修改代码的一种,近年来逐渐发展为一条独立的软件保护方法分支。虚拟机保护就是将某段程序编译成具有特定意义的一段代码,这段代码不能在目标机器上直接执行,要通过解释器模拟执行。虚拟机代码在可执行文件中只是一块数据,反汇编工具是不能反编译虚拟机代码的,因为虚拟机代码是在运行过程中解释执行的。解密者分析虚拟机的结构和执行流程,需要花费大量的时间和精力。虚拟机保护方法的局限性在于其设计机制复杂,开发成本较高,而且经过此方法保护的程序容量会大大增加,造成的时间和空间开销都很大。

反调试是指在软件中加入各种调试器和虚拟机的探测器,一旦发现程序被调试或者在虚拟机中运行离开采取退出或自毁等防护措施,避免程序被分析。

基于网络的保护和基于硬件的保护具有较高的保护强度,但是严重依赖环境。本专栏主要探讨通用的软件保护方法,所以不进行深入研究。

保护方法对比

软件保护强度和性能的开销(时间开销和空间开销)基本上是成反比的,也就是说保护强度约强,相应的开销也就越大。各种方法的具体实现各有不同,优化细节也各有好坏,除去这些要素不说,通常而言可以认为:

基于网络的保护和基于硬件的保护>虚拟机>动态混淆>静态混淆

这里的动态混淆主要指的是类似“自修改代码”的可以抵抗动态分析的软件保护方法。静态混淆主要指一般意义上的“代码混淆”和“软件加密(加壳)”等可以有效抵抗静态分析的软件保护方法。

注:这里讲的保护方法的对比是普遍意义上的,可以基本看作在“反逆向”这个指标上的。实际应用中,根据不同的需求应该采取不同的保护方法。比如,场景一:商业窃密者需要分析和提取软件中的某些关键函数从而盗取软件核心技术。场景二:游戏外挂制作者需要修改软件的内存或者改变一些指令从而改变软件的运行效果和执行逻辑,从而增加攻击力或者实现角色不死等效果。场景三:软件盗版者需要绕过软件的注册函数,强制执行爆破从而获利。以上不同的应用场景需要选取的软件保护手段当然不会相同,需要因地制宜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Python网络爬虫的IT招聘就业岗位可视化分析推荐系统

文章目录 基于Python网络爬虫的IT招聘就业岗位可视化分析推荐系统项目概述招聘岗位数据爬虫分析系统展示用户注册登录系统首页IT招聘数据开发岗-javaIT招聘数据开发岗-PythonIT招聘数据开发岗-Android算法方面运维方面测试方面招聘岗位薪资多维度精准预测招聘岗位分析推荐 结语…

FlinkCDC详解

1、FlinkCDC是什么 1.1 CDC是什么 CDC是Chanage Data Capture(数据变更捕获)的简称。其核心原理就是监测并捕获数据库的变动(例如增删改),将这些变更按照发生顺序捕获,将捕获到的数据,写入数据…

TensorFlow 的特点和应用场景介绍

TensorFlow是一个开源的机器学习框架,最初由Google Brain团队开发并于2015年发布。它被设计用于构建、训练和部署各种机器学习算法和深度神经网络模型。TensorFlow具有以下特点: 强大的计算图:TensorFlow使用计算图来表示复杂的计算任务。计算图是由节点(表示操作)和边(表…

Jenkins中Publish Over SSH插件使用(1)

SSH插件 前言Publish Over SSH插件是jenkins里面必不可少的插件之一,主要的功能有两个把jenkins服务器上的文件,传输到远程nginx, 远程执行shell命令和脚本。 1. SSH插件下载与配置 1.1 下载Publish over SSH插件 系统管理—》管理插件 …

Python Web开发记录 Day1:HTML

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、HTML1、前端引入和HTML标签①前端引入②浏览…

Linux java查看内存消耗 linux查看java程序内存(转载)

Linux java查看内存消耗 linux查看java程序内存 目录 一、jps命令。 二、ps命令。 三、top命令。 四、free命令。 五、df命令。 查看应用的CPU、内存使用情况,使用jps、ps、top、free、df命令查看。 一、jps命令。 可以列出本机所有java应用程序的进程pid。…

C++ STL vector详解

1. vector简介 template<class T, class Alloc allocator<T>> class vector; vector是一个可以动态增长的数组&#xff0c;T是要存储的元素类型。vector可以像数组一样&#xff0c;用下标[]来访问元素&#xff0c;如&#xff1a; int arr[] {1,2,3,4}; for (i…

搜索专项---双向DFS模型

文章目录 送礼物 一、送礼物OJ链接 本题思路: #include <bits/stdc.h>typedef long long LL;constexpr int N1<<25;int n,m,k; int g[50]; int weight[N],cnt; int ans;void dfs1(int u,int s) {if(uk){weight[cnt]s;return;}dfs1(u1,s);if(g[u](LL)s<m) dfs1…

[NCTF2019]True XML cookbook --不会编程的崽

题目的提示很明显了&#xff0c;就是xxe攻击&#xff0c;直接抓包。 <?xml version "1.0"?> <!DOCTYPE ANY [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]> <user><username> &xxe; </username><passwor…

EasyRecovery2024个人免费版本电脑手机数据恢复软件下载

EasyRecovery是一款功能强大的数据恢复软件&#xff0c;能够帮助用户恢复丢失、删除、格式化或损坏的数据。无论是由于误操作、病毒攻击、硬盘故障还是其他原因导致的数据丢失&#xff0c;EasyRecovery都能提供有效的解决方案。 该软件支持从各种存储介质恢复数据&#xff0c;…

C 标准库 - <limits.h>

在C语言编程中&#xff0c;<limits.h> 头文件扮演着关键角色&#xff0c;它为各种基本数据类型定义了最小和最大限制。通过使用这些预定义的宏&#xff0c;程序员可以确保程序代码不会尝试存储超出特定类型范围的值。 简介 <limits.h> 头文件包含了关于不同类型&…

反序列化字符串逃逸 [安洵杯 2019]easy_serialize_php1

打开题目 $_SESSION是访客与整个网站交互过程中一直存在的公有变量 然后看extract()函数的功能&#xff1a; extract($_POST)就是将post的内容作为这个函数的参数。 extract() 函数从数组中将变量导入到当前的符号表(本题的作用是将_SESSION的两个函数变为post传参) function…

【Unity】提示No valid Unity Editor liscense found.Please active your liscense.

有两个软件&#xff0c;如果只有一个&#xff0c;点黑的不会有效果、、、、&#xff08;楼主是这个原因&#xff0c;可以对号入座一下&#xff09; 简而言之&#xff0c;就是去下载Unity Hub&#xff0c;再里面激活管理通行证 问题情境&#xff1a; 点击unity出现以下弹窗&a…

Java实战:创建自定义Spring Boot Starter模块

本文将详细介绍如何创建自定义Spring Boot Starter模块。我们将探讨Spring Boot Starter的基本概念&#xff0c;以及如何使用Maven和Gradle来创建自定义的Starter。此外&#xff0c;我们将通过具体的示例来展示如何创建一个简单的自定义Starter&#xff0c;并将其发布到Maven仓…

类型转换(C++)

一、C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与 接收返回值类型不一致时&#xff0c;就需要发生类型转化&#xff0c;C语言中总共有两种形式的类型转换&#xff1a;隐式类型 …

MATLAB环境下使用滤波自适应算法进行主动噪声消除

滤波作为自适应滤波系统中信号处理等研究领域的重要组成模块&#xff0c;主要被应用于信道均衡、系统识别、声学回波抵消、生物医学、雷达、波束形成等模块。在自适应滤波系统中&#xff0c;当信息数据统计方面的相关先验知识是已知的情况下&#xff0c;滤波器才能处理相关的输…

数据价值在线化丨TiDB 在企查查数据中台的应用及 v7.1 版本升级体验

本文介绍了企查查在数据中台建设中使用 TiDB 的经验和应用。通过从 MySQL 到 TiDB 的迁移&#xff0c;企查查构建了基于 TiDB Flink 的实时数仓框架 &#xff0c;充分利用了 TiDB 的分布式架构、MySQL 兼容性和完善的周边工具等特性&#xff0c;实现了数据的在线化处理。2023 年…

【mysql】时间戳与date互转

查看当前时区 show variables like %time_zone%;时间戳与date互转的注意事项 UNIX_TIMESTAMP() 与 FROM_UNIXTIME() 是一对儿时区要相同不指定时区时&#xff0c;使用mysql配置的默认时区。参考“查看当前时区”。 date转时间戳 时间戳转date 参考 https://dev.mysql.com/d…

Linux学习方法-框架学习法——Linux驱动架构的演进

配套视频学习链接&#xff1a;https://www.bilibili.com/video/BV1HE411w7by?p4&vd_sourced488bc722b90657aaa06a1e8647eddfc 目录 Linux驱动演进的过程 Linux驱动的原始架构(Linux V2.4) 平台总线架构(platform) Linux设备树 Linux驱动演进的趋势 Linux驱动演进的过程…