安卓逆向學習----apk重打包和簽名

1.apktool d Wandoujia.apk 反編譯爲smali,dex2jar 和jd-gui可以看到java級別的源碼,這裏只考慮smali語言。
res/values/strings.xml中有字符串資源,索引值在同目錄下的public.xml中
全局搜索id可以確定字符串在何處使用。
這些資源在開發時在gen/<packagename>/R.java文件的string類中被標識


2.對apk代碼修改,這裏的修改指的是smali層面


3.apktool b dir/ -o xxx.apk 重打包爲apk


4.keytool -list -printcert -jarfile XXX.apk可以查看apk簽名,或者
keytool -printcert -file CERT.RSA  查看META-INF文件夾下的證書文件
以wuandoujia.apk爲例,以下爲簽名信息:
Signer #1:

Signature:

Owner: CN=Oasis Feng
Issuer: CN=Oasis Feng
Serial number: 50ac911f
Valid from: Wed Nov 21 16:30:23 CST 2012 until: Fri Nov 14 16:30:23 CST 2042
Certificate fingerprints:
     MD5:  14:D5:86:45:A1:2D:42:93:A9:C8:9E:57:60:FE:6E:16
     SHA1: 6B:DB:E6:CE:E1:81:B0:F3:1F:87:61:0D:AC:CC:8A:B7:7F:8A:D4:03
     SHA256: 44:3B:BA:F9:F4:15:3B:55:8B:C1:43:C8:34:67:42:EC:BF:4B:2A:B3:4A:EB:74:7E:01:C6:B3:03:18:97:2C:20
Signature algorithm name: SHA1withRSA
Subject Public Key Algorithm: 1024-bit RSA key
Version: 3


5.對重打包之後的APK進行簽名

有兩種方法,一種是使用jarsigner,另一種是使用signapk.jar

方法一:這是在調試的時候的簽名
1)建立個人的密鑰儲存器(keystore)

keytool -genkey -v -keystore [keystore name] -alias [key alias] -keyalgRSA -keysize 2048 -validity [valid days]

2)

 jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [keystore name] [XX.apk] [keysore alias]

3)jarsigner -verify xxx.apk 驗證是否簽名成功,雖然簽名成功但是會提示

the jar will be treated as unsigned because it is signed with a weak algorithm that is now disabled by the security property: jdk.jar.disabledAlgorithms=MD2, MD5, RSA keysize < 1024,DSA keysize < 1024

使用這種方法簽名之後可以安裝,但是使用keytool看不到簽名信息,這個問題我還沒有解決

方法二:

這種是在應用打包發佈的時候進行簽名,使用下面的命令,這裏的簽名信息是由安卓系統提供的。

java -jar signapk.jar platform.x509.pem platform.pk8 unsigned.apk signed.apk

其中.x509.pem .pk8文件可以在ld/target/product/security文件夾下找到,signnapk.jar可以通過編譯安卓源碼的bin/build/tools/signapk得到,編譯太麻煩,建議直接百度下載。

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