如何确保您的代码安全?

时间:2009-10-03 06:45:36

标签: reverse-engineering piracy-prevention

我是程序员。我有大约5年的不同语言编程经验。我担心我的代码速度,关于优化使用我的代码的内存,以及良好的编码风格等等。但是从来没有想过我的代码有多安全。所以我已经反汇编了我的代码,看看黑客可以做些什么。破解我的代码会很容易吗? 而且我看到它!这很容易,因为我正在存储

  1. 序列号为字符串
  2. 加密 - 解密代码
  3. 因此,如果某人对汇编程序知之甚少,他/她可以只是简单的解码器,经过10-20分钟的调试后,我的代码就被破解了!即使它可以通过用记事本打开exe来完成我猜! : - )

    所以我要问的是:

    1. 我应该存储哪种安全信息?
    2. 提供安全代码的常用策略是什么?

9 个答案:

答案 0 :(得分:1)

如果您担心盗版,那么您可以采取多种途径。使代码安全性更加严格(混淆,许可证代码,将软件绑定到特定PC,硬件/加密狗保护等)是一个,但值得注意的是每个软件都可以被破解如果有足够才能的人可能会受到打扰。

另一种方法是考虑软件的定价模型。如果你每次收取1000美元的费用,那么就有很大的动力让某人有机会破解它。如果你只收5美元那么为什么有人会费心去破解呢?

所以需要的是平衡。即使是最基本的保护也会阻止普通人制作随意副本。除此之外,简单的技术(混淆和许可证代码)和合理的定价策略将使大多数潜在的破解者陷入困境,因为它不值得破解。之后,您开始学习更复杂的技术(需要出现的加密狗/ CD才能运行软件,只能在登录到在线许可系统后运行软件),这需要付出很多努力/成本来实施并且显着增加了烦人的真正顾客的风险(还记得当他们购买半衰期但是不会让他们玩游戏时每个人都有多烦恼吗?) - 除非你有一个受欢迎的主流产品(即保护的巨大收入来源),可能没那么多的努力。

答案 1 :(得分:1)

制作网络应用。

答案 2 :(得分:1)

除非有外部服务人员对您进行检查,否则它通常不会受到良好保护 - 并且该服务仍然可能被那些真正想要“破解”它的人欺骗。相反,要相信客户并提供最低限度的版权保护。我确定Joel Spolsky在某个地方有一篇关于这个的文章或播客......这是另一个related SO question

我不知道它是否会有所帮助,但Windows提供了(自2000年以来)检索和存储加密信息的机制,如果需要,您还可以基于每个应用程序对此存储进行加密:Data Protection API({{3} })

这是在机器或用户级别上,但是存储序列号以及使用它的某些键可能比将它们隐藏在应用程序中更好?

答案 3 :(得分:1)

你必须意识到的第一件事是,你永远不会阻止一个坚定的反向者破解任何保护方案,因为代码可以做任何事情,反向器最终将找到如何复制它。您可以获得任何可靠保护的唯一方法是让运送的程序只不过是一个愚蠢的客户端,并且在某些服务器上首当其冲的是逆转器无法访问。

有了这样的话,你肯定可以让它变得更难,因为一个反转者会破坏你的保护。 Obfuscation是实现这一目标的第一步。我没有使用混淆器的经验,但我相信你可以找到一些关于SO的建议。此外,如果你使用像C / C ++这样的低级语言,只需用完全优化编译代码并剥离所有调试符号就可以获得相当多的混淆。

几年前我读过this article,但我仍然认为它的技术今天仍然存在。它是一个名为Spyro的视频游戏的开发者之一,他们谈论了他们用来防止盗版的一系列技术。他们声称,在发布之后的3个月内,破解版本才可用,这相当令人印象深刻。

答案 4 :(得分:1)

你在谈论什么样的安全? 从保护用户数据的角度来看是否安全?如果是这样,请研究一些真正的加密技术并利用现有库来加密您的数据。 win32 API对此非常有用。

但是,如果你正在谈论阻止一个破解者窃取你的申请?有很多方法,但只是放弃。他们放慢了饼干,他们不会阻止它们。

答案 5 :(得分:0)

答案 6 :(得分:0)

执行此操作的一个简单方法是在需要时对所有代码进行xor和xor回复...但这需要对汇编的固有知识...我不确定,但您可以尝试这样:< / p>

void (*encryptionFunctn)(void);
void hideEncryptnFunctn(void)
{
    volatile char * i;
    while(*i!=0xC0) // 0xC0 is the opcode for ret
    {
        *i++^=0x45; // or any other code
    }
}

答案 7 :(得分:0)

首先,您必须定义您的代码应该安全的内容,因为安全是没有意义的。

您似乎担心逆向工程和用户无需付费即可生成许可证代码,但您并未这样说。为了更加努力,您可以通过各种方式对代码和密钥信息进行模糊处理。该区域还有一些技术可以使调试器的使用更加困难,以防止逆向工程师单步执行代码并清楚地查看信息。 但这只会使逆向工程变得更难,而不是不可能

另一个常见的安全威胁是执行不需要的代码,例如通过缓冲区溢出。

答案 8 :(得分:0)

为防止黑客查看您的代码,您应该使用混淆器。混淆器将使用各种技术,这使得难以理解混淆的代码。使用的一些技术是字符串加密,符号重命名,控制流混淆等。检查Crypto Obfuscator还有外部方法调用隐藏,反反射器,反调试等

目标是在潜在黑客的道路上建立尽可能多的障碍。