如何把.net应用程序防止他人反编译,dll打包并搭建成一个合格的安装包
背景知识:
在理论上,任何 .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],成功将应用程序打包成一个安装程序了。
大功告成,你可以双击来安装这个应用程序了。
如有疑问,请大家积极评论,我会尽我所能解答的。