如何把.net应用程序防止他人反编译,dll打包并搭建成一个合格的安装包

发布时间 2023-08-03 17:30:10作者: 邪恶心机炜

背景知识:

在理论上,任何 .NET 程序集(.dll 文件或 .exe 文件)都可以被反编译。C# 是一种托管语言,其代码编译成中间语言 (IL) 或称为 CIL(Common Intermediate Language),然后在 .NET 运行时中执行。反编译工具可以将 IL 代码还原回 C# 源代码,使得原本的 C# 代码可以被查看和修改。

 

最近我的一个WPF应用程序已经写完了,一个exe程序也能正常跑起来,但是bin/debug目录下用到的外部dll过多了,看上去就不好看,而且会被反编译。

工作需求:

1、C#应用程序生成的dll最好隐藏起来,且要防止别人反编译。

2、整个程序打包成一个安装程序,方便别人安装部署

 

实现步骤:

1、将bin/debug下的许多dll封装成一个dll

所需nuget包:Costura.Fody

未安装Fody包前的bin/debug目录结构

 

 可以看到有很多dll

 

安装好nuget包后,重新生成下程序

 立马就只剩应用程序名.dll 了,注意这里的runtimes文件夹不能删,也不能改名,否则程序无法正常运行。

现在把这个文件夹里所有文件复制到任何地方都可以正常运行了,且用ILSPY等反编译工具无法编译出源代码。

 

2、实现了dll的打包,接着要继续实现应用程序的打包,将exe等依赖都打包在一个安装包里

  下载Inno

下载地址:http://www.jrsoftware.org/isinfo.php

找到Download Inno Setup,下载,目前安装包版本是innosetup-6.2.2

安装就正常安装就行。

1、安装完成打开Inno Setup Compiler应用程序,如果有一个窗口打开请关闭它。

2、左上角File——>New——>不打勾,next——>依次填你的应用程序名、版本、发布者名以及发布者网站(随便写,后续你鼠标悬浮安装包后会显示这个tooltip),

3、填好之后next——>这个界面是写存放生成安装包的文件夹名(随便写),next,

最关键的一步,放exe文件和所需的依赖文件/依赖文件夹,记住一定要把runtimes文件夹添加上。如下图:

这里还有个细节,我把runtimes文件夹复制到了AAA文件夹下,这个看上去比较奇怪,但最好这么做。

添加好后next下一步

4、下一步我也不太懂啥意思,但我没打勾选择跳过,next——>这个界面是配置是否配置快捷方式等,建议勾上uninstall,方便程序的卸载,next下一步——>
5、许可证文件,放一些信息的,就是同意协议什么的,你可以放txt文件,也可以放高级一点的rtf文件。next下一步——>

6、install mode,就是选择安装的权限限制,默认是Administrator权限,next下一步——>

7、选择语言,我没找到中文的,就选择了英文,next下一步——>

8、这个界面是写存放安装包文件夹的地址,待会生成的安装包就放在你写的这个地址处,还有可以配置安装包的图标icon,需要.ico文件,next下一步——>

9、这个我没打勾,不太懂,后面next都选是是是,生成了一个*.iss文件,要你起个文件名,随便弄个就行。

10、如果正常的话,inno会编译并显示*** Finished.  [**时间 elapsed],成功将应用程序打包成一个安装程序了。

 

 

 大功告成,你可以双击来安装这个应用程序了。

 

如有疑问,请大家积极评论,我会尽我所能解答的。