我不知道这个问题是否适合SO,但无论如何我发布了它,因为我很想知道是否有任何具体的解决方案。
我在我的游戏中使用MySQL Connector,以便为商店提供可靠且持久的连接,并为游戏中的游戏服务器检索服务器列表。 我必须使用MySQL DLL,因此很明显我使用MySQL进行连接。
这没关系,但是,我的一位黑客朋友上周提出测试我的加密(MySQL密码以加密形式存储,并在运行时解密),他成功获取所有密码,只有一个单个字符丢失。
他告诉我他曾在其中一个MySQL DLL中搜索mysql_connect()
函数,并在运行时拦截了代码。
我看了this,但没有答案涵盖我的情况(提取密码字符串的地方),我开始担心使用MySQL是否有误用于我的使用情况但是我相信任何程序都会发生同样的事情。
我可以防止此类攻击吗?
我的decrypt
函数是否应该返回字符串以外的内容,或者函数中的任何内容都可以被截获?
相关问题的答案之一说明了这一点:
最简单的方法是使用像xor或rot-13这样的小事件加密它们,然后在它们被使用时动态解密它们。这将消除对他们的随意观看,但它不会阻止任何有逆转经验的人。
我假设黑客设法反向加密,以显示密码。
大致代码:
string server = "crysiswars2.communication.zyboxinternational.com";
mysql_connect(server, decrypt("randomuser1"), decrypt("randompassword2"), decrypt("myport"));`
答案 0 :(得分:4)
加密可保护源和目标之间的数据。它不能防止受损的端点。
您需要的是终点安全性。您的黑客朋友是如何获得正在运行的代码的?那应该在服务器上。您没有意外地将MySQL代码放在本地执行的客户端代码中,是吗?
答案 1 :(得分:1)
好吧,基本上,DLL注入+ mysql_connect hook =这就是攻击者从你自己的函数中获取密码的方式。 检查mysql_connect函数的第一个字节,如果它被挂钩或没有? 如果第一个字节== JMP或其他任何不应该的,那么就不要调用该函数。