防止核心代码泄露和代码合并

你每天辛辛苦苦写的代码很容易被破解?

机密核心模块被盗?

数据库地址和语句暴露?

…这些是由于代码的未混淆加密而泄露的

我们当前DLL文件的风险:

1、直接报价

2. 反编译

3.反思

如果DLL不采取任何措施,以上任何一种都可以达到破解的目的。

如果使用反编译软件:ILSpy,就很简单了,相当于直接复制代码。

那么我们如何保护我们的代码呢?

今天我将带你进入另一个代码世界,代码混淆和DLL集成

目录:

代码制作小程序_代码编程基础知识_代码

01 混淆原理

反编译软件可以让你看到代码并复制它,那么如何防止它被可读或调整呢? 这个时候我们就需要谈谈模糊。

混淆:旨在引起混乱,本质上是将代码中找到的标识符重命名为不可读的内容。 他们可能使用散列技术或字符集的算术偏移,使字符不可读或不可打印。 尽管这些技术似乎有效,但它们是可逆的,因此几乎没有保护作用。

代码_代码制作小程序_代码编程基础知识

编译原理

混淆是一个应用于编译后的MSIL代码而不是源代码的过程(源代码不会被读取和更改),混淆后的功能在功能上等同于你的源代码,它在公共语言运行时上执行(CLR) 并产生与原始 MSIL 代码相同的结果。 (但是,它是不可逆的,即使通过反编译与原始源代码相比,其语义也会有显着不同。)

定位

代码安全演化出了很多加密加壳的软件,比如:被Sun认可的,以Java和.Net混淆器而闻名的软件,其中比较出名的软件有:

工具,它使用了许多其他巧妙的“混淆”算法,使得代码几乎无法反编译(仍然有一定的机会可逆,但成本太大得不偿失)。

代码编程基础知识_代码_代码制作小程序

该工具主要使用混淆技术,这种技术可以在不留痕迹的情况下重命名程序集中的符号、变量、字符串等,并提供许多其他手段来防止反编译。

安装

VS自带混淆软件: ,以前版本会自动安装,2023版本需要手动安装,可以搜索: ,预计10分钟安装完成,安装完成后,需要注册邮箱就可以使用,但是非官方版本限制太多。

介绍的是破解版:4.9

安装后使用时,依赖.Net 2.0和3.5,将首次更新。 需要确认自动更新服务是否开启。

代码编程基础知识_代码_代码制作小程序

代码编程基础知识_代码制作小程序_代码

代码制作小程序_代码_代码编程基础知识

4.9

02 如何加密代码

1、创建新的工程文件。INPUT 选项里 选择你需要混淆加密的 DLL、EXE文件:
2、进入Settings选项 –> 把 Disable String Encryption 设为 NO,即启用字符串加密;
      检查 Disable Control flow、Dsiable Renaming 也为 NO,即保证控制流和混淆功能打开,其他默认。
      
3、进入Rename-> Options选项 勾选“use enhanced overload induction”(使用增强模式),
      注意:不要勾选下方的“ Do not suppress on serializable types”,即序列化类型的变量不加密,否则编译后可能异常;
      “Renaming Scheme” 选择“Unprintable”(不可打印字符,即乱码),也可以选择其他如小写字母、大写字符、数字的方式
      
4、进入String Encryption 选项 include里勾选需要字符串加密的工程文件EXE、DLL等
5、转入Output目录,点击Build,查看输出结果为  Build Finshed 即为成功。

代码编程基础知识_代码制作小程序_代码

脚步

提醒:编译过程中可能会提示代码框架为4.5以上,需要手动配置编译环境的路径。 在->设置编译环境地址,如下图:

代码_代码编程基础知识_代码制作小程序

反编译前后对比

代码中的变量值可以被混淆,这大大增加了阅读难度。 反编译后的代码看起来也像混淆后的代码。

代码制作小程序_代码编程基础知识_代码

混淆前后对比

甚至exe文件也可以被混淆

代码编程基础知识_代码_代码制作小程序

混淆前后对比

03 代码融合

有时我们在系统中关联了过多的第三方DLL,自己构建了多个类库。 当系统发布时,我们发现DLL文件有几十个,这也太夸张了。 如果丢失了一份并且没有复制,整个程序将无法运行。

微软推出了一个包合并工具,可以将程序集合并到目标程序集中。 输入程序集列表中的第一个程序集是主程序集。 当主程序集是可执行文件时,目标程序集将创建为具有与主程序集相同入口点的可执行文件。 此外,如果主程序集是强命名的并且提供了 .snk 文件,则目标程序集将使用指定的密钥重新签名,以便它是强命名的。

它是从命令行运行的:

1、打开cmd,转至安装目录(最好是以管理员权限运行)
2、ILMerge.exe /targetplatform:v4,“.NETFramework安装目录” /target:winexe /union /xmldocs /copyattrs /allowMultiple /internalize /closed /ndebug /out:“新文件” /log “dll1” “dll2” /log:“日志目录”
参数说明:
/targetplatform 输出文件的.net运行版本
/target 生成的文件,winexe应用程序,library DLL文件
/closed 排除引用文件相互引用
/log 需要合并的DLL或EXE,需要把所有的合并的EXE或DLL囊括进来
/ndebug 为非调试版本,即发布版本,如果去掉,将会生成.pdb拓展名的调试文件
/log 日志,可以不加

提醒:要集成的程序最好能通过,否则会出现一些莫名其妙的问题。

图形界面

我们找到了一个图形界面,可以轻松整合

代码编程基础知识_代码_代码制作小程序

图形工具

代码编程基础知识_代码_代码制作小程序

合并反编译

图形界面使用:

看到这里我提出2个问题供大家讨论:

1、打包工具还能做什么?

2、混淆加密后真的安全吗?

好了,今天的主题就讲到这里吧,不管如何,能帮到你我就很开心了,如果您觉得这篇文章写得不错,欢迎点赞和分享给身边的朋友。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注