功能:反編譯apk降低權(quán)限及重新簽名
場景:很多軟件,申請了一些可能會導致付費(如,發(fā)短信,呼叫號碼)或者泄漏隱私(如:讀取通訊錄)的權(quán)限,讓人很不放心。比如:飛信、墨跡天氣、iReader等都在此列。為了讓自己能放心使用,需要做一些破解工作,減少該應用程序的權(quán)限,限制其操作。
工具:apktool-install-windows-2.2_r01-3.tar.bz2 (http://code.google.com/p/android-apktool/downloads/list)
工具:(JDK) keytool.exe 生成簽名的密鑰庫
工具:(JDK) jarsigner.exe 用于對apk做簽名
工具:(可選)D:\android-sdk-windows\tools\zipalign.exe 對打包的應用程序進行優(yōu)化,使得在運行時Android與應用程序間的交互更加有效率。
操作:
1,反編譯APK文件 demo.apk 到 demo 目錄
apktool.bat d demo.apk demo
2,修改。。。
2.1 減少權(quán)限:修改demo 目錄 demoAndroidManifest.xml 文件,找到<uses-permission ...> 標簽,注釋掉不需要的權(quán)限。(參考:http://hb.qq.com/a/20101115/001156.htm 開發(fā)者不得不知的Android權(quán)限說明)
2.2 去掉廣告:如 Smart Monitor Pro_2.3.16.apk
1 | < com.admob.android.ads.AdView android:id = "@id/ads" |
2 | android:layout_width = "fill_parent" |
3 | android:layout_height = "wrap_content" |
4 | app:keywords="girl friends monitor women sex |
5 | adult gift electron wallpaper ring |
6 | shirt Android application game |
7 | sport football soccer world cup" |
改為
1 | < com.admob.android.ads.AdView android:id = "@id/ads" |
2 | android:layout_width = "wrap_content" |
3 | android:layout_height = "wrap_content" |
5 | android:height = "1dip" app:keywords = "" /> |
2.3 去掉廣告:如 Hi-MSN.apk
1 | < com.google.ads.GoogleAdView android:id = "@id/ad" |
2 | android:layout_width = "fill_parent" |
3 | android:layout_height = "wrap_content" |
4 | android:layout_alignParentBottom = "true" /> |
改為:
1 | < com.google.ads.GoogleAdView android:id = "@id/ad" |
2 | android:layout_width = "fill_parent" |
3 | android:layout_height = "wrap_content" |
4 | android:layout_alignParentBottom = "true" |
6 | android:height = "1dip" /> |
3,重新將 demo 目錄編譯成 apk 文件
apktool.bat b demo
4,找到 demo\dist 目錄下的 demo.apk 改名為 demo_unsign.apk
5,(可選)修改apksigner.input.txt 文件內(nèi)容,用于生成密鑰對和證書,給apk簽名。如果已經(jīng)存在,則無需修改。(修改apksigner.bat 去掉下行的注釋)
type apksigner.input.txt | keytool -genkey -alias %JKS% -keystore %JKS% -storepass %PWD% -keypass %PWD% -keyalg RSA -validity 20000
6,修改 apksigner.bat 腳本中的設置(set APP=demo)后,執(zhí)行apksigner.bat 對 demo_unsign.apk 簽名,生成 demo_signed_final.apk 文件。
7,在手機上刪除原版 apk 應用,重新安裝 demo_signed_final.apk
---------------------------------------- ### apksigner.bat 文件
02 | @rem http://www.cnblogs.com/qianxudetianxia/archive/2011/04/09/2010468.html Android學習系列(1)--為App簽名(為apk簽名) |
03 | @rem http://www.blogjava.net/zhaojianhua/archive/2011/06/23/352887.html Android APK 簽名 |
05 | @ set JKS=android.keystore |
08 | @ set APK0=%APP%_unsign.apk |
09 | @ set OUT1=%APP%_signed.apk |
10 | @ set OUT2=%APP%_signed_final.apk |
12 | @rem type apksigner.input.txt | keytool -genkey - alias %JKS% -keystore %JKS% -storepass %PWD% -keypass %PWD% -keyalg RSA -validity 20000 |
14 | @ if exist %OUT1% del %OUT1% |
15 | @ if exist %OUT2% del %OUT2% |
19 | @jarsigner.exe -verbose -keystore %JKS% -storepass %PWD% -keypass %PWD% -signedjar %OUT1% %APK0% %JKS% |
20 | @jarsigner.exe -verify %OUT1% |
24 | @D:\android-sdk-windows\tools\zipalign.exe - v 4 %OUT1% %OUT2% |
25 | @jarsigner.exe -verify %OUT2% |
---------------------------------------- apksigner.input.txt 文件
username
org
org
beijing
beijing
cn
y