C#程序发布时,一定要好好地保护,不然你会后悔的
上次分享一个C#混淆开源项目《一个对C#程序混淆加密,小巧但够用的小工具》,发现大家都非常感兴趣,但也发现很多人,不了解为什么没有混淆,就会很容易被破解。
所以今天给大家做一个教程:如何通过工具来反编译代码、修改代码来实现软件的篡改,并实现通过.NETReactor进行加密混淆。
一、演示项目
先创建一个演示项目,方便后续破解和加密使用。
1.1、创建控制台项目:ConsoleAppRemo
1.2、选择框架版本,演示用的是.Net6.0
1.3、实现一个功能:2个数字相加
// See https://aka.ms/new-console-template for more information
int num1 = 3;
int num2 = 4;
Console.Write("num1 + num 2 = ");
Console.WriteLine(num1 + num2);
Console.Read();
1.4、运行效果
二、采用dnSpy破解
下面一起来看看,通过工具对演示项目,进行反编译和修改代码。
2.1、安装dnSpy
dnSpy是Github开源项目,我们到Github下载就行
工具界面:
2.2 、打开dll文件
通过菜单:文件,打开ConsoleAppRemo.dll文件。
2.3、查看代码
通过反编译的结果看,代码完全暴露出来了。
2.4、修改代码
在窗口鼠标右键=》编辑IL指令,打开指令编辑窗口
编辑窗口
2.5、修改变量把数字改为5,并保存
保存效果如下:
2.6、导出dll
选择菜单上的保存按钮,模块类型选择dll,并点击确定,覆盖更新dll。
通过修改时间,我们就可以看到dll已经被更新了
2.7、运行效果
点击exe运行,运行结果已经改变。
到这里,可以说是,我们完完全全地破解了程序了。相信大家看到这,就会发现程序发布时,为什么要进行加密和混淆了。
下面我们一起看看,通过.NETReactor加密情况,以及能否破解。
三、.NET Reactor加密
3.1、下载安装
安装过程比较简单,这里就不展示了。
下载地址:https://www.eziriz.com/reactor_download.htm
3.2、选择待加密的dll文件
选择需要加密的dll文件
3.3、执行加密
点击Protect按钮,进行加密。
3.4、加密成功
工具会自动运行,打印加密的情况(工具是收费的,可免费试用14天)。
执行成功后,工具会创建文件夹,并把加密的文件放入
3.5、检验加密后,我们系统执行情况
拷贝exe文件到Secure文件夹里,并运行,我们的系统可以正常运行
3.6、dnSpy查看反编译情况
通过反编译工具打开加密后的dll,我们会发现文件名、代码都已经被混淆、加密。
总结
通过加密后,还是能比较好地起到保护的效果。通过工具进行加密混淆,主要的目的是增加阅读难度、增加陷阱让破译需要更多的时间与成本。
另外市面上加密工具很多,下面梳理几个比较常用的:
ConfuserEx:免费开源的,比较好,只支持.NET Framework,较久未更新。
.NET Reactor:收费,比较好,一直有更新。
Dotfuscator:收费,比较难用,中间还会出错。
Smart Assembly:收费,只有代码混淆,效果不好。
今天就跟大家,分享到这边了,希望对您有帮助**,欢迎点赞关注转发。**
- End -
推荐阅读
一个界面美观、支持团购、拼团、直播、秒杀等营销功能商城系统
盘点5个C#实用的Word、PPT、Excel、Mail第三方库
盘点5个.Net开发的服务器进程监控、性能监控、任务调度的开源项目
盘点10个.NetCore实用的开源框架项目
.Net Core导入千万级数据至Mysql
C#程序发布时,一定要好好地保护,不然你会后悔的相关推荐
- QML程序发布时无法正常运行的解决办法
1.运行依赖 以我的一个项目为例,此程序使用QQuickWidget将QWidget和QML结合.程序debug版发布时依赖的库如下: 大部分dll可以在Visual Studio中调试时的控制台中看 ...
- 微信小程序发布时需要校验违法违规内容、图片,Java后端接口
直接上代码 package com.ink.manager.controller.weixin; import java.io.BufferedReader; import java.io.DataO ...
- Windows下程序打包发布时的小技巧
一.背景 Windows下开发的应用程序在发布时,需要将其依赖的一些动态链接库一起打进安装包里面去.这个时候,快速确定这个程序到底依赖哪些动态链接库变得非常重要.很久以前写过一篇关于Qt程序安装包制作 ...
- 怎样将应用程序发布到Apple store上去 (一)
<script type="text/javascript"> </script> <script src="http://pagead2. ...
- 基于OpenCasCade的程序发布问题
基于OpenCasCade二次开发了一个程序,想采用简单的copy的发布(部署)方式. 但在发布时遇到了很多问题.总结一下. 首先将所有所需的dll拷贝到了执行目录下,然后将程序copy到一台未安装O ...
- 怎么用linux设计一个小程序,“Linux”小程序发布一个月后,我们发现了什么
原标题:"Linux"小程序发布一个月后,我们发现了什么 这一个月来,这个小程序得到了八千多人的使用,一百多位贡献者实际参与了翻译贡献,其中贡献最高的"Datura st ...
- Android 应用程序发布流程注意事项(整理)
一点关于Android应用程序发布过程的东西,用来告诉那些想发布自己的应用程序的朋友们,在发布过程中会遇到哪些的事情. (1) 发布应用程序之前,首先要做的事是为你的应用做数字化签名认证. ...
- 如何将MATLAB程序发布为独立的不依赖MATLAB环境可执行的程序包(基于Matlab R2015b版 )
如何将MATLAB程序发布为独立的不依赖MATLAB环境可执行的程序包(基于MatlabR2015b版) 关键字:MatlabR2015b,可独立运行,可脱离Matlab环境,m文件,Matlab程序 ...
- Android应用程序打包时,出现错误:XXX is not translated in af (Afrikaans), am (Amharic), ar (Arabic).....(...
转自:http://blog.163.com/shexinyang@126/blog/static/136739312201492144928812/ 问题:当我们开发完成一个Android应用程序后 ...
最新文章
- 【Qt】Qt再学习(十四):QGraphicsView
- python多项式运算_python – 用于计算“多项式系数”的numpy / scipy函数
- iOS中引用计数内存管理机制分析
- 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】...
- wxWidgets:wxRegKey 类演示
- HDU4669_Mutiples on a circle
- 2分钟 Docker 部署 SprinBoot 集成 Flowable 工作流引擎
- 帕累托最优生活例子_创业者:用博弈解决生活的难题
- Android 不能勾选 Project Build Target
- 【Python实例第26讲】一个主成分的例子
- InDesign 教程,如何创建沉浸式文档?
- Google Colab使用笔记
- 阿里云视频点播配置步骤
- USB数据采集卡,通过树莓派微型电脑,实现高速以太网数据采集
- php cpu飙高,PHP-FPM进程CPU 飙高的原因及解决方案
- Python numpy.column_stack函数方法的使用
- 屏幕缩放和注释工具(ZoomIt)
- TDB中多个model情况下使用fuseki查询
- 宝宝成长季4天-我出生啦!
- LintCode 两个数组的交集