1. 程式人生 > >Android 混淆程式碼學習以及Android加密工具--APKProtect的使用

Android 混淆程式碼學習以及Android加密工具--APKProtect的使用

一:情景分析

有時候看到其他應用App的一些效果很炫,或者是功能實現很好就想著參考參考,於是乎,下載APK----反編譯APK---檢視原始碼。。。。,但是悲劇來了。。。。原始碼都是些a,b,c。。。等等這樣的東東,根本啥都看不明白,後來瞭解到這是程式的作者保護自己勞動成果的“手段”,於是乎 自己就想咱也試著“保護一下”自己的勞動成果吧,至此開啟了“Android混淆程式碼”的旅程

二:初始

瞭解到Android混淆程式碼這個名詞以後,於是乎 百度。。谷歌。。。,哇哦 看來大家都已經掌握了這門技能了(自己落後了。。。。),介紹此技能的技術文件,部落格是一大批一大批的啊。。。。於是乎 自己找了一個相對詳細的教程開始學習

三:實踐

根據以上教程的介紹,混淆程式碼方法有兩種,一種是低版本的混淆,一種是高版本的混淆

鑑於自己的版本是高版本的,因此就實踐了高版本的混淆
  
按照教程步驟如下:
  

1:開啟project.properties
圖片說明文字
  哇哦 一大段英文。。。。。。 不過仔細閱讀 還是可以懂滴,看到一句這樣的話
  

意思是說 想要混淆程式碼 就將下面那句話取消註釋,於是乎 咱就取消註釋唄。教程中有說要將配置資訊放在target=android-8之後 ,至此簡單的混淆程式碼就完成了(前人種樹,後人乘涼啊)

在搜尋Android混淆程式碼的知識點時,也有一些比較深層次的內容,比如如果專案引入了第三方庫,該怎樣混淆,如果自己將自己的專案作為第三方庫給別人使用,又怎樣混淆.鑑於自己還沒有涉及這方面的知識,所以就暫且不深入學習,只做個大概瞭解(知識是無窮無盡的。。。。。)

四 擴充套件

在調查Android混淆程式碼的時候,看到了一個工具:APKProtect

雖然文件標題是混淆工具,不過因為我在實踐的時候,發現它並沒有提到混淆的作用,於是乎詢問了作者,作者說這個不是混淆工具,是加密工具,目前只做了Activity,service,reciver的加密,加密的通俗意思是:反編譯apk之後,就看不到Activity,service,reciver這些class檔案了

接下來呢 就是咱們動手實踐的時間了

下載APKProtect這個工具,下載完成後解壓,看到
圖片說明文字

雙擊開啟.exe檔案
圖片說明文字

選擇將要加密的apk,不做任何設定,工具會自動命名之後儲存的加密的apk名字,你也可以自己命名
圖片說明文字

點選protect按鈕,然後等待,出現process done 對話方塊之後
圖片說明文字

至此 加密工作完成,反編譯一下 瞧瞧 哇哦 Activity沒有了!!!話說 還不能高興的太早,將加密後的檔案執行到Android手機上 See See ,咦。。。。不幸的事情發生了。。。。。
圖片說明文字

不能安裝,提示資訊是證書有問題,後來詢問了作者,作者說加密的apk要重新在簽名一次並且需要設定
於是乎開啟工具,在主介面看到了Protection option ,裡面有一些設定資訊,既然安裝apk時 說是我們的簽名有問題,那就設定我們的簽名,因為我用的是自己自定義的簽名所以進入設定介面,進行相關設定,然後儲存,再加密檔案
圖片說明文字

在填寫設定資訊中,要填寫keystore的相關資訊,因為keystore建立很久了,一些資訊忘記了,於是乎 要檢視keystore的相關資訊怎麼檢視呢,百度。。。谷歌。。。。

檢視Keystore相關資訊:

在命令列中,到jdk/bin檔案下 然後輸入
keytool -list -v -keystore (keystore的位置)
就可以看到相關資訊了

擴充套件,怎樣生成自定義的keystore

在命令列中, 到jdk/bin檔案下 然後輸入

keytool -genkey -alias android.keystore -keyalg RSA -validity 20000-keystore android.keystore

-alias 金鑰別名

-keyalg 金鑰演算法

-validity 金鑰有效期

總結:既然在加密apk的時候要重新簽名APK,那麼我們可以在Eclipse匯出apk時,先不簽名,然後在加密的時候在簽名

五:感想
至此呢,我們就給APK加了“雙層保護”,也保護了我們的勞動成果!完美收工