以编程方式找出是否对Java类进行了修补?

时间:2018-11-17 10:03:48

标签: java android security digital-signature checksum

如果有人修补了编译代码的类,尤其是在Android中,是否可以通过编程方式解决? 示例:我的建筑物(例如.apk)包含一个PiracyCheck.class类。是否可以在编译时运行该类的某种“校验和”(由另一类执行)?我想我可以从中获得任何价值,例如abcdefg。如果有人修补此类,则校验和将突然变为123456,而不是abcdefg。我在后端服务器上验证校验和。如果校验和正确,则继续,否则,中止。还是有更好的解决方案来实现这一目标?

(btw:如果破解者想要重新打包并为应用程序重新签名,那么我已经很安全了,因为我还检查了签名,但是我敢肯定,任何人都可以通过反编译和编辑字节码来绕过此检查本身,这意味着不需要辞职,那么证书就不会更改。

1 个答案:

答案 0 :(得分:0)

您可以做一些这样的事情。但是您不能将它们放到一个会阻止某人运行代码“破解”版本的系统中。

  

是否可以在编译时运行该类的某种“校验和”(由另一个类执行)?

如果有可能在编译时生成类的加密校验和,请在服务器端或“ .apk”中记录,或在两者中记录。

还可以在客户端计算这种校验和。

您不能执行的操作是强制Android平台或被黑的“ .apk”生成真实校验和:

  • 我认为Android平台不提供此功能,如果可以,则可以在“ rooted”设备上将其颠覆。

  • 自然,如果有人麻烦破解您的“ .apk”,他们可以颠覆“ .apk”中的任何“自我校验和”代码以提供原始校验和而不是实际代码的校验和

无论哪种方式,您的服务器都会看到它期望的校验和,而不是实际代码的有效校验和。它将被愚弄。


基本上,如果您需要在有效控制用户的平台上执行代码,则不能阻止用户破坏您的代码。您所希望的最好的办法就是使具有适当技能的人很难做到这一点。