zoukankan      html  css  js  c++  java
  • APK反编译、重编译、签名、查看源码

    1.反编译与重编译

    工具:apktool
    下载地址:https://ibotpeaches.github.io/Apktool/
    环境:Java 7 (JRE 1.7)
    安装步骤:参考官网(也可以不安装,直接使用java -jar apktool.jar 命令) ,具体如下图所示
    反编译命令:java -jar apktool.jar d xxx.apk --frame-path <指定框架资源保存路径>
    重编译命令:java -jar apktool.jar b <反编译出来的文件夹> --frame-path <指定框架资源保存路径>
    作用:资源文件的获取,可以提取出图片文件和布局文件进行查看

    1.1 反编译

    打开终端指向apktool根目录,输入以下命令即可完成反编译:

    java -jar apktool.jar d xxx.apk

    如上图所示日志中出现了一个警告:

    S: WARNING: Could not write to (C:UsersAdministratorAppDataLocalapktoolfra
    mework), using C:UsersADMINI~1AppDataLocalTemp instead...
    S: Please be aware this is a volatile directory and frameworks could go missing,
     please utilize --frame-path if the default storage directory is unavailable

    大致意思是默认保存框架资源的文件夹不可用。如果不想这个警告输出,可以在命令后面加上参数--frame-path重新指定保存框架资源的文件夹。

    java -jar apktool.jar d xxx.apk --frame-path <指定框架资源保存路径>

    成功反编译的话可以看到如下日志并生成一个和apk名字一样的文件夹(与apktool.jar同一目录)以及在指定目录生成的1.apk文件。

    这样我们就可以根据需求对mainfest.xml等文件做相应的修改了(比如增加权限等)。

    随着反编译的流行,为了保证自己的产品不会变成满天飞的山寨应用,更多的企业选择了混淆编译以及将核心逻辑编译成.so等方法,以防止别人的反编译。

    1.2 重编译

    接下来我们就需要进行重编译,同样是使用Apktool工具。在终端输入:
    java -jar apktool.jar b <反编译出来的文件夹> --frame-path <指定框架资源保存路径>

    重编译成功的话会在文件夹中看到build和dlist文件夹,重新编译成功的apk就保存在dlist文件夹中。但是这个apk目前还不能正常安装,原因是该apk还是未签名状态(unsign)。

    2.签名

    工具:re-sign.jar
    下载地址:https://pan.baidu.com/s/1i3H0tKD
    前提:1.SDK;2.C:UsersAdministrator.androiddebug.keystore文件
    作用:将apktool重编译的应用变成带有签名证书的应用

    接下来我们就说说Android应用的签名。

    在Eclipse的设置中点击Android标签中的Build选项,可以看到Eclipse中Android工程默认的签名都是Android ADT自带的debug签名,如图所示。

    同样地,右击一个项目,选择Android Tools中的Export Signed APPlication Package,能够成功创建所选签名证书的应用apk。

    而需要让一个没有签名的应用程序签上名的话,需要工具re-sign.jar。

    下载后双击打开,界面如下图所示。

    将重编译出来的apk文件拖到上图界面上,选择保存路径后,弹出下图所示消息提示签名成功。

    另外,由此提示消息也可以得知此apk包的package name和main activity。

    此时会生成一个<apk name>_debug.apk文件,可以将其安装到模拟器或真机上测试。

    问题1:在打开re-sign.jar时可能会弹出如下消息。

     

    解决方法:在环境变量中配置ANDROID_HOME为sdk路径,并将ANDROID_HOME添加到Path中。

    问题2:签名后的apk包安装失败。

    可能原因:重签名的原理就是去除apk正式签名,使用系统自带的 debug.keystore默认签名进行再次签名。因为re-sign.jar默认的 debug.keystore 在C盘/用户/.android/debug.keystore下,而后来Android SDK更新后 debug.keystore存在于SDK目录/.android/debug.keystore,导致C盘/用户/.android/目录下缺少debug.keystore文件。

    解决方法:在C盘/用户/.android/目录下创建一个debug.keystore文件即可。

    创建debug.keystore的方法(参考这里):
    在cmd下,进入C:UsersAdministrator.android目录执行命令如下:
    keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000
    输入密码,用户等信息确认后便可生成一个debug.keystore。

    最后,我在github上找到了一个re-sign.jar的优化版本apkReSign,大家也可以尝试使用。
    https://github.com/pengwei1024/apkReSign

    3.查看源代码 

    工具1:dex2jar
    下载地址:https://sourceforge.net/projects/dex2jar
    反编译命令:d2j-dex2jar.bat xxx.apk
    作用:将apk反编译成java源代码
    
    工具2:JD-GUI
    下载地址:http://jd.benow.ca/
    使用方法:双击打开,将<apk name>-dex2jar.jar文件直接拖进去即可查看
    作用:查看apk中的源代码

    在dex2jar根目录处打开命令窗口,输入以下命令进行反编译:

    d2j-dex2jar.bat xxx.apk

    成功之后会生成<apk name>-dex2jar.jar文件。

    接着使用JD-JUI打开<apk name>-dex2jar.jar文件,就能够直接看到应用程序的代码,如下图所示。

     

  • 相关阅读:
    【WPF】操作RichTextBox(取值、赋值、清空、滚动条自动滚动实例、文本自动滚动实例)
    系统初始化 服务列表
    多个filter如何决定调用顺序
    IE浏览器 查看Form对象
    java try_catch 分析
    关于ClassLoader 和Class的俩个记录
    lis分析之一一批处理(任务)如何连接数据库的
    document.all("div).style.display = "none"与 等于""的区别
    Mybatis Util包
    Spring创建bean对象的三种方式
  • 原文地址:https://www.cnblogs.com/zhengna/p/9982243.html
Copyright © 2011-2022 走看看