如何检查包中是否存在类?

时间:2011-04-26 17:36:55

标签: java android security

我目前正在处理我的付费应用程序的特定问题。在内部,它包含许可检查。该应用程序由黑客通过修改应用程序apk / jar修补。他们正在添加一个新类,有助于绕过许可检查。

我的目标是以某种方式检查这个特定的补丁。如果我发现它,我知道我的应用程序已被入侵。

有关如何知道包装上已修改某些内容的任何提示?在我的情况下,对应用程序执行哈希不是一个真正的选项。

我想也许可以检查这个类是否存在会有所帮助,但如果他们改变了类的名称怎么办?然后,另一个想法是以某种方式检查添加到类中的意外包含。

这些可能吗?任何建议都会有所帮助:)

4 个答案:

答案 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环境)。