1

我正在尝试在 Mac 上使用 Objective-C 使代码难以破解。

我必须做的一件事是检查应用程序是否被破解。

我是 Objective-C 和 Xcode 的新手,无论我想象如何测试我的应用程序,我总是以可以轻松修补的基本测试结束。

例如:假设我要测试二进制文件的某个部分中是否存在给定值。该操作将类似于:

“这个值 = x 吗?” 如果否,则已破解。

这很容易破解。黑客可以轻松地修补测试并使其始终为真。

我试图想象一些可以测试某些东西的东西,而不是看起来可以很容易修补的测试。

我知道我无法 100% 阻止盗版,但至少我试图让事情变得更加困难,以阻止大部分的破解者。

任何关于这样的事情的想法可以在没有的情况下完成并且对于查看二进制文件的人来说变得困难?

谢谢你的帮助。

4

5 回答 5

11

除非您的软件与安全相关,否则我认为更好的方法是更改​​您的许可计划,使该软件对几乎不使用该软件的家庭用户免费,而对组织来说却是昂贵的。

由于法律问题,组织很少使用破解软件,作为偶尔使用的家庭用户不喜欢偶尔花费 100 美元来使用该软件。

这将带走破解者破解软件的动机。

于 2009-10-17T00:49:22.323 回答
8

不。请记住,(好)破解者破解软件是为了好玩。您的保护计划越详细,对破解者来说就越具有挑战性和乐趣。另外,可能非法使用您的软件的人无论如何都不会为此付费,即使他们无法获得破解版。你的时间会花在让你的产品变得更好上。

话虽如此,您可以通过删除可执行文件的调试符号来阻止大多数业余破解者。您必须在项目首选项中启用此功能。

于 2009-10-17T05:53:19.130 回答
5

All really strong protection schemes I'm aware of use self-modifying code extensively, one way or another. However, this is definitely not something a beginner programmer should be prepared to handle.

于 2009-10-17T06:39:00.863 回答
2

让他们难以评估您的方案,并定期更改您的方案。一个教科书示例是以奇数间隔执行检查,这对于他们在许可证评估过程中查找检查的来源和所有交叉引用将非常耗时。将其与多项检查结合起来,您应该为大多数版本做好准备,只需在创建方案时添加大量的创造力。此外,玩他们的游戏也很有趣;让他们发布一个在裂缝发布后 1 个月失败的裂缝......好吧,这可能只会适得其反,但如果你一开始就努力与他们抗争......

这是一个有趣的社区;如果您对此不熟悉,那么研究社区也将是有益的。如前所述,破解是为了挑战,一些产品版本将简化他们的“免费广告”复制保护方案。所以......你不能真的太努力地打击破解,因为如果有人下定决心,那只会浪费你的时间并让你感到沮丧。观察文化可能很有趣。如果您承认它被破解等同于“流行软件”,那么您可能处于最佳位置,因此,您应该感到高兴。你通常不应该为此失眠(当然也有例外)。此外,由于这个问题列在 Mac 类别中:我不会挖掘统计数据,

If you're a beginning programmer, clever use of that information (and acceptance) may be all you need to know to effectively fight crackers.

于 2009-10-17T06:29:29.407 回答
1

One danger is that if you go to overly great lengths, you may end up breaking things for legitimate users. A number of Atari's arcade machines in the 1980's had code which would do various interesting things if it detected that the ROM was altered. The effects would be subtle; for example, a game called Tempest would award unlimited free games if the game ended when a player had certain score values. In the release ROM of Tempest, however, the checksum was calculated incorrectly, so all machines had this behavior. I'm not sure to what extent this bug affected earnings in fielded machines, but I would imagine some operators would have been rather upset upon discovering it.

于 2010-11-28T23:38:29.607 回答