有没有.net 加壳软件加壳原理推荐

加壳工具是指注入一段功能代码箌 APP 中并可以将原始的二进制指令经过混淆、虚拟化等手段进行等价变换,实现满足 APP 多种安全需求根据功能的不同可以分为:压缩壳、加密壳、虚拟机壳

以隐藏程序代码和数据为目的并将隐藏后的代码和数据进行压缩。但是压缩壳由于在运行时会将代码段和数据段還原,所以安全性较低

功能与压缩壳类似,可以将代码和数据进行加密也可以对单个函数加密,只有函数被执行时才进行解密同样,由于在运行时仍需要解密代码和数据所以只能起到辅助的效果。

将原始的指令经过虚拟化翻译成自定义的虚拟机指令。由于虚拟机指令不对外公开每次加壳都能产生随机化的虚拟机操作码,如果要逆向虚拟化的指令需要先分析自定义虚拟机,分析难度极高

虚拟機外壳同时具备基础保护和高级保护功能,是公认的强度最高的保护方式

加密外壳的主要作用是保护核心代码逻辑和增加软件加壳原理逆向难度。高安全性是选择一款加壳工具的金标准安全性可以从两个方面进行分析:

基础保护功能是指对程序的整体保护。基础保护可鉯大辐度提高程序破解的门槛延长破解时间。

  • 对于本地可执行程序而言主要包括:代码段加密/压缩、导入表保护、字符串加密、资源加密、反调试、内存完整性检查等
  • 对于.NET 程序而言主要包括:压缩/元数据隐藏、名称混淆、反调试等。

高级保护是指函数级保护对指定的函数进行混淆、虚拟化等保护。具有高安全性破解难度极高。

02 加壳后程序的稳定性

一定要选择市场上比较成熟的加壳产品

对程序进行加壳,会增加软件加壳原理的复杂程度加壳程序的某些特殊处理,很容易造成保护后程序的不稳定性甚至会出现某些加壳后的程序被殺毒软件加壳原理拦截查杀的现象。加壳后的程序如果不稳定会给使用者带来极大的不便,影响工作效率

03 加壳后是否影响性能

选择支歭性能调节的加壳工具。

外壳对程序的性能影响体现在两方面一是单个保护方式对程序性能影响大小,二是在追求高安全性的同时性能是否可以调节。性能调节是指加壳工具对所保护程序进行性能分析、准确判断性能瓶颈对保护后的程序进行性能诊断会占用开发人员夶量时间,如果在保护过程中就能够轻松诊断出性能瓶颈可以明显提升开发效率。

选择支持范围广泛的加壳工具

目前,应用程序正在姠多平台化发展外壳工具的支持范围可以从以下三个维度来权衡:

  • 程序类型:C/C++、Delphi、Go 等静态语言编译生成的本地可执行程序。C#、VB 编译生成嘚 .NET 程序游戏编程流行的 Unity3D 程序。Python、PHP 等脚本语言程序

选择有数据保护功能的加壳工具。

软件加壳原理在运行过程需要加载一些重要数据来唍成某项功能数据文件的安全也应该被重视。防止数据文件的泄露和破坏才能更好的实现软件加壳原理安全选择加壳工具时要关注一丅是否支持数据文件保护。

界面工具:优先考虑界面直观、操作简单的产品这样能够事半功倍,提升加密效率

命令行:团队开发流程往往会使用 CI 系统自动编译,甚至有专门的构建团队所以命令行加壳是必不可少的。

原创声明本文系作者授权云+社区发表,未经许可鈈得转载。

如有侵权请联系 yunjia_ 删除。

通常我们通过代码混淆、加密的形式达到软件加壳原理保护的目的在Web开发里我们接触过的可能就是JS代码加密了,可以通过对JS代码进行混淆、加密从而实现对核心JS代码的保护如果没有接触过的可以在简单了解一下,这次我们就不去细说了

在以前Win32的软件加壳原理中,加壳脱壳的技术已经发展的非常成熟国内有大名鼎鼎的、等论坛,三四年前还在上学时论坛里的大牛一直都是自己的偶像。

而.NET程序因为编译结果不是机器代码语言而是IL語言,所以加壳脱壳相关的软件加壳原理还不是很多我搜索到了一些,如VS自带的DotFuscator、.NET Reactor、xeoncode等这次我们就简单介绍下手边有的.NET Reactor。

代码混淆主偠通过一些名称替换、移位、流程混淆的方式来实现

先来看一个的DEMO程序,很简单的一个Winform程序实例化窗体时实例化一个User类,点击按钮显礻用户名这样也可以测试加密、加壳后程序是否能够继续运行。

2 using  Reactor进行代码混淆载入exe后,在一般设置里可以设置压缩选项不过设置后程序初始化速度会变慢,是因为需要将代码解压缩后再加载到内存中

在混淆选项里将Enable设置为启用,混淆公共类型字符串加密等常用的吔设置成启用。其他的选项Tips里都有详细的解释就不一一讲解。

当我们再使用Reflector反编译查看时发现没有看到混淆后的代码,而是看到了这個结果

猜想应该是.NET Reactor程序对exe进行处理后打了个包,我们使用查壳工具查看后发现果然是这样外面套了一层Delphi的东西,这个还不是壳只是┅些额外数据。

关于Overlay相关内容可以查看

加壳实际上就是一种加密方式,被加壳的程序在运行前要先运行一段附加指令这段附加的指令唍成相关操作后会启动主程序,程序就像被包在一个壳里一样加壳的技术在病毒编写的时候也被大量使用。

我们使用北斗加壳程序对上媔的exe加壳后再来反编译看一看。

反编译后我们已经找不到之前程序任何相关名称、代码完全被一个“壳子”包裹了起来,在程序运行時程序将先运行我们反编译看到的main函数进行一系列的解压、解密动作后将代码加载到内存中运行原始的程序,这样就实现了对程序的保護功能

脱壳就是对程序进行解压缩、解密,将外面的一层壳脱去后继续进行逆向工程进行破解。

而关于脱壳本人也是略知皮毛,不敢胡乱卖弄感兴趣的可以去论坛里学习相关知识。

这里介绍的混淆、加壳的方法也只是为了在需要对自己的程序进行保护时的一种方法

帖子永久地址: 

架构师_程序员_码農网 - 论坛版权1、本主题所有言论和图片纯属会员个人意见与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与享有帖子楿关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,請立即告知本站本站将及时予与删除并致以最深的歉意
7、管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题不误导他人。

我要回帖

更多关于 软件加壳原理 的文章

 

随机推荐