2

我只是想知道编译形式的源代码是否真的存在安全问题?

我在想,既然源代码已经编译成机器代码,那么当机器已经在执行指令时(即编译的源代码)不应该有任何安全问题。

我在网上没有找到任何好的和相关的解释。

4

2 回答 2

2

当然,他们有安全问题。

例子:

  1. 想象一下一个简单的 C/C++ 代码,它正在将标准输入中的字符读取到 char 缓冲区中,而程序员没有检查输入的长度。这样的代码容易受到缓冲区溢出的影响。

  2. 逆向工程。有了机器码,我们可以通过反编译器获得更高级别的可读性更高的代码。如果有足够的时间,您可以找到硬编码的密钥或一些秘密算法,例如在发送高分时在游戏中使用的加密方法。

  3. 在运行时篡改内存中的变量。例如,您有一个得分为 100 的游戏,因此您正在分配给已执行进程的内存中寻找这 100,假设您找到了 4 个具有此值的地址。稍后你又得到 10 分,所以你有 110。所以,你正在检查这 4 个地址 - 其中一个现在包含 110。如果最终你找到了 1 个地址 - 宾果游戏。现在你可以用你喜欢的任何东西覆盖它,例如 999999。

于 2013-09-17T09:21:41.517 回答
0

编译代码的主要安全问题之一是你不知道它做了什么——你不能轻易地检查它。这使得您必须只运行来自受信任来源的编译代码(软件)......

例如,我可能会给你写一个猜我的数字游戏,你可能会喜欢它,但谁能说当你忙着猜数字时,我还没有开始一个新的执行线程,它忙于复制你机器上的所有数据?

还有诸如缓冲区溢出、SQL 注入、Peek 'n' Poke 等问题仍然存在。

编译不是为了安全,而是为了效率。如果您遇到这种期望的安全性,您可能想要研究混淆,但那是完全不同的蠕虫罐......

于 2013-09-17T09:28:50.030 回答