2016-11-24 134 views
0

搜索後,我明白,proguard不能混淆字符串值, 我試過char []類型,但反編譯後,我可以看到變量的內容。那麼是否有解決方案來混淆靜態字符串變量?我有一個地址(字符串)在混淆後應該是我的代碼中的祕密。混淆字符串值java android

代碼的反編譯

public static final char[] f4516b; 
.... 
static { 
    f4516b = new char[]{'h', 't', 't', 'p', ':', '/', '/', '1', '0', '0', '.', '1', '0', '.', '1', '0', '0', '.', '1', '0', '/'}; 
+1

爲什麼你認爲人們會反編譯你的程序看到你的網址? – Gabriel

+0

我使用Web服務,以便他們可以在反編譯後使用該地址執行任何操作..我需要隱藏該字符串 – nouha

+0

@nouha我明白了,但是在源文件中查找字符串沒有多大幫助。在根設備或仿真器上,很容易監控所有網絡流量並無論如何找到ip/hostname。 爲什麼你認爲任何人都可以用他們無法用應用程序做的地址做任何事情/爲什麼這是一個問題? – Gumbo

回答

2

後,有沒有辦法可以保持某種離線祕密的應用程序中。如果您的應用程序需要它在某個時間點工作,則可以自動對其進行逆向工程 - 否則您的應用程序也將缺少所需的信息。

1

您始終可以創建一個消除混淆的方法,如散列或鹽,並將混淆的字符串保存在一個靜態變量中。所以反編譯時不會看到字符串。

但是,如果該人使用去混淆方法,他們將有你的字符串。另外,如果遠程呼叫地址通過wireshark或類似的方式收聽傳出的網絡呼叫,則該地址將始終可用。

+0

謝謝你解釋,你能幫我解除混淆嗎?只是一個例子,還是有解決辦法? – nouha

1

隱藏網址沒什麼意義。它可以在網絡層看到。如果您想阻止某人訪問您的網站,您可以使用HTTPS的基本身份驗證,並使用Android NDK隱藏祕密(僅舉例)。它仍然可以反編譯,但可能會更難。

+0

感謝您的回覆,我可以看到您的解決方案的例子嗎?我不知道如何使用Androi NDK隱藏祕密?你能解釋一下嗎? – nouha