有的時候,我們想分析一個程序的java層邏輯,進行反編譯后,發(fā)現代碼所有的函數名、變量名、類名等都成了一些雜亂無章的名字,沒有任何規(guī)律可言,這是怎么回事呢?其實程序是被混淆了。
混淆是什么?
混淆是通過一些工具,對函數名、變量名、類名、字段進行批量重命名。
混淆的例子以及作用
例子:
先來看一下沒有被混淆的例子:這是我們自己寫的程序,反編譯:

發(fā)現邏輯很清楚,反編譯之后的源碼和我們寫的代碼完全一樣,我們寫的應用就是一只被宰的羊,誰都可以咬一口。
代碼保護的第一步就是混淆,就是對代碼動下手腳,讓反編譯出來的代碼不這么容易看懂。
打開andoridkiller工具,以X右為例子

打開一個smail文件夾:

發(fā)現里面都變成了這種:這種只是初級的混淆,還有一些可能混淆成外文的。
正常的開發(fā)中是不會有這種命名的

隨便點進去看一個,雖然有影響的,但是影響不大。

需要借助一個工具:jdax-gui;
看一下這工具能把我們的代碼還原成什么程序:

我們可以借助一些工具達到簡單的混淆的目的,點擊這個

圖標,它會把我們的代碼重新混淆。

重新打開,這里會對我們的代碼重新反編譯并且重命名,可以方便我們來區(qū)分。

混淆無非就是增加我們的逆向時間,放到jdax-gui里面是為了好看一些,但是整體的邏輯是不會混淆的。
也就說,代碼混淆并不能一勞永逸的解決代碼保護的問題,只是把讀代碼的時間變得比開發(fā)代碼的時間還要長,當然,有些核心代碼最好不要放在Java中,有一些非常有毅力的人,還是愿意花這個時間的。
ProGuard介紹以及混淆特點
(1)ProGuard會檢測和移除封裝中未使用的類、字段、方法和屬性,包括自帶代碼庫中未使用的項。
(2)ProGuard還可以優(yōu)化字節(jié)碼,移除未使用到的代碼指令,以及用短名稱混淆其余的類、字段和方法。
本文由網上采集發(fā)布,不代表我們立場,轉載聯(lián)系作者并注明出處:http://www.webhosting0.com/shbk/48702.html