信息安全相关 - 建设篇
第四章 代码安全-exe的代码签名和代码混淆加密
系列文章回顾
第一章 传输安全-LDAP协议安全加固
第二章 安全审计-Linux用户命令全审计
第三章 主机安全-Windows&Linux的SSH安全加固
代码安全-exe的代码签名和代码混淆加密
前言
本案例仅实测CSharp(C#)的程序集、C/S架构的EXE程序包,其他编程语言的程序包未实测。
实施步骤
1. C#程序的程序集引用使用强命名(可选)
2. Windows Server AD CA 制作自定义的证书模板,用于代码签名
3. 生成拥有自签名CA的代码签名证书和私钥文件
4. C#程序的代码进行混淆加密
5. 给C#的EXE程序文件加数字签名
C#程序的程序集引用使用强命名(可选)
sn.exe /? # 帮助信息
sn.exe -k keyPair.snk # 生成强命名密钥文件
### C# Program程序集设置exe程序集的强命名
<SignAssembly>True</SignAssembly>
<AssemblyOriginatorKeyFile>keyPair.snk</AssemblyOriginatorKeyFile>
Windows Server AD CA 制作自定义的证书模板,用于代码签名
使用PowerShell制作自签名代码证书
参考 创建自签名证书, 对exe文件进行数字签名 完成
Windows Server AD CA 证书模板制作代码签名证书
mmc.exe --> 添加/删除管理单元 --> 证书模板
mmc.exe --> 添加/删除管理单元 --> 证书颁发机构
生成拥有自签名CA的代码签名证书和私钥文件
mmc.exe --> 添加/删除管理单元 --> 证书 - 当前用户
代码证书注册的证书属性配置参数如下
使用者名称
公用名=xxx Technology Inc. # CN
组织单位=xxx Department # OU
单位=xxx Technology Inc. # O
省/市/自治区=GuangDong # S
区域=GuangZhou # L
国家/地区=CN # C
电子邮件=xxx@.xxx.com # E
域组件=domain # DC(选填)
域组件=com # DC(选填)
备用名称
用户主体名称=custom # 必填
用户主体名称=custom.exe # 必填
其他名称
对象ID=1.3.6.1.4.311.60.2.1.3
值=43 4e # 选填. 43 4e 是CN的十六进制
对象ID=1.3.6.1.4.311.60.2.1.2
值=47 75 61 6e 67 44 6f 6e 67 # 选填. 47 75 61 6e 67 44 6f 6e 67 是[省]的十六进制, 本案例写GuangDong
对象ID=1.3.6.1.4.311.60.2.1.1
值=47 75 61 6e 67 5a 68 6f 75 # 选填. 47 75 61 6e 67 5a 68 6f 75 是[市]的十六进制, 本案例写GuangZhou
完整配置如下图
综上步骤完成代码签名证书的证书模板生成、代码签名证书的生成、私钥的导出和设置私钥密码
C#程序的代码进行混淆加密
略
给C#的EXE程序文件加数字签名
signtool.exe /? # 帮助信息 软件加签工具
signtool sign /f <pfx代码签名证书的绝对路径> /p <私钥密钥> /v /fd SHA256 custom.exe # 软件加签
signtool timestamp /t http://timestamp.digicert.com custom.exe # 给数字签名证书添加时间戳, 由timestamp.digicert.com提供可信时间戳
signtool verify # 软件验签