代码安全-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 --> 添加/删除管理单元 --> 证书模板

0
1
2
3



mmc.exe --> 添加/删除管理单元 --> 证书颁发机构

4
5



生成拥有自签名CA的代码签名证书和私钥文件

mmc.exe --> 添加/删除管理单元 --> 证书 - 当前用户

6
7
8
9

代码证书注册的证书属性配置参数如下

使用者名称
公用名=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

完整配置如下图
10
11
12
13
14

综上步骤完成代码签名证书的证书模板生成、代码签名证书的生成、私钥的导出和设置私钥密码
15



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		# 软件验签


参考来源

  1. Sn.exe(强名称工具) - .NET Framework | Microsoft Learn
  2. SignTool.exe(签名工具) - .NET Framework | Microsoft Learn
  3. 为Windows Defender应用程序控制创建代码签名证书 - Windows Security | Microsoft Learn
  4. 创建自签名证书, 对exe文件进行数字签名
  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android 代码混淆加密是一种保护应用程序的方法,可以防止反编译和代码分析。下面是一个示例,演示如何使用 ProGuard 进行代码混淆加密。 1. 配置 ProGuard 在 Android Studio 中打开 app 模块的 build.gradle 文件,在文件中添加以下代码: ``` android { ... buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } ... } ``` 这将启用 ProGuard,并告诉 Android Studio 使用 `proguard-rules.pro` 文件中的规则来混淆加密代码。 2. 编写 proguard-rules.pro 文件 在项目的 `app` 目录下创建一个名为 `proguard-rules.pro` 的文件,并添加以下规则: ``` # 防止类名、方法名、字段名被修改 -keepattributes Signature,InnerClasses,*Annotation* # 防止类名被修改 -keep class com.example.myapp.** { *; } # 防止方法名被修改 -keepclassmembers class com.example.myapp.** { *; } # 防止字段名被修改 -keepclassmembers class * { ** myFieldName; } # 混淆代码 -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable # 加密字符串 -encryptstrings ``` 这些规则将防止类名、方法名和字段名被修改,并使用默认的 ProGuard 混淆代码。`-encryptstrings` 规则将启用字符串加密。 3. 运行 ProGuard 在 Android Studio 中,选择 Build > Generate Signed Bundle/APK,选择 APK,然后按照向导的指示生成一个签名的 APK。Android Studio 将自动运行 ProGuard,并混淆加密您的代码。 以上就是一个 Android 代码混淆加密的示例。请注意,代码混淆加密并不能完全保护您的应用程序,只能增加攻击者分析和反编译代码的难度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

歪果仨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值