C++ 如何阻止加密字符串的反转?

C++ 如何阻止加密字符串的反转?,c++,mysql,encryption,C++,Mysql,Encryption,我不知道这个问题是否适合这样做,但我还是把它贴了出来,因为我很好奇是否有任何具体的解决办法 我在我的游戏中使用MySQL连接器,以便提供可靠和持久的连接来存储和检索游戏中游戏服务器的服务器列表。 我必须使用MySQL DLL,因此很明显我使用MySQL进行连接 不过,这没关系,上周我的一个黑客朋友提出测试我的加密MySQL密码是否以加密形式存储,并在运行时解密,他成功地获得了所有密码,只丢失了一个字符 他告诉我,他在一个mysql DLL中搜索了mysql_connect函数,并在运行时截获了代

我不知道这个问题是否适合这样做,但我还是把它贴了出来,因为我很好奇是否有任何具体的解决办法

我在我的游戏中使用MySQL连接器,以便提供可靠和持久的连接来存储和检索游戏中游戏服务器的服务器列表。 我必须使用MySQL DLL,因此很明显我使用MySQL进行连接

不过,这没关系,上周我的一个黑客朋友提出测试我的加密MySQL密码是否以加密形式存储,并在运行时解密,他成功地获得了所有密码,只丢失了一个字符

他告诉我,他在一个mysql DLL中搜索了mysql_connect函数,并在运行时截获了代码

我看了一下,但是没有回答我的密码字符串被提取的情况,我开始担心在我的使用情况下使用MySQL是否是一个错误,但是我相信在任何程序中都可能发生同样的事情

我可以防止这种类型的攻击吗? 我的decrypt函数是否应该返回字符串以外的内容,或者是否可以截取函数中的任何内容

链接问题的一个答案是:

最简单的方法是用xor或rot-13等琐碎的东西对它们进行加密,然后在使用它们时动态解密。这将消除对它们的随意观看,但它不会阻止任何有丰富倒车经验的人

我的假设是,黑客设法扭转了加密,泄露了密码

大致代码如下:

string server = "crysiswars2.communication.zyboxinternational.com";
mysql_connect(server, decrypt("randomuser1"), decrypt("randompassword2"), decrypt("myport"));`

加密保护源和目标之间传输中的数据。它不能防止端点受损


您需要的是端点安全性。你的黑客朋友是如何获得运行代码的?应该在服务器上。您没有意外地将MySQL代码放在本地执行的客户端代码中,是吗?

基本上,DLL注入+MySQL\u connect hook=这就是攻击者从您自己的函数中获取已解密密码的方式。 检查mysql_connect函数的第一个字节(是否挂接)如何?
如果first byte==JMP或其他不应该的值,那么就不要调用该函数。

No。在你的情况下,黑客只是从调用堆栈中获取数据。此时已完成解密。关于这一利用漏洞的行为,他正在有效地调试盒子上的代码。一旦他到了,你就不能阻止他。这是一种端点攻击,显然端点没有得到足够的保护。客户端需要MySQL代码,因为它需要检索服务器列表。除了MySQL之外,我不知道还能用什么..将MySQL代码包装在HTTP API中。客户机现在执行一个简单的HTTP GET。您的Web服务器具有密码,但黑客无法修改服务器。修改HTTP客户端并不能让他获得密码。这只会让最天真的黑客望而却步。您认为您的检查代码会发生什么变化?对,第一条指令将被修补到RET。这种保护在1970年经常被破坏,你必须非常幼稚才能在2014年使用。啊,好吧,那也是真的,如果它是内联的,就没有验证码。好吧,直接从客户机连接数据库是有史以来最糟糕的做法。@jakubinf当我告诉你使用MySQL>时,我没有看到你警告我。