android apk反編譯打包簽名

 APK反編譯打包簽名

一、JDK安裝和環境配置
1. jdk1.6下載地址:http://download.java.net/jdk6/
 jdk-6u17-windows-i586.exe
2. 安裝,一路默認即可。
3. 環境變量設置
 xp系統:我的電腦 -> 屬性 -> 高級 -> 環境變量
 新建JAVA_HOME變量,變量值爲:C:\Program Files\Java\jdk1.6.0_17
 新建CLASSPATH變量,變量值爲:C:\Program Files\Java\jdk1.6.0_17\lib\dt.jar;C:\Program Files\Java\jdk1.6.0_17\lib\tools.jar;.(最後有個.號)
 修改Path變量,加上:C:\Program Files\Java\jdk1.6.0_17\bin
 
 兩次確定值後,環境變量就設置ok了
 可以去cmd中輸入javac,列出很多java命令就表示正常安裝了。

參考網址:http://bbs.gfan.com/thread-1218428-1-1.html
windows下配置java環境


二、反編譯Apk得到Java源代碼(這個沒弄成功)

1. 工具下載:需用到dex2jar和JD-GUI這2個工具
 dex2jar下載地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip
 JD-GUI下載地址:
    windows版JD-GUI:http://laichao.googlecode.com/files/jdgui.zip
    Linux版JD-GUI:http://laichao.googlecode.com/files/jd-gui-0.3.2.linux.i686.tar.gz

2. 步驟:
 首先找到Android軟件安裝包中的classes.dex,把.apk文件改名爲.zip,然後解壓縮,得到其中的classes.dex文件,它就是java文件編譯再通過dx工具打包成的,所以現在我們就用上述提到的2個工具來逆方向導出java源文件

 把classes.dex拷貝到dex2jar.bat所在目錄。在命令行模式下定位到dex2jar.bat所在目錄,運行 dex2jar.bat classes.dex  ,生成classes.dex.dex2jar.jar
 
 運行JD-GUI工具(它是綠色無須安裝的)打開上面的jar文件,即可看到源代碼。

參考網址:http://www.eoeandroid.com/thread-90027-1-1.html
如何反編譯APK


三、反編譯apk生成程序的源代碼和圖片、XML配置、語言資源等文件。

1. 工具下載:在http://code.google.com/p/android-apktool/下載獲得apktool1.4.1.tar.bz2和apktool-install-windows-r04-brut1.tar.bz2這兩個包。

2. 將上面的兩個包解壓到統一個目錄下:aapt.exe(apktool-install-windows-r04-brut1.tar.bz2)、apktool.bat(apktool-install-windows-r04-brut1.tar.bz2)、apktool.jar(apktool1.4.1.tar.bz2)。

3. 打開cmd窗口,進入apktool.bat所在的目錄,輸入:
 apktool d E:\h200\APK_Decompile-Package_Dexopt\Decompile-Package\apks\Ltv2.2.3.apk E:\h200\APK_Decompile-Package_Dexopt\Decompile-Package\apks\Ltv   // 命令行解釋:apktool d 要反編譯的文件 輸出文件夾
 如果沒有寫上輸出文件夾的話,那麼將會在apktool.bat所在的目錄下新建一個apk同名的目錄,apk的內容內反編譯到這裏。
 特別注意的是,如果有類似下面的錯誤的話:
 Exception in thread "main" unacceptable character #FFFD special characters are n
ot allowed
  in "<reader>", position 28
        at org.yaml.snakeyaml.reader.StreamReader.checkPrintable(StreamReader.ja
va:68)
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:159)
        at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:117)
        at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:106)
        ...
     這個貌似是由於apk的名字是中文引起的,用英文命名就沒有這個錯誤了。
    
     打開輸出目錄,可以看到women需要的各種資源了。

4.  可以對這些資源源碼進行修改,重新打包成apk。

5. 編譯打包apk,輸入apktool b E:\h200\APK_Decompile-Package_Dexopt\Decompile-Package\apks\Ltv E:\h200\APK_Decompile-Package_Dexopt\Decompile-Package\apk\Ltv_new2.2.3.apk (apktool b apk目錄 apk輸出文件)
 如果沒有指定輸出目錄和文件,那麼會在apk目錄下的dist目錄中有一個out.apk就是打包出來的了。
 E:\h200\APK_Decompile-Package_Dexopt\Decompile-Package\apks\Ltv\dist\out.apk
 
參考網址:
http://www.eoeandroid.com/thread-90027-1-1.html
http://hi.baidu.com/%C5%F4%C8%A5%C8%CB%C1%F4/blog/item/ee2a5310ad7118c1c3fd78be.html
一個APK反編譯利器Apktool(android漢化)


四、簽名
 上面apktool打包出來的apk還沒有簽名,所以需要對其進行簽名才能使用。
 簽名工具和方法見http://www.hiapk.com/bbs/thread-21261-1-1.html
 這裏我用的簽名工具是:APK-sign.rar,解壓之後得到一個sign_pack.bat的批處理文件與一個_Data的文件夾。
 本工具對AndroidManifest.xml中設置了android:sharedUserId的apk簽名無效,如android:sharedUserId="android.uid.system"。
 
 1. 將apk改成以zip結尾的後綴,然後解壓
 2. 將解壓之後的文件夾拷貝到APK-sign目錄下(與sign_pack.bat統一目錄)
 3. 我們可以直接將這個apk解壓後的目錄拖到sign_pack.bat腳本上,或者在cmd命令下輸入:sign_pack.bat apk解壓目錄
 4. 最後APK-sign目錄下得到一個有安卓網_www.hiapk.com名字的文件夾了,簽名打包好的APK程序就在這文件夾裏了

參考網址:http://bbs.hiapk.com/thread-21261-1-1.html
個性玩轉小綠人——從APK圖標開始(個性圖標傻瓜教程)

 另外一種簽名如下:
 簽名我們需要用到的工具是Auto-sign。它主要是利用批處理命令,使用signapk.jar對APK文件進行簽名的。你可以用記事本打開Sign.bat,看看它的具體調用關係。關鍵如下:
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk

所以pk8和x509.pem文件都是放在目錄:build/target/product/security下的:
$ ls
common  media.pk8  media.x509.pem  platform.pk8  platform.x509.pem  README  shared.pk8  shared.x509.pem  testkey.pk8  testkey.x509.pem
而signapk.jar位於:./vendor/mediatek/ginwave73_gb/artifacts/out/host/linux-x86/framework/signapk.jar
通常在編譯過程中會拷貝到out/host/linux-x86/framework/中用來簽名。

在android的編譯系統中,對apk簽名的函數和上面的語句一樣,定義在文件:build/core/definitions.mk +1458
# Sign a package using the specified key/cert.
#
define sign-package
$(hide) mv $@ [email protected]
$(hide) java -jar $(SIGNAPK_JAR) \
        $(PRIVATE_CERTIFICATE) $(PRIVATE_PRIVATE_KEY) [email protected] [email protected]
$(hide) mv [email protected] $@
endef

例如:java -jar out/host/linux-x86/framework/signapk.jar  build/target/product/security/testkey.x509.pem  build/target/product/security/testkey.pk8 DataDialog.apk DataDialog_signed.apk

下面是編譯OTA升級包的時候對它的簽名過程
unzipping target target-files...
  running:  unzip -o -q out/target/product/ginwave73_gb/obj/PACKAGING/target_files_intermediates/ginwave73_gb-target_files-user.lizhiguo.zip -d /tmp/targetfiles-NyLMw3
--- target info ---
fstab                     = (dict) {'/sdcard': <common.Partition object at 0x1f39f50>, '/cache': <common.Partition object at 0x1f39dd0>, '/boot': <common.Partition object at 0x1f39d90>, '/system': <common.Partition object at 0x1f39f90>, '/recovery': <common.Partition object at 0x1f39e90>, '/data': <common.Partition object at 0x1f39e10>, '/misc': <common.Partition object at 0x1f39e50>}
mkyaffs2_extra_flags      = (str) -c 2048 -s 64
recovery_api_version      = (int) 3
tool_extensions           = (str) mediatek/config/out/ginwave73_gb/../common
using device-specific extensions in mediatek/config/out/common
unable to load device-specific module; assuming none
  running:  mkbootfs /tmp/targetfiles-NyLMw3/BOOT/RAMDISK
  running:  minigzip
  running:  mkbootimg --kernel /tmp/targetfiles-NyLMw3/BOOT/kernel --board 1322807678 --ramdisk /tmp/targetfiles-NyLMw3/BOOT/ramdisk --output /tmp/tmpwV7yFb
  running:  mkbootfs /tmp/targetfiles-NyLMw3/RECOVERY/RAMDISK
  running:  minigzip
  running:  mkbootimg --kernel /tmp/targetfiles-NyLMw3/RECOVERY/kernel --ramdisk /tmp/targetfiles-NyLMw3/RECOVERY/ramdisk --output /tmp/tmp3XoSLS
  running:  imgdiff /tmp/tmpN31ZO7 /tmp/tmp2YZWcz /tmp/tmpudN8Kg
  running:  openssl pkcs8 -in build/target/product/security/testkey.pk8 -inform DER -nocrypt
  running:  java -Xmx1024m -jar out/host/linux-x86/framework/signapk.jar -w build/target/product/security/testkey.x509.pem build/target/product/security/testkey.pk8 /tmp/tmpsbUI4i out/target/product/ginwave73_gb/ginwave73_gb-ota-user.lizhiguo.zip
 

參考網址:http://www.unpack.cn/forum.php?mod=viewthread&tid=68732
APK反編譯破解方法與加密措施

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章