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得到,编译太麻烦,建议直接百度下载。