4

谁能推荐什么是加密可执行文件的好方法?我尝试使用 AxCrypt 但我不喜欢这种用法,即您指定了密码,而启动 exe 的人需要指定密码。有没有办法加密一次,用户只需运行exe而不指定任何密码?

4

5 回答 5

10

基本上是没有意义的。如果它是一个 .NET 或 Java 程序,混淆器可以提高性能并减小可执行文件大小,并使逆向工程变得困难。打包程序可以减小可执行文件的大小。签名可以向您的用户保证您构建了程序。但是为了隐藏可执行代码而对可执行文件进行加密是毫无意义的。

于 2009-07-16T06:48:08.797 回答
6

知道如何自我解密的程序将包含黑客破坏程序所需的所有信息。你正在用钥匙开锁。但是,让我们假设您想为进入您的程序设置一个小障碍。也许您的游戏中有作弊码,并且您不希望有人能够在您的程序上运行“字符串”并查看它们。

我的建议是用一个像UPX这样的程序来打包你的程序。这会进一步混淆磁盘上的程序。您的基本审讯技术只会看到微小的减压器。然而,一个坚定的黑客会很快识别出压缩程序并解压缩它。在任何一种情况下,一旦程序在内存中运行,就可以获取进程的核心转储,或将调试器附加到它。在大多数硬件上,您无法采取任何措施来防止这种情况发生。

于 2009-07-16T08:27:26.350 回答
0

如果您只希望特定用户运行该 exe,则可以在 Windows 下定义策略,允许您仅为特定用户运行它。

但是如果你想隐藏代码:因为你没有提到你用来制作 exe 的语言。如果它的 c/c++ 已经足够加密,则需要一些工作才能从中获取代码。如果它的 java 或 csharp 有你可以使用的混淆器。这会有点难以从 exe 获取代码。

于 2009-07-16T06:49:49.930 回答
0

你不明白这个问题,程序员有这样的想法很正常。但作为一个有道德的黑客,很明显他想绕过杀毒软件而不是隐藏代码,无论如何你可以使用 Visual Basic。

加密使用此代码

Public Function TripleDES_Encrypt(ByVal input As String, ByVal pass As String) As String
  Dim TripleDES As New System.Security.Cryptography.TripleDESCryptoServiceProvider
  Dim Hash_TripleDES As New System.Security.Cryptography.MD5CryptoServiceProvider
  Dim encrypted As String = ""
  Try
      Dim hash(23) As Byte
      Dim temp As Byte() = Hash_TripleDES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass))
      Array.Copy(temp, 0, hash, 0, 16)
      Array.Copy(temp, 0, hash, 15, 8)
      TripleDES.Key = hash
      TripleDES.Mode = Security.Cryptography.CipherMode.ECB
      Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = TripleDES.CreateEncryptor
      Dim Buffer As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(input)
      encrypted = Convert.ToBase64String(DESEncrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))
      Return encrypted
  Catch ex As Exception
  End Try
End Function

用于解密

Public Function TripleDES_Decrypt(ByVal input As String, ByVal pass As String) As String
    Dim TripleDES As New System.Security.Cryptography.TripleDESCryptoServiceProvider
    Dim Hash_TripleDES As New System.Security.Cryptography.MD5CryptoServiceProvider
    Dim decrypted As String = ""
    Try
        Dim hash(23) As Byte
        Dim temp As Byte() = Hash_TripleDES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass))
        Array.Copy(temp, 0, hash, 0, 16)
        Array.Copy(temp, 0, hash, 15, 8)
        TripleDES.Key = hash
        TripleDES.Mode = Security.Cryptography.CipherMode.ECB
        Dim DESDecrypter As System.Security.Cryptography.ICryptoTransform = TripleDES.CreateDecryptor
        Dim Buffer As Byte() = Convert.FromBase64String(input)
        decrypted = System.Text.ASCIIEncoding.ASCII.GetString(DESDecrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))
        Return decrypted
    Catch ex As Exception
    End Try
End Function
于 2017-09-14T10:27:27.887 回答
-1

我认为您应该使用使用公钥和私钥的软件。是有关其工作原理的更多信息。

于 2009-07-16T06:49:07.857 回答