Android共享库完整性保护

6
有没有一种方法可以在Android平台上“保护”本地共享库(.so)以防止二进制更改呢?例如,某人可能会在逆向工程应用程序后用NOP覆盖JMP指令,并将该库分发到已Root的设备。
有什么方法可以解决这个问题吗?
我在这里寻求实现一系列检查(例如加密、校验和等)的想法。当然,由于平台似乎不提供支持(如果我错了,请纠正我),所以必须全部在“客户端”完成。因此,整个过程有点徒劳,但至少可以阻碍一些逆向工程。

当然,您可以通过让SO计算自己的校验和、加密其代码的部分来实现SO保护。这与Windows多年来所做的类似(但更难)。但是,如果您没有在Linux上保护模块的经验,最好不要开始。我不知道是否存在针对您任务的预先创建的保护产品。 - Eugene Mayevski 'Callback
谢谢@EugeneMayevski'EldoSCorp。我想尝试一下 - 你是如何计算自己的校验和的? - AndroidSec
1个回答

4

是的,有一些你可以做的事情,它们会让逆向工程师感到非常困难,但我怀疑你能做任何能阻止Chris Eagle的事情。

保护免受修改的最佳方法是在编译后对.so文件进行SHA-2,并在运行时每次重新计算哈希值,与已知值匹配。这个检查将在客户端执行,因此熟练的RE可能会修改二进制文件以忽略检查。不过这确实使它变得更加困难了。如果你在代码中放置检查,并使用不同的检查技术,那么就会延长RE需要做的工作量。然而,请注意,微软已经投入数百万美元用于反逆向工程技术,但仍存在盗版的Office和Windows副本。你永远不可能阻止所有人。我的个人哲学(现在我已经学习了RE)是,试图阻止他们最终会变得太麻烦。只需制作一个好的应用程序,使其价格便宜,人们就会购买。窃取你东西的恶棍本来也不会买的。

如果您的应用程序需要联网,您也可以将哈希值提交到服务器进行验证。当然,RE仍然可以绕过此项检查,但这是另一件要做的事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接