我目前正在处理我的付费应用程序的特定问题。在内部,它包含许可检查。该应用程序由黑客通过修改应用程序apk / jar修补。他们正在添加一个新类,有助于绕过许可检查。
我的目标是以某种方式检查这个特定的补丁。如果我发现它,我知道我的应用程序已被入侵。
有关如何知道包装上已修改某些内容的任何提示?在我的情况下,对应用程序执行哈希不是一个真正的选项。
我想也许可以检查这个类是否存在会有所帮助,但如果他们改变了类的名称怎么办?然后,另一个想法是以某种方式检查添加到类中的意外包含。
这些可能吗?任何建议都会有所帮助:)
答案 0 :(得分:51)
不确定android,但在标准JDK中,你会做这样的事情:
try {
Class.forName( "your.fqdn.class.name" );
} catch( ClassNotFoundException e ) {
//my class isn't there!
}
答案 1 :(得分:13)
以下是我在Android中使用的标准Java:
public boolean isClass(String className) {
try {
Class.forName(className);
return true;
} catch (ClassNotFoundException e) {
return false;
}
}
实施例:
if (isClass("android.app.ActionBar")) {
Toast.makeText(getApplicationContext(), "YES", Toast.LENGTH_SHORT).show();
}
答案 2 :(得分:3)
您可以使用
public static Class<?> forName (String className)
并查看ClassNotFoundException
http://developer.android.com/reference/java/lang/Class.html#forName%28java.lang.String%29
答案 3 :(得分:1)
如果它是随机包中的随机类,它是如何加载的?
话虽如此,请参阅http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29和java.class.path。对于普通的Java应用程序,您必须遍历类路径,然后搜索条目(对于jar)或目录(对于.class文件)。但是在容器类加载器环境中,这将无法工作(我不确定这如何适用于Android环境)。