【问题标题】:Encryption for Executable可执行文件加密
【发布时间】:2019-09-19 12:26:52
【问题描述】:

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

【问题讨论】:

  • 如果你想跳过密码那么加密有什么用?
  • 我想从执行者的角度跳过它。所以可执行代码非常混乱,他们很难进行逆向工程。
  • 你想要的在技术上称为混淆,而不是加密。 280Z28 的回答解释了差异。

标签: executable exe encryption


【解决方案1】:

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

【讨论】:

  • 通过默默无闻的安全性不起作用,因为逆向工程师只会跟踪字节码的堆栈跟踪。他显然是在问,因为他想让防病毒软件无法检测到它。
【解决方案2】:

知道如何自我解密的程序将包含黑客入侵程序所需的所有信息。你正在用钥匙开锁。但是,假设您想为进入您的程序设置一个小障碍。也许您的游戏中有作弊码,而您不希望有人能够只 run 'strings' over your program 并查看它们。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我已经使用 AutoIt 打包了 exe。我尝试这样做的原因是因为对于这个特定的解决方案(我知道这是一种可怕的做法),我需要在包中指定本地管理员凭据。试图看看我是否可以在 AutoIt 在您编译为 exe 时使用的加密之上添加另一层加密。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 2020-11-19
        相关资源
        最近更新 更多