【发布时间】:2017-08-08 02:09:55
【问题描述】:
我最近听说有一家软件安全公司可以让您的代码在逆向工程和代码修改方面防黑客攻击。他们的技术是这样的:
他们在代码中的多个检查点插入校验和,以保护它们之间的代码。由于在每个检查点执行代码流,都会检查校验和,如果代码已被篡改,则校验和失败并且您知道代码已被修改。如果删除了一个检查点,那么下一个检查点也将失败,因为一个检查点已被删除。
购买他们的服务将完全超出我的项目(Android 应用程序)的预算,但我想自己实现该技术。
有人可以提供一些关于如何实施这样的事情的见解吗?另外,如果有其他方法可以使用το防止代码修改,请分享。
(澄清一下,我知道混淆、奇怪的误导性代码逻辑以及编写虚假方法以进一步使代码难以阅读,并将应用这些方法)
【问题讨论】:
-
攻击者会简单地删除所有校验和测试。对于熟练的攻击者来说,识别、删除它们并重新编译余额不太可能特别困难。 “另外,如果有其他方法可以使用 το 防止代码修改,请分享”——不要编写任何在客户端上运行的东西。
-
你猜错了。您会惊讶于购买了多少无用的蛇油,因为一些非技术经理对汽化器感到兴奋。
-
没有办法完全保护自己免受逆向工程的影响,因为最终您的应用程序必须被反编译为由处理器运行的字节码/汇编语言。如果不出意外,它在这一点上很脆弱。您可以设置减速带,但仅此而已。老实说,这些用途很可疑。
-
您担心的是错误的事情。如果您有一些惊人的新算法,请申请专利。那是你的保护。如果没有,那么您的应用程序中没有任何东西难以重新创建以值得保护。相反,您应该担心保护您的数据,这更多是关于正确使用加密/身份验证/授权和数据流的设计,而不是其他任何事情。这个想法并不是要让逆向工程变得不可能(无论如何这都行不通),而是要做到这一点,即使他们这样做了,也不会得到任何东西,因为数据是安全的。
-
更重要的是,套用 Tim O'Reilly 的话说,您的问题不是盗版,而是默默无闻。您可以花无数时间发明一些计划来阻止那些可能破解您的应用并避免应用内购买的人,或者您可以花时间将应用推销给真正愿意付费的人。
标签: java android security reverse-engineering tampering