今天在尝试简单的反编译,但是网上资料多繁杂重复且存在不可行的方式,遂记下此收获
反编译
反编译:
apktool d //apktool d
反编译文件,并且会在当前目录下生成test文件夹,其中,
res文件夹下存放的是反编译出来的所有资源,
smali文件夹下存放的是反编译出来的所有代码,
则是经过反编译还原后的manifest文件,
smali文件夹下的文件smali文件使用的是Android虚拟机所使用的寄存器语言。
二次打包:
apktool b test -o new_test.apk //apktool b XXX(反编译后的文件夹名称) -o (新APP的名字)
会在当前目录下生成需重新签名的APK文件,无法安装到安卓系统上
可以使用Android Studio或者IDEA简单生成签名文件来签名,使用JDK自带的jarsigner来对APK签名
APK签名和jar包签名,两者原理流程差不多
对APK签名,既可用 JDK/bin/,
也可用 Android SDK/build-tools/版本号/或者Android SDK/build-tools/版本号/lib/
最新版下载地址:/Apktool/install/
签名
网上实例里包含算法名称,同时我想到在AS或者IDEA里生成秘钥的时候并没有指定算法,所以算法上的指定可能就是在这里,并且如果不指定话,似乎默认为RSA
使用IDEA生成密钥库123_key.jks,密码123456,别名(似乎是密钥链)key,别名密码123456(以下亲测可行,具体含义请看下面的参数说明)
(命令在java路径下:\jdk路径\bin\)
-verbose -sigalg SHA1withRSA -digestalg SHA1 -keystrore 123_key.jks -storepass 123456 key
-verbose -keystrore 123_key.jks -storepass 123456 key
验证是否签名成功:jarsigner -verify -verbose -certs new_test_aligned.apk
zipalign是一款对APK文件进行优化的工具。(该工具在/build-tools/目录下)
APK文件本质上是一个zip压缩文档,经过优化能使包内未压缩的数据有序的排列,从而减少应用程序运行时的内存消耗。在使用jarsigner对APK重签名之后,可以使用该工具优化已签名APK文件。
zipalign -v 4 //执行4字节对齐优化操作
zipalign -c -v 4 //检查当前APK是否已经执行过Align优化
注意:
1)签名文件,APK文件为完全路径不能有中文,空格,转译字符
2)签名前后的文件路径不能改
3)加密算法请参考官方文档自行选取,但是第一次选择了后后面不要再随意更换加密算法
4)在jdk7及以上版本中执行jarsigner命令时,务必添加上-digestalg SHA1 -sigalg MD5withRSA参数,以修改jdk7默认digest算法sha256为sha1,修复Android低版本(4.2以下)出现的问题。
C:\Users\悦>jarsigner -help
用法: jarsigner [选项] jar-file 别名
jarsigner -verify [选项] jar-file [别名...]
[-keystore <url>] 密钥库位置
[-storepass <口令>] 用于密钥库完整性的口令
[-storetype <类型>] 密钥库类型
[-keypass <口令>] 私有密钥的口令 (如果不同)
[-certchain <文件>] 替代证书链文件的名称
[-sigfile <文件>] .SF/.DSA 文件的名称
[-signedjar <文件>] 已签名的 JAR 文件的名称
[-digestalg <算法>] 摘要算法的名称
[-sigalg <算法>] 签名算法的名称
[-verify] 验证已签名的 JAR 文件
[-verbose[:suboptions]] 签名/验证时输出详细信息。
子选项可以是 all, grouped 或 summary
[-certs] 输出详细信息和验证时显示证书
[-tsa <url>] 时间戳颁发机构的位置
[-tsacert <别名>] 时间戳颁发机构的公共密钥证书
[-tsapolicyid <oid>] 时间戳颁发机构的 TSAPolicyID
[-tsadigestalg <算法>] 时间戳请求中的摘要数据的算法
[-altsigner <类>] 替代的签名机制的类名
[-altsignerpath <路径列表>] 替代的签名机制的位置
[-internalsf] 在签名块内包含 .SF 文件
[-sectionsonly] 不计算整个清单的散列
[-protected] 密钥库具有受保护验证路径
[-providerName <名称>] 提供方名称
[-providerClass <类> 加密服务提供方的名称
[-providerArg <参数>]]... 主类文件和构造器参数
[-strict] 将警告视为错误
签名
注:
APK调试签名的默认密钥库, 默认在C:\Users\用户名\.android
密钥库名:
密钥别名: androiddebugkey
密钥库密码: android
apksigner是一款在Android build tools 24.0.3及以上版本中提供的对apk文件签名以及验证签名信息的工具,它与jarsigner的作用类似,但比后者功能更加强大。注意在使用apksigner前,请先对APK执行zipalign,而不能在之后执行zipalign操作,这一点与jarsigner不同。(路径在build-tools\相应版本\)
apksigner sign --ks //签名
apksigner verify --verbose //验证签名
4.更多信息
更多信息请自行查阅 -help和 help