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

別說話当编,吻我

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

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

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

apk

APK是AndroidPackage的縮寫鲤桥,即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等這些目錄下是可以直接看到圖片文件套耕,可以直接拿出來自己用谁帕。但是一些xml文件,比如在layout目錄下的testitem.xml文件冯袍,打開后會(huì)是字節(jié)碼匈挖,不能直接使用。(其中abc和notification開頭的文件不是開發(fā)者寫的那些文件康愤,可以忽略)

layout下的xml文件

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

--------------------------------開始正式起航----------------------------------

介紹我們的主角

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里面通過command+shift+g傲隶,然后輸入/usr/local/bin,跳到指定文件夾中,5更改這二個(gè)文件的權(quán)限窃页,在終端中執(zhí)行chomd +x(后面跟上文件)來修改跺株,6.然后執(zhí)行apktool

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

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

apktool解析apk

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

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


testitem.xml

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

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

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

2.dex2jar + jd-gui

下載dex2jar 和 jd-gui楷拳。這個(gè)百度下。就可以各種下載吏奸。
1.dex2jar下載后欢揖,解壓到某個(gè)目錄下。jd-gui是個(gè)dmg安裝包
2.打開終端奋蔚,輸入命令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.打開jd-gui文件坤按,將classes-dex2jar.jar拖入jd-gui界面上,就能夠看到Java文件了

java代碼

反編譯的作用不僅是拿到資源馒过,看到代碼臭脓,你也可以對(duì)里面的資源進(jìn)行替換,甚至修改代碼沉桌,來進(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)上搜下。很方便就能搜到瘤运。在此就不多說了窍霞。)

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

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

Proguard:

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

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

DexGuard

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

額外的處理

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

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

附上二篇文章傳送門:

Android Security: Adding Tampering Detection to Your App

Hiding Secrets in Android Apps

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

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

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

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

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

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

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


Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市矾柜,隨后出現(xiàn)的幾起案子阱驾,更是在濱河造成了極大的恐慌,老刑警劉巖怪蔑,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件里覆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缆瓣,警方通過查閱死者的電腦和手機(jī)喧枷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弓坞,“玉大人割去,你說我怎么就攤上這事≈绯螅” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵夸赫,是天一觀的道長菩帝。 經(jīng)常有香客問我,道長茬腿,這世上最難降的妖魔是什么呼奢? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮切平,結(jié)果婚禮上握础,老公的妹妹穿的比我還像新娘。我一直安慰自己悴品,他們只是感情好禀综,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苔严,像睡著了一般定枷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上届氢,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天欠窒,我揣著相機(jī)與錄音,去河邊找鬼退子。 笑死岖妄,一個(gè)胖子當(dāng)著我的面吹牛型将,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播荐虐,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼七兜,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了缚俏?” 一聲冷哼從身側(cè)響起惊搏,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎忧换,沒想到半個(gè)月后恬惯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亚茬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年酪耳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刹缝。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碗暗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出梢夯,到底是詐尸還是另有隱情言疗,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布颂砸,位于F島的核電站噪奄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏人乓。R本人自食惡果不足惜勤篮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望色罚。 院中可真熱鬧碰缔,春花似錦、人聲如沸戳护。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腌且。三九已至竟终,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間切蟋,已是汗流浹背统捶。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喘鸟。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓匆绣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親什黑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子崎淳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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