Android apk 的反編譯及保護(hù)雜談

別說(shuō)話,吻我

----------------------------我是前言分割線---------------------------------

何為APK?大家應(yīng)該都知道Android項(xiàng)目打包好后的產(chǎn)物,然后能裝到手機(jī)上運(yùn)行,但是具體apk里面具體有哪些東西,可能很多人都答不出來(lái)。

----------------------------我是反編譯君-----------------------------------

apk

APK是AndroidPackage的縮寫(xiě),即Android安裝包。把a(bǔ)ndroid sdk編譯的工程打包成一個(gè)安裝程序文件,格式為apk。 APK文件其實(shí)是zip格式,但后綴名被修改為apk。我們可以把后綴名.apk改為.zip。然后將其解壓。

apk后綴名改為zip
解壓改了后綴名的壓縮包

解壓后的文件結(jié)構(gòu)

  1. META-INF\ (注:Jar文件中常可以看到);
  2. res\ (注:存放資源文件的目錄) ;
  3. AndroidManifest.xml (注:程序全局配置文件) ;
  4. classes.dex (注:Dalvik字節(jié)碼);
  5. resources.arsc (注:編譯后的二進(jìn)制資源文件)。

在res目錄下我們可以看到各種資源,


res目錄

其中圖片資源比如drawable-hdpi等這些目錄下是可以直接看到圖片文件,可以直接拿出來(lái)自己用。但是一些xml文件,比如在layout目錄下的testitem.xml文件,打開(kāi)后會(huì)是字節(jié)碼,不能直接使用。(其中abc和notification開(kāi)頭的文件不是開(kāi)發(fā)者寫(xiě)的那些文件,可以忽略)

layout下的xml文件

那我看到網(wǎng)絡(luò)上優(yōu)秀的APK,就只能解壓拿個(gè)圖片,一些布局啊,代碼啊,都不能做參考?不能去膜拜下別人是怎么寫(xiě)的嗎?答案當(dāng)然是NO。(強(qiáng)行怒裝一波B)

--------------------------------開(kāi)始正式起航----------------------------------

介紹我們的主角

1.apktool

解析apk的第三方工具, 安裝方式參考.

Mac OS X:

  1. Download Mac wrapper script (Right click, Save Link As apktool)
  2. Download apktool-2 (find newest here)
  3. Rename downloaded jar to apktool.jar
  4. Move both files (apktool.jar & apktool) to /usr/local/bin (root needed)
  5. Make sure both files are executable (chmod +x)
  6. Try running apktool via cli

根據(jù)英文我大概解釋下:
1,2根據(jù)提示下載相應(yīng)的東西,3改名字,4將下載的二個(gè)文件放到指定目錄下(可以在file里面通過(guò)command+shift+g,然后輸入/usr/local/bin,跳到指定文件夾中,5更改這二個(gè)文件的權(quán)限,在終端中執(zhí)行chomd +x(后面跟上文件)來(lái)修改,6.然后執(zhí)行apktool

下載的二個(gè)文件放在/usr/local/bin目錄下
修改文件權(quán)限

ok之后我們就快來(lái)用apktool來(lái)體驗(yàn)下。
apktool d xxxx.apk

apktool解析apk

這時(shí)候會(huì)將apk解析為一個(gè)與apk同名的文件夾,改文件夾會(huì)處于你的終端的當(dāng)前目錄下,比如我圖片中的當(dāng)前目錄是在willy的用戶目錄下,所以解析的文件夾也就在該目錄下。

這時(shí)候再到layout文件夾下找到上面我們打開(kāi)過(guò)的testitem.xml。


testitem.xml

其他的比如AndroidManifest.xml等也都能查看。

假如一個(gè)先生想用知識(shí)去啟導(dǎo)一個(gè)葬身在無(wú)知之中的學(xué)生,他便先得激起他的注意,使它能用一種貪婪的心理去吸取知識(shí)----夸美紐斯

人往往都是貪婪的。看到了布局,有了圖片資源這些。又會(huì)想要看源碼,那些Java代碼是怎么寫(xiě)的。
這時(shí)候要用到另外的工具,第二主角上場(chǎng)

2.dex2jar + jd-gui

下載dex2jar 和 jd-gui。這個(gè)百度下。就可以各種下載。
1.dex2jar下載后,解壓到某個(gè)目錄下。jd-gui是個(gè)dmg安裝包
2.打開(kāi)終端,輸入命令cd xxx/xxx/dex2jar,進(jìn)入下載的dex2jar文件夾中
3.輸入命令sh d2j-dex2jar.sh -f -o classes.jar /XXX/XXX/XXX.apk,操作完成后,會(huì)在dex2jar文件夾中生成一個(gè)classes.jar文件
4.打開(kāi)jd-gui文件,將classes-dex2jar.jar拖入jd-gui界面上,就能夠看到Java文件了

java代碼

反編譯的作用不僅是拿到資源,看到代碼,你也可以對(duì)里面的資源進(jìn)行替換,甚至修改代碼,來(lái)進(jìn)行業(yè)務(wù)邏輯的變動(dòng),比如一款軟件收費(fèi)后可以去除軟件里面的廣告,如果它的是否已經(jīng)付費(fèi)的業(yè)務(wù)判斷放在前端,則用戶直接反編譯再修改這個(gè)判斷條件,再打包好后就可以使用了。又或者是植入病毒,加入自己的廣告,使用apktool工具進(jìn)行二次打包傳播。

(apktool不僅能反編譯apk,還能再將解壓后的資源再打包成apk,具體的再打包成apk的就進(jìn)行網(wǎng)上搜下。很方便就能搜到。在此就不多說(shuō)了。)

---------------------------我是apk保護(hù)君------------------------------------

好了,大概講了上面的反編譯的一些方式。接下來(lái)講下如何讓我們的Android 源碼不容易給別人看到呢。

Proguard:

本來(lái)是準(zhǔn)備長(zhǎng)篇介紹的。后來(lái)我在別的博客上看關(guān)于Proguard介紹。發(fā)現(xiàn)其他大神寫(xiě)的不錯(cuò)的。我也就直接拿來(lái)推薦了.

點(diǎn)擊進(jìn)入傳送門(mén):
ProGuard使用詳解
ProGuard的官方文檔整理后解說(shuō)

DexGuard

但是如果你需要頂尖的安全性,ProGuard就力不從心了,你需要DexGuard
點(diǎn)擊進(jìn)入傳送門(mén):DexGuard

額外的處理

你需要知道如何安全的存儲(chǔ)app中的API keys。如果你要處理用戶的敏感數(shù)據(jù),你必須知道如何加密,選擇何種加密算法(安全且快速)。

你還應(yīng)該安全的把密鑰存儲(chǔ)在本地或者服務(wù)器上。應(yīng)該防止app數(shù)據(jù)被人用ADB備份。如果你在數(shù)據(jù)庫(kù)中存儲(chǔ)敏感數(shù)據(jù),要考慮做適當(dāng)?shù)膫窝b。

附上二篇文章傳送門(mén):

Android Security: Adding Tampering Detection to Your App

Hiding Secrets in Android Apps

當(dāng)然。這都只是增加那些想反編譯你apk的人的難度。他們還是能通過(guò)各種方式來(lái)get到你的apk的各種信息。這時(shí)候我們只能盡量多做一些措施。

-----------------------------------題外話-------------------------------------

ps:題外話,那大公司比如支付寶,QQ這些是怎么處理的呢

引用另外大神們的文章來(lái)進(jìn)行說(shuō)明。
點(diǎn)擊進(jìn)入傳送門(mén):這是你眼中的混淆嗎?ProGuard

摘取部分內(nèi)容如下:

真正需要考慮安全的代碼,真的會(huì)用java編譯嗎?

答案可想而知,如果嘗試的反編譯微信,支付寶的代碼的可以看到里面大量的.so文件,他們真正有價(jià)值的代碼是用c寫(xiě)的,通過(guò)jni調(diào)用,這樣不僅安全而且一套代碼Android,iOS都可用。這個(gè)才是最安全的做法!


Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評(píng)論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,634評(píng)論 3 419
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,653評(píng)論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,063評(píng)論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,835評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,235評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評(píng)論 3 442
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,459評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,000評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,819評(píng)論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,004評(píng)論 1 370
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,257評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,676評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,937評(píng)論 1 288
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,717評(píng)論 3 393
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,003評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容