1. 河豚號 > 生活百科 >

代碼混淆技術有哪些(代碼混淆定義及操作)

有的時候,我們想分析一個程序的java層邏輯,進行反編譯后,發(fā)現代碼所有的函數名、變量名、類名等都成了一些雜亂無章的名字,沒有任何規(guī)律可言,這是怎么回事呢?其實程序是被混淆了。

混淆是什么?

混淆是通過一些工具,對函數名、變量名、類名、字段進行批量重命名。

混淆的例子以及作用

例子:

先來看一下沒有被混淆的例子:這是我們自己寫的程序,反編譯:

 

Java代碼混淆「Android逆向學習」

 

發(fā)現邏輯很清楚,反編譯之后的源碼和我們寫的代碼完全一樣,我們寫的應用就是一只被宰的羊,誰都可以咬一口。

代碼保護的第一步就是混淆,就是對代碼動下手腳,讓反編譯出來的代碼不這么容易看懂。

打開andoridkiller工具,以X右為例子

 

Java代碼混淆「Android逆向學習」

 

打開一個smail文件夾:

 

Java代碼混淆「Android逆向學習」

 

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

正常的開發(fā)中是不會有這種命名的

 

Java代碼混淆「Android逆向學習」

 

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

 

Java代碼混淆「Android逆向學習」

 

需要借助一個工具:jdax-gui;

看一下這工具能把我們的代碼還原成什么程序:

 

Java代碼混淆「Android逆向學習」

 

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

 

Java代碼混淆「Android逆向學習」

 

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

 

Java代碼混淆「Android逆向學習」

 

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

 

Java代碼混淆「Android逆向學習」

 

混淆無非就是增加我們的逆向時間,放到jdax-gui里面是為了好看一些,但是整體的邏輯是不會混淆的。

也就說,代碼混淆并不能一勞永逸的解決代碼保護的問題,只是把讀代碼的時間變得比開發(fā)代碼的時間還要長,當然,有些核心代碼最好不要放在Java中,有一些非常有毅力的人,還是愿意花這個時間的。

ProGuard介紹以及混淆特點

(1)ProGuard會檢測和移除封裝中未使用的類、字段、方法和屬性,包括自帶代碼庫中未使用的項。

(2)ProGuard還可以優(yōu)化字節(jié)碼,移除未使用到的代碼指令,以及用短名稱混淆其余的類、字段和方法。

本文由網上采集發(fā)布,不代表我們立場,轉載聯(lián)系作者并注明出處:http://www.webhosting0.com/shbk/48702.html

聯(lián)系我們

在線咨詢:點擊這里給我發(fā)消息

微信號:15705946153

工作日:9:30-18:30,節(jié)假日休息