以编程方式确定 Java class 是否已修补?
Figuring out programmatically if a Java class was patched?
如果有人修补了 class 编译代码,尤其是在 Android 中,是否可以通过编程方式解决这个问题?
示例:我的建筑物(例如 .apk)包含 class PiracyCheck.class。是否有可能在编译时 运行 class 的某种 'checksum'(由另一个 class 执行)?我想我能从中得到任何价值,比方说 abcdefg。如果有人修补此 class,校验和将突然变为 123456 而不是 abcdefg。我在后端服务器上验证校验和。如果校验和正确,则继续,否则中止。或者有更好的解决方案吗?
(顺便说一句:如果黑客想要重新打包并退出应用程序,我已经安全了,因为我也检查了签名,但我相信任何人都可以通过反编译和编辑来绕过这个检查字节码本身,这意味着不需要辞职,证书也不会改变)。
你可以做其中的一些事情。但是你不能将它们放在一个系统中来阻止某人 运行 你的代码的 "cracked" 版本。
Is it possible to run at compile time some kind of 'checksum' of that class (executed by another class)?
如果可以在编译时生成 class 的加密校验和,记录在服务器端或“.apk”中,或同时记录在两者中。
也可以在客户端计算此类校验和。
你不能做的是强制 Android 平台或被黑的“.apk”生成真实校验和:
我认为 Android 平台不提供此功能,如果提供,则可以在 "rooted" 设备上进行颠覆。
自然地,如果有人不厌其烦地破解了您的“.apk”,他们可以破坏“.apk”中的任何 "self checksumming" 代码以提供原始校验和而不是实际代码的校验和。
无论哪种方式,您的服务器都会看到它期望的校验和,而不是实际代码的有效校验和。会被忽悠的
基本上,如果您需要在用户有效控制的平台上执行您的代码,您无法阻止用户破坏您的代码。您最多可以希望的是让具有适当技能的人努力工作。
如果有人修补了 class 编译代码,尤其是在 Android 中,是否可以通过编程方式解决这个问题? 示例:我的建筑物(例如 .apk)包含 class PiracyCheck.class。是否有可能在编译时 运行 class 的某种 'checksum'(由另一个 class 执行)?我想我能从中得到任何价值,比方说 abcdefg。如果有人修补此 class,校验和将突然变为 123456 而不是 abcdefg。我在后端服务器上验证校验和。如果校验和正确,则继续,否则中止。或者有更好的解决方案吗?
(顺便说一句:如果黑客想要重新打包并退出应用程序,我已经安全了,因为我也检查了签名,但我相信任何人都可以通过反编译和编辑来绕过这个检查字节码本身,这意味着不需要辞职,证书也不会改变)。
你可以做其中的一些事情。但是你不能将它们放在一个系统中来阻止某人 运行 你的代码的 "cracked" 版本。
Is it possible to run at compile time some kind of 'checksum' of that class (executed by another class)?
如果可以在编译时生成 class 的加密校验和,记录在服务器端或“.apk”中,或同时记录在两者中。
也可以在客户端计算此类校验和。
你不能做的是强制 Android 平台或被黑的“.apk”生成真实校验和:
我认为 Android 平台不提供此功能,如果提供,则可以在 "rooted" 设备上进行颠覆。
自然地,如果有人不厌其烦地破解了您的“.apk”,他们可以破坏“.apk”中的任何 "self checksumming" 代码以提供原始校验和而不是实际代码的校验和。
无论哪种方式,您的服务器都会看到它期望的校验和,而不是实际代码的有效校验和。会被忽悠的
基本上,如果您需要在用户有效控制的平台上执行您的代码,您无法阻止用户破坏您的代码。您最多可以希望的是让具有适当技能的人努力工作。