谁能推荐什么是加密可执行文件的好方法?我尝试使用 AxCrypt 但我不喜欢这种用法,即您指定了密码,而启动 exe 的人需要指定密码。有没有办法加密一次,用户只需运行exe而不指定任何密码?
5 回答
基本上是没有意义的。如果它是一个 .NET 或 Java 程序,混淆器可以提高性能并减小可执行文件大小,并使逆向工程变得困难。打包程序可以减小可执行文件的大小。签名可以向您的用户保证您构建了程序。但是为了隐藏可执行代码而对可执行文件进行加密是毫无意义的。
知道如何自我解密的程序将包含黑客破坏程序所需的所有信息。你正在用钥匙开锁。但是,让我们假设您想为进入您的程序设置一个小障碍。也许您的游戏中有作弊码,并且您不希望有人能够在您的程序上运行“字符串”并查看它们。
我的建议是用一个像UPX这样的程序来打包你的程序。这会进一步混淆磁盘上的程序。您的基本审讯技术只会看到微小的减压器。然而,一个坚定的黑客会很快识别出压缩程序并解压缩它。在任何一种情况下,一旦程序在内存中运行,就可以获取进程的核心转储,或将调试器附加到它。在大多数硬件上,您无法采取任何措施来防止这种情况发生。
如果您只希望特定用户运行该 exe,则可以在 Windows 下定义策略,允许您仅为特定用户运行它。
但是如果你想隐藏代码:因为你没有提到你用来制作 exe 的语言。如果它的 c/c++ 已经足够加密,则需要一些工作才能从中获取代码。如果它的 java 或 csharp 有你可以使用的混淆器。这会有点难以从 exe 获取代码。
你不明白这个问题,程序员有这样的想法很正常。但作为一个有道德的黑客,很明显他想绕过杀毒软件而不是隐藏代码,无论如何你可以使用 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