前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么开发者不阻止破解版的产生?

为什么开发者不阻止破解版的产生?

作者头像
xcbeyond
发布2020-03-25 14:51:23
8190
发布2020-03-25 14:51:23
举报
文章被收录于专栏:技术那些事技术那些事

首先看看破解版是如何产生的:

使用调试器创建软件的破解版本。 (调试器是一种特殊类型的软件,它允许程序员将软件分解成不同的组成部分,以便发现错误,从而消除错误。 此外,调试器可以用于逆向工程,或者查看软件内部的内容,以了解其逻辑。 后一种方法主要被恶意软件研究人员用来研究恶意软件(或计算机病毒)的内部。 但是它也可以被攻击者用来“破解”(或者绕过)合法的软件注册,或者有时候用来改变软件的正常行为,例如向其中注入恶意代码。)

对于这个示例,假设正在被“破解”的软件被编译成本机代码,而不是基于 .NET 或 JavaScript 的应用程序。 (否则查看它的源代码就显得有些琐碎了。) 编译后的本机代码要研究起来有点棘手。 (本机意味着代码直接由 CPU、 GPU 或其他硬件执行。)

因此,让我们假设攻击者的目标是绕过软件中的注册逻辑,这样他就不必为此付费。

为了简单起见,让我们假设检查软件注册的原始逻辑是用 c + + 编写的,类似于下面的代码片段:

在本代码示例中,“ RegistrationName”和“ RegistrationCode”是合法软件用户在付费购买许可证后将收到的特殊文本字符串。 (名字通常是那个人的真实姓名或者他的电子邮件地址,代码是一些与名字相关的特殊字符串。)

在上面的逻辑中,名为“ isRegistrationCodeGood ()”的函数将检查“ RegistrationName”和“ RegistrationCode”是否被某些专有方法接受。 如果是的话,它将返回 true。 否则就是错误的。 该外部代码将指定执行将遵循的分支(或范围)。

因此,上面的逻辑要么显示注册失败或退出:

或者,如果注册代码和名称匹配,它将使用名为“ rememberRegistrationParameters ()”的功能将注册详细信息保存在持久存储中(如文件系统或系统注册中心) ,然后显示感谢用户注册的消息:

“破解者”显然希望为他输入的任何注册代码获得第二个结果。 但是他们有一个问题。 他们没有 c++ 源代码。

因此,攻击者唯一的办法就是反汇编二进制代码(总是以 .exe 和 .dll 文件,并且大部分是 Unix 可执行文件的应用程序包) 然后,攻击者将使用调试器来研究二进制代码,并试图找到我上面提到的注册逻辑。

接下来,您可以看到我在 c + + 中展示的代码片段的流程图,该代码片段是通过低级调试器提供的。 或者,代码在编译后将以二进制形式读取:

(为了可读性,我在右边添加了带有函数和变量名的注释。 它们不会出现在攻击者可以看到的代码中。)

(要理解上面显示的内容,攻击者必须对本机代码的汇编语言指令有很好的了解。)

我还需要指出,对于攻击者来说,拥有上面这样的反汇编代码片段是最终的结果。 对他来说,主要的困难是如何在数以百万计的其他类似代码行中找到它。 这就是他们面临的主要挑战。 没有多少人能做到这一点,这就是为什么软件“破解”是一种特殊技能。

因此,在软件二进制文件中找到上面的代码片段之后,“黑客”有两个选择:

1)修改(或修补)二进制文件。

2)对“ isRegistrationCodeGood ()”函数进行逆向工程,并复制其逻辑以创建所谓的“ KeyGen”或“ Key Generator”

让我们回顾一下:

第一个选择很简单。 因为攻击者已经到了这一步,所以他对 Intel x64指令集非常了解。 因此,他们只需将地址00007FF645671418(在屏幕截图中用红色圈出)的“ jnz short loc 7ff645671430”的条件跳转为无条件跳转,或“ jmp short loc 7ff645671430”。 这将有效地删除任何失败的注册代码条目,任何用户类型将被接受为一个有效的注册。

还要注意,这种修改可以通过将二进制代码中的一个字节从0x75改为0xEB 来实现:

但是这种方法带来了修改原始二进制文件的“代价”。 为此,攻击者需要编写他自己的“修补程序”(或者一个小的可执行程序,它将应用我上面描述的修改) 对于攻击者来说,这种方法的缺点是修补原始可执行文件会破坏其数字签名,这可能会警告终端用户或供应商。 此外,攻击者制造的“修补程序”可以很容易地被终端用户的防病毒软件标记和阻止,或者引导犯罪调查人员找到攻击者的身份。

第二个选择有点棘手。 攻击者必须研究“ isRegistrationCodeGood ()”功能,然后将其复制到自己的小程序中,这个程序可以有效地复制原始软件中实现的逻辑,并让他根据任何名称生成注册代码,从而使该软件的任何肆无忌惮的用户无需支付费用即可注册该软件。

许多主要软件产品的供应商了解第二种方法的潜在影响,并试图通过要求所谓的“身份验证”来防止这种影响。这基本上是注册后的第二步,软件向公司的网络服务器提交注册名称,该服务器返回对软件的响应,判断代码是否合法。 这是微软在购买 Windows (他们称之为“激活 Windows”)时做的,也是 Adobe 和许多其他公司做的。 第二步可以在软件运行时在幕后进行,如果是非法获得的,通常会导致先前的注册被取消。

现在你知道软件是如何“破解”的了。

现在来回答为什么不可能防止它。 归根结底,任何软件代码都需要由 CPU (如果是二进制本机代码)或由解释器或 JIT 编译器(如果是 JavaScript 或 Net 代码) 这意味着,如果有一种方法可以阅读 / 解释某些内容,不管它有多么复杂或令人费解,具有足够知识和持久性的攻击者也能够阅读它,从而破解它。

有一种观点认为基于云的软件更安全,这是事实,因为它的(二进制)代码保留在服务器上,最终用户不能直接访问它。 尽管基于云的软件无疑是未来的发展方向,但它也有一些主要的缺点,这些缺点使得它永远无法完全取代传统的软件。 举几个例子:

  • 不是每个人都有互联网连接,或者愿意上传他们的数据。 此外,某人的互联网连接可能非常昂贵或过于缓慢,使软件运行差.
  • 那么就有一个问题了,分布式计算.。例如,由于为每个玩家渲染每一个场景需要大量的计算资源,暴雪娱乐公司永远不可能在他们的服务器上完全运行魔兽世界。 因此,让每个用户的计算机代替进行渲染是符合他们最大利益的

作为一个软件开发者,我显然不喜欢有人盗用软件许可证。 但是不得不接受它。 好消息是,没有多少人愿意付出更多努力去寻找一个破解版本的软件。 对于那些下载了修补程序的人来说,主要的问题是,通过下载修补程序、攻击者的 KeyGen 或 Patcher,他们实际上是在“信任”攻击者,不会在其中放入任何不是“在软件包上做广告”的“讨厌的”东西(比如木马、恶意软件或键盘记录器) 所以对于这些人来说,问题就变成了——用软件许可证来潜在地感染你的系统,这值得吗?

另一边,一些开发人员对任何试图窃取他们的软件许可证的行为反应大。 他们试图实现各种各样的对策——从欺骗反向工程师,到在代码中添加陷阱(如果代码检测到代码正在被调试,可能会做一些讨厌的事情) ,到模糊处理或扰乱代码,到实施各种复杂的 DRM 方案,再到阻止来自某些国家的用户。 我个人尽量避开所有这些措施。 原因如下:

A)任何类型的反逆向工程策略都可以被具有足够持久性的攻击者绕过。 那么,既然我可以投入时间为我的软件添加一些有用的东西,使其对合法用户更有效率,为什么还要浪费我的时间呢?

B) 一些代码包可能会用防病毒软件,这显然不利于该软件的市场营销。 它还为开发人员调试软件制造了不必要的复杂性。

C) 在代码中添加陷阱也会对你的合法用户造成“误射” ,这真的会激怒他们,甚至可能导致法律诉讼。

D) 任何数字版权保护计划都可能捕获100个非法用户,给10,000个合法用户带来极大的不便。 那么为什么要这样对待你的好客户呢?

E) 我们的统计数据显示,大约75% 的非法许可证来自中国、俄罗斯、巴西等国家,这些国家的违法行为最为严重。 然而,对我们来说最主要的问题是,如果我们强制执行数字版权管理或者增加一些强大的注册认证,许多想要绕过我们的注册的人只会使用一个被盗的信用卡号码。 我们无法控制它。 我们的系统将使用它发送给他们一个合法的许可证。 因此,我们将失去为许可证支付的钱,加上信用卡公司将征收额外的扣款费用到我们的帐户,这可能范围从0.25美元到20美元,除了许可证成本。

F) 正如在评论中指出的,有些公司实际上可能从允许盗版他们的软件中获益。 例如,微软从使用 Windows 操作系统的用户那里获得了大量的免费宣传,Adobe 的 Photoshop 也是如此。 我同意这个观点。

所以我现在的哲学是---- 如果有人想更进一步,偷走我们的软件,那就去做吧! 不管怎样,他们做到了这一步,所以他们可能有一个很好的理由。 从积极的一面来看,还有很多其他客户欣赏开发软件的工作,这些工作远远超过了那些没有开发软件的客户。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿技术大咖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档