【问题标题】:If the following encrypt/decrypt code is used, would decompiling the code enable decryption?如果使用以下加密/解密代码,反编译代码会启用解密吗?
【发布时间】:2012-05-24 13:01:53
【问题描述】:
Option Explicit 

Dim sSecretData
sSecretData = "Here is some very secret data." 

' Build up the key
Dim wshNetwork, sComputerName
Set wshNetwork = WScript.CreateObject("WScript.Network") 
sComputerName = wshNetwork.ComputerName

Dim capEData
Set capEData = CreateObject("CAPICOM.EncryptedData")

capEData.Algorithm = 3 'Use 3DES
capEData.SetSecret sComputerName 
capEData.Content = sSecretData

Dim sCipherText
sCipherText = capEData.Encrypt

capEData.Algorithm = 3
capEData.SetSecret sComputerName 
capEData.Decrypt sCipherText

Dim sPlainText
sPlainText = capEData.Content 

MsgBox "Original data: " & sSecretData & chr(13) _ 
  & "Encrypted data: " & sCipherText & chr(13) _ 
  & "Recoverd data: " & sPlainText

【问题讨论】:

  • 听起来您正在尝试实施某种 DRM 系统。 DRM 的第一定律是它不起作用:如果您的用户的计算机可以解码数据,那么您的用户可以自己获取数据。

标签: encryption vb6 cryptography decompiling


【解决方案1】:

这个更简单:关键就是计算机名,算法是众所周知的。因此,可以找到您计算机名称的每个人(这包括同一交换机上的每个人,即使他的 PC 被入侵,并且取决于您的邮件系统,每个您曾经发送过邮件的人)都可以无限制地解密。

如果您的 PC 崩溃了,并且您为新安装的设备指定了不同的名称,那么您也将不走运。

编辑

根据讨论:拥有 硬编码 密钥、拥有 反编译器 和同时拥有 secret 密钥是不可能的。

您的方法(使用因计算机而异的东西)非常好,但是您应该依赖一些不能像计算机名称(或 MAC 地址...)那样容易被读取的东西。想到处理器序列号或 Windows 产品 ID - 两者都不容易远程读取,但请记住,如果有人可以访问这台机器,游戏就结束了!

【讨论】:

  • 如果我需要在代码中包含它并保密,我可以使用什么作为“密钥”?
猜你喜欢
  • 2010-12-13
  • 2023-04-05
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
相关资源
最近更新 更多