zoukankan      html  css  js  c++  java
  • 安卓apk反编译、修改、重新打包、签名全过程

    首先明确,反编译别人apk是一件不厚道的事情。代码是程序员辛苦工作的成果,想通过这种手段不劳而获,是不对的。这也说明,代码混淆是非常重要的。本文抱着学习的态度,研究在一些特殊的情况下如果有需要,该怎么反编译apk。

    工具简介

    apktool,编译和反编译apk,从apk中提取图片和布局资源

    dex2jar,将可运行文件classes.dex反编译为jar源码文件

    jd-gui,查看jar源码文件

    反编译

    apktool安装

    Windows系统:
    1. 首先确保系统安装有Java
    2. 下载apktool.bat脚本
    3. 下载最新版本的apktool.jar,并且重命名为apktool.jar
    4. 将apktool.bat和apktool.jar放在同一目录下,就可以在命令行窗口使用了。
    5. 其他系统请参考链接

    用法

    可以直接在命令行执行apktool.bat查看帮助。这里介绍两个最常用的:

    反编译

    apktool.bat d -o <output_dir> test.apk

    其中<output_dir>指定输出目录,默认为apk.out。

    编译

    apktool.bat b -o <output.apk> <input_dir>

    其中<input_dir>就是上面反编译输出的目录,<ouput.apk>是编译的输出结果,默认为dist/<name>.apk。

    示例

    一个典型的apktool反编译的结果如下:

     

    此时,可以查看AndroidManifest.xml,res及smali文件了。甚至可以修改这个目录下的资源文件或者smali文件,然后重新编译。

    值得注意的是,apktool反编译出来只能得到apk的smali文件,即汇编语言版本,并不能得到源代码。

    查看源码

    一. 这里需要用到另外两个工具,下载dex2jar并解压。下载jd-gui,这是一个带UI的应用程序。

    二. 将需要反编译的apk的后缀名改为.zip或者.rar,然后解压到一个文件夹,得到其中的classes.dex文件。

    三. 将classes.dex复制到解压后的dex2jar-2.0文件夹下。从命令行进入到该目录,执行

    d2j-dex2jar.bat classes.dex

    会生成由classes.dex反编译得到的jar文件,classes-dex2jar.jar。

    四. 然后使用jd-gui打开classes-dex2jar.jar,就可以查看源码了。

     

    如果apk在发布的时候加过混淆处理,那么我们也只能得到混淆后的版本。想通过阅读源码来破解别人的apk,还是有一些难度的。

    修改代码

    如果只是修改apk相应的资源,例如图片,比较好办,在res文件夹下找到相应的文件替换就可以。

    修改代码比较麻烦,因为反编译出来的结果中只有smali文件,即Java虚拟机支持的汇编语言。

    如果确实需要修改代码,就得对照smali文件和从classes.dex反编译出来的源码了,按照smali的规范来改动即可。相当于写汇编,这个难度比较大。

    重新打包

    使用apktool编译前面反编译生成的目录即可。

    签名

    签名是对要发布的apk文件作标记,确保你的apk文件有唯一的身份归属认证,只有相同签名和相同包名的文件才可以覆盖安装并保留用户信息。

    对于反编译的apk,我们可以通过jarsigner来对它进行签名。

    生成keystore文件

    首先,签名需要keystore文件,可以使用keytool工具生成,一般Java环境都带有keytool命令,可以在命令行测试。

    keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore

    各个参数解释如下:

    -genkey 产生证书文件
    -alias 产生别名
    -keystore 指定密钥库的.keystore文件中
    -keyalg 指定密钥的算法,这里指定为RSA(非对称密钥算法)
    -validity 为证书有效天数,这里我们写的是40000天

    输入上述命令后,会有如下的提示:

  • 相关阅读:
    解决取消input标签中disabled属性
    【转】jQuery源码分析-13 CSS操作-CSS-类样式-addClass+removeClass+toggleClass+hasClass
    Bigpipe学习【转】
    用户请求的生命周期[传统模式与BigPipe]
    gcc扩展语法一:在表达式中的语句和声明
    分享一个关于pthread线程栈在mm_struct里面的分布问题
    neo4j 安装步骤 转自:http://blog.csdn.net/luoluowushengmimi/article/details/19987995
    sudoers文件解析 转自:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1971013
    匿名union
    VMware虚拟机修改BIOS启动项
  • 原文地址:https://www.cnblogs.com/CnKker/p/11125182.html
Copyright © 2011-2022 走看看