2013-03-13 35 views
1

這可能是一個完整的「禁忌」,但我想知道是否在應用程序簽名並編譯到apk之後才能使應用程序可調試。在編譯後將Android應用程序設置爲可調試

我希望能夠在我的服務器上生成一個隨機密鑰,然後使用此密鑰將我已發佈的應用程序置於可調試狀態。

//Build a hidden back door to request the randomly generated key on my server 
//Input this key into an edittext box of some sort. 
//Check this key against the server 
//If key validates, put application in debuggable state. 

我意識到這樣做存在潛在的安全風險,但我只是想知道它是否完全可能。

+0

有沒有什麼特別的用例可以幫助你呢? – 2013-03-13 16:19:00

+0

我寧願不說明實際的特定用例,因爲它可能會暴露安全風險,但我基本上希望能夠調試一些我無法在開發環境中複製的用例。 – dell116 2013-03-13 16:30:38

回答

1

如果您願意重新簽名並重新安裝,那麼從非可調試的APK生成可調試APK是相當直接的,但是您無法對已安裝的實例執行此操作。

實際代碼中基於可調試/不可調試狀態表現不同的任何內容也可以看作Brent所暗示的其他內容,但由於大多數調試功能都內置在Android中,而不是部分內容應用程序代碼。

雖然您也許可以提供標誌替代方法來調試功能。例如,您可以提供一些功能將私人文件複製到公共存儲中。如果你真的想,你可以在一臺服務器中燒烤,這個服務器可以提供一個作爲應用程序UID運行的shell。但是獲得一個真正的JDWP調試器可能需要極其依賴於android-build的hackery,因爲你可能必須提供你自己版本的很多系統代碼。

簡單來說,通過記錄大量通常被抑制的內部細節來讓程序改變它的行爲將會非常簡單。

請花一些時間考慮您的用戶對安全性的影響。

0

通過dev站點查看我看到通過從給定的上下文調用getApplicationInfo().flags;訪問標誌。 flags不是final,所以看起來getApplicationInfo.flags |= FLAG_DEBUGGABLE;將允許您在運行時啓用調試:參考ApplicationInfo doc:http://developer.android.com/reference/android/content/pm/ApplicationInfo.html

請注意,我沒有測試過這個(不是通過momemnt上的android環境)。

+0

可能無效,因爲這隻會覆蓋該表達式的結果,並且不會影響Android本身及其應用程序啓動代碼中可調試狀態的其他測試。 – 2013-03-13 17:11:16

+0

檢查文檔它看起來像即使flags類成員不是最終的,FLAG_DEBUGGABLE成員是靜態的並且是最終的,所以它看起來像在運行時更改它是一個不行。 – dell116 2013-03-13 18:24:19

+0

@ dell116,FLAG_DEBUGGABLE是靜態的並且是最終的,因爲它是一個常數。 applicationInfo的flags字段本質上是一個位掩碼,而FLAG_DEBUGGABLE只是該掩碼內的相應位。 – 2013-03-13 19:08:41

相關問題