2011-04-26 79 views
21

我目前正在處理付費應用程序的特定問題。它在內部包含許可證檢查。該應用程序由黑客通過修改應用程序apk/jar修補。他們正在添加一個幫助繞過許可證檢查的新班級。如何檢查類是否存在於包中的某個位置?

我的目標是以某種方式檢查這個特定的補丁。如果我發現它,我知道我的應用程序已被盜用。

有關如何知道軟件包上的內容已被修改的任何提示?在我的情況下,對應用程序進行散列並不是真正的選擇。

我想也許檢查這個類是否存在會有所幫助,但是如果他們改變了類的名字呢?然後,另一個想法是以某種方式檢查添加到課堂中的意外包含。

任何這些可能嗎?任何建議將幫助:)

回答

42

不知道關於Android,但在標準的JDK,你會做這樣的事情:

try { 
Class.forName("your.fqdn.class.name"); 
} catch(ClassNotFoundException e) { 
//my class isn't there! 
} 
+0

與本次通話的問題是,它規定了包的名字。軟件包名稱是隨機的...但是文件名不是... – Jona 2011-04-26 17:46:52

+0

所以你想找一個和你檢查它的類在同一個包中的類?這是個問題嗎? – Liv 2011-04-26 17:53:13

+0

我需要找到一個可以隨機位於我的應用程序任何位置的類。這個班被隨機放置在「黑客補丁」 – Jona 2011-04-26 17:57:55

3

您可以使用

public static Class<?> forName (String className) 

,並檢查ClassNotFoundException

http://developer.android.com/reference/java/lang/Class.html#forName%28java.lang.String%29

+0

與@Liv post相同的問題...這是行不通的,因爲我不得不指定類中找到的包中的確切路徑。在我的情況下,這個類可以隨機存儲在我的應用程序包中。 – Jona 2011-04-26 17:48:58

+0

有可能成爲b ** ch - 這與我所建議的不同嗎? – Liv 2011-04-26 17:51:55

+0

@你見過兩個答案之間的時差嗎?不,它不是很不一樣。重點是什麼? – Aleadam 2011-04-26 18:37:29

1

它是如何得到加載,如果它'隨機包裏有隨機課嗎?

這就是說,見http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29和java.class.path。對於普通的java應用程序,你必須走類路徑,然後搜索條目(對於jar)或目錄(對於.class文件)。但在容器類加載器環境中,這將無法工作(我不確定這是如何適用於Android環境)。

+0

感謝您的迴應......它在應用程序正式發佈後會被加載。這個特定的文件繞過許可證檢查...比它自由分發。 – Jona 2011-04-26 20:12:43

+1

對不起,我問你的官方應用程序加載類,如果你事先不知道它是什麼包。類加載響應被其他類引用,或通過SPI或其他機制加載。只需要在一個jar中加入一個類就不足以單獨加載它。 – 2011-04-26 20:16:45

+0

這是一個有趣的觀點。好吧,我假設這個補丁類附加到我的許可檢查。不知道確切的位置,但是我知道應該在我運行許可檢查時加載它。 – Jona 2011-04-27 15:45:03

12

這是我在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(); 
} 
相關問題