Android反编译后重新打包apk

作者: 千山万水迷了鹿 | 来源:发表于2016-07-25 18:02 被阅读904次

    为什么要反编译别人的代码?

    • 人家比咱写的好,学习

    • 看中了人家的某个控件,抄袭

    • 看中了人家的本地数据库,想要

    • 但是人家的本地数据库加密了,要读源码才能解密

    为什么要打包别人的apk?

    • 反编译后的代码有些地方读不通顺。想添加log。

    一个基本的逆向工程的流程。

    apktool反编译apk --> 修改图片等资源文件(或者smali源码)--> apktool 打包apk --> 对打包好的apk用jarsigner签名 [--> zipalign优化apk,最后这步可选操作]

    分别对应得详细操作:

    1. apktool反编译apk

    $ apktool d test.apk

    1. 修改图片,填好string.xml,修改smali

    详细操作,尽情的折腾吧,隐藏某个view,添加某个view。

    1. apktool 打包

    apktool b test 这里的test是反编译test.apk 后生成的文件夹。最终的生成的新的未签名的apk的路径为./test/dist/test.apk

    1. 用你自己的证书对别人的apk进行签名

    这是当然了,你反编译了比人的app,可定拿不到人家的证书,但是Android系统对没有用证书签名的apk是不允许安装的。这时候我们自己生成一个证书。

    
    第一步:生成RSA密钥对
    
    keytool -genkeypair -alias adorkable_alias -keyalg RSA -validity 400 -keystore adorkable.keystore
    
    -genkeypair 指定生成密钥对
    
    -alias 密钥对的别名
    
    -keyalg 密钥对用于的算法,这里用的是RSA
    
    -validity 密钥对的有效期,单位为天
    
    -keystore 密钥对存储的文件名
    
    输入后,根据提示输入相应的内容就好了。
    
    第二步:对未签名的apk进行签名
    
    jarsigner -verbose -keystore adorkable.keystore -signedjar result_singed.apk my_unsigned.apk adorkable_alias
    
    -verbose 输出签名详细信息
    
    -keystore 指定密钥对的存储路径
    
    -signedjar 后面三个参数分别是 签名后的APK包 未签名的APK包 和 密钥对的别名
    
    签名时,会要求输入密钥对的密码,这个是你在生成密钥时输入的密码
    
    

    到这里就可以用adb install 将app安装到手机里了

    1. 优化apk包

    这一步是可选的,用来将apk包进行整理,以适应设备的读取等

    zipalign -f -v 4 test.apk test_zip.apk

    -f 强制覆盖已有的文件

    -v 输出详细内容

    4 指定档案整理的字节数,一般为4,及32位。如果以后android的设备有64位的,可能要改成8吧。

    test.apk 是未整理的apk文件名

    test_zip.apk 是整理后的apk文件名

    我的博客

    相关文章

      网友评论

      本文标题: Android反编译后重新打包apk

      本文链接:https://www.haomeiwen.com/subject/knzgjttx.html