2012-03-30 35 views
2

有幾個工具可以反編譯APK dex文件並插入各種鉤子。如何找出方法是否被鉤住(=第三方方法充當一層,用於破解應用程序)

例如,如果你想查詢你需要調用的函數PackageManager.getInstallerName()安裝程序包的名稱。

現在就我個人而言,他們取代反射的方法,然後要麼調用真正的方法或發送一些欺騙的結果。

這具有巨大的優勢,即使您本身調用方法或使用反射來調用方法也無關緊要。

在這種特殊情況下,getInstallerName()總是返回com.google.android.feedback

這種鉤一些源代碼可以在這裏找到:http://androidcracking.blogspot.de/2011/03/original-smalihook-java-source.html

有沒有辦法來檢測這些掛鉤?

回答

0

你可以運行鍼對你知道什麼是原始的apk的MD5總和,它的一個涉嫌盜版的版本,比較兩個。這隻能保證懷疑被篡改的版本是已修改,但不會告訴你具體情況。

你也許可以做到,雖然我還沒有自己試過,但它看起來很有希望,其他的事情是一樣的東西this,你在理論上能夠搜索類的名稱,如Smailhook等,如果發現它們存在。這些想法至少應該指出你調查的正確方向,但它們可能並不包括所有的基礎。

編輯:如果你想實現在運行時是這樣的(我不知道你想幹什麼this--以爲你的意思,你是可疑的應用程序的特定副本,離線)你可以嘗試像Class.forName()方法。類似這樣的或其他類加載器方法之一應該有助於搜索您正在查找的.dex文件中的類,並且您可以捕獲一個NoClassDefFoundError 以瞭解一切正常。如果一個類找到你想要的名字,你可以按你的意願處理它 - 終止程序,擊中一個擁有數據庫欺騙性應用程序數據庫的web服務,等等。

+0

感謝您的支持回答。很明顯,要發佈APK是不可能的(只要您存儲總和,總和發生變化)唯一的辦法就是對classes.dex進行crc。 dex2jar在運行時也會太昂貴。有沒有簡單檢查smali類的類的方法?此外,我需要更通用的方式,而不僅僅是這一個工具。 – Force 2012-03-31 06:54:08

+0

啊,不明白你想在運行時執行此操作:)這改變了相當多的東西。我將編輯我的回覆... – waxspin 2012-03-31 14:40:36

+0

'Class.forName()'是一個好方法,但是該類沒有插入到DEX中,而只是修改了字節碼。這意味着,沒有其他方法。 – Force 2012-03-31 15:28:29

相關問題