签名和反编译总结

来源:互联网 发布:京东算法工程师待遇 编辑:程序博客网 时间:2024/05/22 06:57

主要讲下怎么简单的使用工具进行重新签名和反编译,要看详细介绍的可以自行百度。


重新签名的要点:解压apk文件删掉META-INF目录下的CERT.SF和CERT.RSA两个文件(修改apk后缀为rar,删掉后再改为apk)
然后,用Android提供的SignApk工具来签名,包括jarsigner进行keystore签名和signapk.jar签名。


即 使用:java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk

或者jarsigner -verbose -keystore a.keystore -signedjar wendy_signed.apk wendy.apk a.keystore

后者也可以使用eclipse来使用keystore秘钥签名。


下面说下秘钥的生成:

1.testkey.x509.pem  testkey.pk8的生成

Android 提供了一个脚本 mkkey.sh ( build/target/product/security/mkkey.sh ),用于生成密钥,生成后在应用程序中通过Android.mk 中的 LOCAL_CERTIFICATE 字段指名用哪个签名
            i.              生成公钥 
openssl genrsa -3 -out testkey.pem 2048 
其中 -3 是算法的参数, 2048 是密钥长度, testkey.pem 是输出的文件

           ii.              转成 x509 格式(含作者有效期等) 
openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000 -subj ‘/C=US/ST=California/L=MountainView/O=Android/OU=Android/CN=Android/emailAddress=android@android.com ’
这个是一些个人或者公司信息,可以参照着eclipse生成keystore的过程对照着看看。

           iii.              生成私钥 
openssl pkcs8 -in testkey.pem -topk8 -outform DER -out testkey.pk8 -nocrypt 
把的格式转换成 PKCS #8 ,这里指定了 -nocryp ,表示不加密,所以签名时不用输入密码


或者使用源码下的秘钥build/target/product/security/下有4组秘钥,例如platform.pk8和platform.x509.pem等。


2.keystore的生成可以在eclipse指引下进行,也没用过,略过。


—————————————————————割割割—————————————————————————


下面是apk反编译


这里有2个概念,apk整体的反编译和apk的classes.dex的反编译。

apk的反编译得到manifest清单文件以及资源文件和最重要的smali文件,smali语法有兴趣的可以自行学习了解,我也不懂,看着头大。

classes.dex反编译的就是java文件了,很常见的,不过逻辑也很混乱,并且代码混淆过了的话更加不好理清。


这里经常使用的就是apktool工具和dex2jar,jdgui。

前者使用的指令如下:java -jar apktool.jar d 源apk  目标文件夹
      例如如下的命令:java -jar apktool.jar d aa.apk  a/

dex2jar和jdgui。就是解压apk文件复制出classes.dex文件,使用里面的bat文件将dex文件转换成class文件,使用jdgui可以直接打开。


总结:最简单的apk破解就是拿到java代码后,绞尽脑汁的了解需要的信息和程序的逻辑,然后对照java文件找到smali代码里相应的实现,修改smali文件,再将smali编译成apk,并且重新签名,然后按照运行。当然,可能有些使用了其他的更复杂的验证技术,咱也不懂,略...


附上apktool和dex2jar,jdgui。