2012-03-28 146 views
4

有没有办法在编译的应用程序中很难找到静态密码?在C源代码中加密密码

我需要两种不同的应用程序。一个是Windows的轻量级FTP客户端,只能连接到一个硬编码服务器。另一种是Objective C游戏,它允许用户创建级别包并使用密码来保存它们。他们可以在没有密码的情况下播放,但不能在关卡编辑器中打开。我用AES加密密码,但我必须以某种方式保存解密密码。

我迄今发现的唯一想法是将密码保存为一个字符串,而不是一个字符串,而是多个字符串。这对于游戏来说可能非常有用,因为我可以只连接已经存在的字符串。或者我可以将它保存为一个长字符串并使用秘密算法从该字符串中获取密码 - 尽管这引出了一个问题:Windows上的C应用程序或OS X上的Cocoa应用程序是否可以反编译以找到该算法?

有没有更安全的方法来做到这一点?

+0

我想一个对于基本资源检查仍然有效的非常简单的方法是将密码字符串XOR保存为一个数字(单独保存)。然后用相同的数字对它进行XOR'解密'。这不会妨碍反编译或内存检查的严重尝试,特别是如果将解码的字符串存储在内存中达任何时间长度。 – Bob 2012-03-28 16:35:17

+3

http://en.wikipedia.org/wiki/Security_through_obscurity – 2012-03-28 17:00:12

+0

(通过默默无闻的安全性)是将不同的字符串放在一起或将它们与数字异或的东西的类别,对吧? 我想我只是XOR一些字符串,并使用不会听起来像密码的词,如果有人正在积极寻找一个。我不想过多考虑它,因为如果攻击者在自己的系统上安装了应用程序,每个加密都可能被破坏。非常感谢提示,尽管如此,就像没有将解码的字符串保存在内存中的时间太长:) – 2012-03-28 17:26:42

回答

-2

即使在编译的C源代码中,字符串文字通常也会保留并存储在二进制文件的某个位置。

你可以做什么是一个类似的方法,以(如何正确实施)Web应用程序验证登录信息,该信息存储在数据库中。只需以散列形式存储密码即可。通常,该方法是使用MD5 +盐(here is a description and some sample PHP code)。您可以做的不是传输或存储明文密码,而是散列用户输入,并根据存储的散列值检查散列值。匹配哈希对应于匹配的密码。

编辑

这不会与FTP服务器的情况下帮助不过,因为你不能修改其源代码

+0

感谢您的回答。这可能适用于游戏中的密码,但不适用于FTP应用程序或等级代码,我甚至没有提到它。我的坏:) – 2012-03-28 17:23:19

+0

改变了下来,至于FTP你会使用散列作为密码,这将相当于纯文本,或密码本身,哈希是一种方法... – 2012-03-28 20:08:31

+0

没有任何意义。哈希在这里没有帮助。 – CodesInChaos 2012-03-28 20:11:11

2

可以在Windows的C应用程序或Cocoa程序在OS X只需反编译找到该算法?

是的,所有人造的都可以被另一个人破坏。 永不使用可逆算法存储敏感数据 - 他们将被反向工程。您可以存储的哈希值,作为sidran32写道,但它并不能帮助你与客户

2

为什么要通过反编译的痛苦 - 一个简单的

$strings <binary> 

将做到这一点:)在代码存储你的密码永远不会工作:您可以拆分它们,对它们进行编码,以任何您喜欢的方式对它们进行加密 - 当您需要重新组装这些零件以验证它们时,会有一点意义。这正是攻击者可能会用调试器进入的地步。我给了一个answer一个类似的问题与更多的细节。

唯一真正安全的方法是将密码作为带外信息存储在代码之外(或二进制文件)。数百万破解的微软或其他产品可以证明这些类型的数字版权管理不会长时间工作。

+0

我知道字符串命令,但我想如果我选择的密码看起来不像密码,人们永远也找不到它。它如何与调试器一起工作?你能否在内存中找到字符串,即使我立即释放它? - 另外,正如我所说,我意识到如果有人真的想要找到关卡代码,他们可以 - 我的意思是,*所有*加密可以用足够的努力打破。我只是在寻找一个解决方案,使它不值得费心。 – 2012-03-29 15:34:39

+0

@Alex如果您可以将'__asm {int 3};'调入反汇编任何可执行文件,或者甚至只是简单地以某种方式进入运行,攻击者就可以让程序在程序中的任何时刻处于静止状态流。如果字符串在任何时候都以完整形式存在内存中,即使您快速释放它,它也很容易受到攻击。而且,即使它被释放,该字符串仍将保留在内存中,直到程序(或另一个)写入该内存位置。这就是他所指的。 – 2012-03-30 01:06:08

+0

哦,好的 - 我不知道。所以在任何情况下,密码都可以在10秒内找到? - 我想知道它是否可以帮助以某种方式使用文件内容(即非秘密的级别)并使用秘密算法将其变为密码。 – 2012-03-30 09:37:18