您的位置:首页 > 移动开发 > Android开发

Android签名和反编译的学习

2013-03-05 16:27 106 查看
1. 先创建一个基本的android程序,不修改任何代码,然后我们导出一个没签名的apk文件。
步骤:右键项目 -> android tools -> Export Unsigned Application Package

2. 使用keytool工具生成数字证书。这个工具在jdk的bin目录下。
keytool -genkey -v -keystore "d:\hellosigner.keystore" -alias hellosigner -storepass passwd -keypass passwd -keyalg RSA -validity 20000
genkey表示生成公私钥对
v表示省略详细输出
keystore为证书路径和名称
alias为证书别名
storepass为密钥库密码
keypass为访问私钥的密码
keyalg加密算法
validity有效期,单位是天

3. 使用jarsigner为程序签名。工具也在jdk的bin目录中。
jarsigner -verbose -keystore "d:\hellosigner.keystore" -signedjar "d:\hellosigner_signed.apk" -storepass passwd -keypass passwd "d:\hellosigner.apk" hellosigner
verbose表示显示签名过程
keystore为证书文件
signedjar为签名后的文件
storepass和keypass为上面生成时设置的密码
后面为输入的未签名的apk文件,最后是证书的别名,和上面alias的名称一致。
签名后会生成META-INF目录,里面包含了签名信息的文件。

4. 使用zipalign工具优化已经签名的apk。这个工具在sdk的tools目录下。
zipalign -v 4 "d:\hellosigner_signed.apk" "d:\hellosigner_signed_aligned.apk"
v表示显示过程信息
4表示32位android设备的cpu的字节,用来做内存边界对齐,让数据直接映射到内存中,提高android内存使用率。

5. 下载apk-tool工具,执行反编译工作:
apktool d d:\hellosigner_signed_aligned.apk d:\hellosigner
d表示显示编译过程
打开文件夹就可以看到一些资源文件和AndroidManifest.xml了,还有一些smali文件。

6. 重新打包。
apktool b d:\hellosigner
在打包的文件夹下的dist目录会看到一个没签名的apk文件。

7. 使用signapk.jar进行重新签名。
java -jar signapk.jar testkey.x509.pem testkey.pk8 d:\hellosigner\dist\hellosigner_signed_aligned.apk d:\hellosigner\dist\hellosigner_resigned.apk
signapk.jar在源码的out/host/linux-x86/framework/signapk.jar中。
*.x509.pem为x509格式公钥,pk8为私钥,在build/target/product/security中获取。

有四组默认签名供Android.mk在编译APK使用:
1)、testkey:普通APK,默认情况下使用。
2)、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system。
3)、shared:该APK需要和home/contacts进程共享数据。
4)、media:该APK是media/download系统中的一环。
应用程序的Android.mk中有一个LOCAL_CERTIFICATE字段,由它指定用哪个key签名,未指定的默认用testkey.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: