c# - 如何在 c# setup 项目中嵌入客户端 ID?(从我的网站下载时)
问题描述
我有一个用c#开发的安装文件,当我的客户从我的网站下载并安装这个文件时,我无法理解哪些客户正在使用这个exe。我有一个设置文件,但我有 100 个客户端。我必须在下载安装文件时将客户的 ID 保存在某处,并在安装阶段将其显示给我的应用程序。我找不到怎么做。
解决方案
您可以通过在客户下载可执行文件并且您知道客户 ID 时将客户 ID 注入可执行文件本身来执行此操作。如果您将客户 ID 数据附加到可执行文件的末尾,那么在启动可执行文件时,您可以让可执行文件自行读取并从其自己的二进制文件中解析客户 ID。这不会导致可执行文件的行为发生任何变化。
但是,如果您的可执行文件已签名,则这样做会使证书无效。为了缓解这种情况,您可以修改可执行文件的标头并调整一些值以考虑二进制文件的新大小。
必要的具体更改是:
- 定位 PE 标头 (PE) 的开头
- 跳过 COFF 标头(+=28 字节)
- 转到 Windows 特定的可选 PE 标头中的认证表条目(COFF 后 +=120 字节;总计 +=148 字节)
- 更改 IMAGE_DATA_DIRECTORY.Size 中定义的证书表的大小以添加有效负载的大小。
- 转到定义的 IMAGE_DATA_DIRECTORY.VirtualAddress 位置。这是文件中证书表的绝对位置。
- 再次更改标题的大小,在 PKCS1_MODULE_SIGN.dwLength
- 这通常应该是可执行文件的最后一部分;所以走到最后并添加有效载荷
- 可能计算文件的新校验和
如何在不使签名无效的情况下修改可执行文件的来源:https ://blog.barthe.ph/2009/02/22/change-signed-executable/
推荐阅读
- flutter - 如何修复“您的 Android App Bundle 使用错误的密钥签名”?
- javascript - Firestore 数据未显示在我的平面列表中?
- arrays - 创建一个可以在之后的所有函数中使用的洗牌数组
- google-maps - 如何使用里程确定给定路线上的位置?
- xlsxwriter - Xlsxwriter:如何禁用数据标签中的文本换行?
- c# - 使用 string.Split 时无法将 'char' 转换为 'string' 错误
- reactjs - React 悬念用法
- python - 为什么在创建设备分位数矩阵时出现断言错误?
- python - Imageio 和 cv2 读取图像 - jpeg
- python - 将图像数组转换为字符串