【问题标题】:How do I embed client id in the c # setup project? (while downloading it from my website)如何在 c# setup 项目中嵌入客户端 ID? (从我的网站下载时)
【发布时间】:2021-02-23 18:42:25
【问题描述】:

我有一个用c#开发的安装文件,当我的客户从我的网站下载安装这个文件时,我无法理解哪些客户在使用这个exe。我有一个设置文件,但我有 100 个客户端。我必须在下载安装文件时将客户的 ID 保存在某处,并在安装阶段将其显示给我的应用程序。我找不到怎么做。

【问题讨论】:

标签: c# windows setup-project


【解决方案1】:

您可以通过在客户下载可执行文件并且您知道客户 ID 时将客户 ID 注入可执行文件本身来执行此操作。如果您将客户 ID 数据附加到可执行文件的末尾,那么在启动可执行文件时,您可以让可执行文件自行读取并从其自己的二进制文件中解析客户 ID。这不会导致可执行文件的行为发生任何变化。

但是,如果您的可执行文件已签名,则这样做会使证书无效。为了缓解这种情况,您可以修改可执行文件的标头并调整一些值以考虑二进制文件的新大小。

所需的具体更改是:

  1. 定位 PE 标头 (PE) 的开头
  2. 跳过 COFF 标头(+=28 字节)
  3. 转到 Windows 特定的可选 PE 标头中的认证表条目(COFF 后 +=120 字节;总计 +=148 字节)
  4. 更改 IMAGE_DATA_DIRECTORY.Size 中定义的证书表的大小以添加有效负载的大小。
  5. 转到定义的 IMAGE_DATA_DIRECTORY.VirtualAddress 位置。这是文件中证书表的绝对位置。
  6. 在 PKCS1_MODULE_SIGN.dwLength 内再次更改标头的大小
  7. 这通常应该是可执行文件的最后一个部分;所以转到最后并添加有效负载
  8. 可能计算文件的新校验和

如何在不使签名无效的情况下修改可执行文件的来源:https://blog.barthe.ph/2009/02/22/change-signed-executable/

【讨论】:

    猜你喜欢
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2018-05-13
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多