1. 河豚號(hào) > 生活百科 >

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

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

混淆是什么?

混淆是通過(guò)一些工具,對(duì)函數(shù)名、變量名、類(lèi)名、字段進(jìn)行批量重命名。

混淆的例子以及作用

例子:

先來(lái)看一下沒(méi)有被混淆的例子:這是我們自己寫(xiě)的程序,反編譯:

 

Java代碼混淆「Android逆向?qū)W習(xí)」

 

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

代碼保護(hù)的第一步就是混淆,就是對(duì)代碼動(dòng)下手腳,讓反編譯出來(lái)的代碼不這么容易看懂。

打開(kāi)andoridkiller工具,以X右為例子

 

Java代碼混淆「Android逆向?qū)W習(xí)」

 

打開(kāi)一個(gè)smail文件夾:

 

Java代碼混淆「Android逆向?qū)W習(xí)」

 

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

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

 

Java代碼混淆「Android逆向?qū)W習(xí)」

 

隨便點(diǎn)進(jìn)去看一個(gè),雖然有影響的,但是影響不大。

 

Java代碼混淆「Android逆向?qū)W習(xí)」

 

需要借助一個(gè)工具:jdax-gui;

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

 

Java代碼混淆「Android逆向?qū)W習(xí)」

 

我們可以借助一些工具達(dá)到簡(jiǎn)單的混淆的目的,點(diǎn)擊這個(gè)

 

Java代碼混淆「Android逆向?qū)W習(xí)」

 

圖標(biāo),它會(huì)把我們的代碼重新混淆。

 

Java代碼混淆「Android逆向?qū)W習(xí)」

 

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

 

Java代碼混淆「Android逆向?qū)W習(xí)」

 

混淆無(wú)非就是增加我們的逆向時(shí)間,放到j(luò)dax-gui里面是為了好看一些,但是整體的邏輯是不會(huì)混淆的。

也就說(shuō),代碼混淆并不能一勞永逸的解決代碼保護(hù)的問(wèn)題,只是把讀代碼的時(shí)間變得比開(kāi)發(fā)代碼的時(shí)間還要長(zhǎng),當(dāng)然,有些核心代碼最好不要放在Java中,有一些非常有毅力的人,還是愿意花這個(gè)時(shí)間的。

ProGuard介紹以及混淆特點(diǎn)

(1)ProGuard會(huì)檢測(cè)和移除封裝中未使用的類(lèi)、字段、方法和屬性,包括自帶代碼庫(kù)中未使用的項(xiàng)。

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

本文由網(wǎng)上采集發(fā)布,不代表我們立場(chǎng),轉(zhuǎn)載聯(lián)系作者并注明出處:http://m.zmlzfb.cn/shbk/48702.html

聯(lián)系我們

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

微信號(hào):15705946153

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