被动/主动凿井
我同意@metalideath 的观点,即混淆和包含许可代码并非万无一失。
这是一种很容易隐藏的技术,我称之为“scuttling”,适用于部署到 Google 和 Amazon 的应用程序。Scuttling 是应用程序的前端盗版检测。一旦检测到该做什么由应用程序创建者提供。
- 激进的凿井:例如。盗版应用程序的终止和/或警报。不一定需要网络通信。
- 被动偷渡:无需修改应用程序。例如。启用跟踪。
- Passive/Agressive Scuttling:细微的应用修改。例如。静默禁用关键功能。引导盗版者认为他们搞砸了,并取消发布盗版应用程序。
如果您的应用程序被重命名和/或从 Google 或 Amazon 以外的任何来源安装,则 scuttle() 返回 true。
// Dont just copy/paste this code - that is what automated crackers look for - cludge it!
// No network communication is required at runtime.
// myPackageName should decode at runtime to "com.yourpackagename"
// google should decode at runtime to "com.android.vending";
// amazon should decode at runtime to "com.amazon.venezia";
public boolean scuttle(Context context, String myPackageName, String google, String amazon)
{
//Scallywags renamed your app?
if (context.getPackageName().compareTo(myPackageName != 0)
return true; // BOOM!
//Rogues relocated your app?
String installer = context.getPackageManager().getInstallerPackageName(myPackageName);
if (installer == null)
return true; // BOOM!
if (installer.compareTo(google) != 0 && installer.compareTo(amazon) != 0)
return true; // BOOM!
return false;
}
结果
以下屏幕截图取自谷歌分析,显示了一个来自 playstore (com.android.vending) 的盗版跟踪免费应用程序,该应用程序被重新部署并进行了激进的破坏(检测并终止了非 playstore 安装)。非 Playstore(未设置)跟踪下降。跟踪不是必需的,但对这些测量启用。
讨论
注意服务签名在破坏中发挥作用:包管理器强制使用具有唯一签名的唯一包名称。
这提出了当应用程序被凿沉(应用程序检测到盗版)时该怎么办的问题。盗版是您的应用程序病毒化(不受控制的分发)的一种形式。通过启用分析跟踪后端已经可以检测到它。Scuttling 允许应用程序创建者自定义带有或不带有跟踪的前端响应。
海盗显然可以检测到激进的凿沉行为(BOOM!)。这鼓励了进一步的开裂。被动凿井远不那么明显,但可能涉及跟踪。
盗版可能无法预防,但它是可预测、可检测和可追踪的。
追踪会给海盗带来难以克服的问题,但也会带来其自身的道德问题。
如上所述,不需要网络通信的被动/主动凿井可能是最好的解决方案。它很容易隐藏(与许可不同),并且可以定制为尽可能不明显。