有时会需要反编译APK,各人有各人的原因,你都懂的……

准备工作:

下载APKTool,通过下面这个连接进行下载,https://code.google.com/p/android-apktool/downloads/list

windows下只需要下载这两个文件包即可:apktool1.5.2.tar.bz2和apktool-install-windows-r05-ibot.tar.bz2

分别解压到到一个方便操作的目录下,然后就可以通过控制台进行操作了,当然前提是你配置已经有了JAVA环境,这个网上一搜一大堆,就不赘述了。

       反编译:                               

把要反编译的APK文件放到跟APKTool四个文件的同一个目录下;

打开控制台,跳到该目录(例如是C:\Windows),执行:

cd C:\Windows

然后执行:

apktool d apkname.apk  foldername

执行完上面语句后,如果没有出现错误提示,则成功反编译了,找到foldername目录,打开smali目录即为反编译出来的字节。

但我在执行上面语句后,却出现了错误提示:

  • brut.androlib.err.UndefinedResObject: resource spec:
  • 0x010300dd 

    根据提示描述是找不到资源文件,应该是要反编译的APK文件用到了系统的一些资源。

    解决办法:

    从手机中导出framework-res.apk文件,该文件是/system/framework下面,把这个文件拷到跟apkTool同一个目录下,执行以下语句把资源文件加进来:

    apktool if freagmework-res.apk

    执行完以后就可以把framework-res.apk导进来。此时再执行apktool d即可以正常反编译了。

    由于反编译出来的是字节码,所以想修改软件逻辑就需要知道一点字节码的知识,可以看这里:寄存器类型、函数和成员操作符号

    在这里列举几个常用的逻辑符号的对应smali语法:

    符号 smali语法
    == if-eq
    != if-ne
    equals if-eqz
    !equals if-nez

    修改完代码逻辑后,就要重新打包成APK文件了:

    apktool b foldername

    其中foldername即放反编译结果的目录,执行成功后会在该目录的dist目录下有一个重新打包后的apk文件。

    当然我在重新打包时出现了错误提示:

    1. Exception in thread "main" brut.androlib.AndrolibException: brut.directory.PathN
    2. otExist: apktool.yml

    从字面上理解就是找不到apktool.yml这个文件,如果在执行apktool
    d后能正常反编译,在目录中是会存在apktool.yml文件的,我之所以出现这个错误,是因为在反编译时出现了上面提到的“资源找不到”错误后,我看
    到反编译出了字节码,就没有理会它导致的。

    好啦,到此就成功打包了一个新的apk文件了,但还不要高兴得太早,该文件是一个没有签名的apk,有了解过android的应该都知道,没有签名是无法安装的。那就要重新为该文件签一下名了。把你的签名文件和apk拷到同一个目录下,然后执行以后语句即可:

    jarsigner -verbose -keystore
    wendy.keystore -signedjar wendy_signed.apk wendy.apk wendy.keystore

    这里输入wendy.keystore即你的签名文件名称,文件wendy.apk,最终生成wendy_signed.apk为Android签名后的APK执行文件。

    大功告成!!!

    参考文章:

    http://blog.creke.net/786.html

    http://blog.csdn.net/caszhao/article/details/6030425

    http://danqingdani.blog.163.com/blog/static/1860941952012103041246686/

    http://blog.csdn.net/wenhaiyan/article/details/5520964

  • brut.androlib.err.UndefinedResObject: resource spec:
  • 0x010300dd

ApkTool反编译和重新打包的更多相关文章

  1. apktool的下载,安装,反编译和重新打包

    一.环境要求 安装java 1.8 以上 命令行运行 java -version 返回版本大于1.8 如果没有,请安装java 1.8 二.下载与安装 下载apktool_x.x.x.jar到本地 官 ...

  2. 【转】利用apktool反编译apk,并且重新签名打包

    网站:https://ibotpeaches.github.io/Apktool,下载安装好apktool. 我的安装在 C:\Users\Administrator\Downloads\apktoo ...

  3. apktool反编译工具

    几个报错的解决办法 apktool反编译时经常会出现下面的信息 Input file was not found or was not readable. Destination directory ...

  4. ApkTool反编译apk,去除广告或者汉化后重新打包apk,并签名

    http://my.oschina.net/mopidick/blog/135581 以ubuntu的环境为例子,window的大同小异 首先下载apktool工具:https://code.goog ...

  5. Android反编译和再打包神器:Apktool

    首先推荐一下这东东,官网:https://ibotpeaches.github.io/Apktool/ 安装.使用之类的看官方文档吧,写这个博客主要是mark一下这东西. 这玩意只能供打包党来用,要想 ...

  6. Apktool反编译apk资源文件

    Android开发过程中,如何查看已经打包的APK内部xml呢,google下找到了apktool这个工具, apktool项目现在已经迁移到了github:apktool 目前最新版本2.2.2,如 ...

  7. apktool反编译工具使用详解

    文章转自: http://zhangyan1158.blog.51cto.com/2487362/683234 一.APKTOOL使用环境配置 1.安装JAVA并设置环境变量. 下载安装都很简单,关键 ...

  8. 反编译sencha toucha打包的apk文件,修改应用名称支持中文以及去除应用标题栏

    一.去除安卓应用标题栏 sencha touch打包android安装包,去掉标题栏titlebar的简单方法 (有更复杂更好的方法,参看"二.利用反编译修改apk的应用名称为中文" ...

  9. apktool反编译apk文件

    1.首先下载apktool文件,可以从我的网盘下载:http://pan.baidu.com/s/1nvPdbVb 2.将你的apk文件和apktool文件放到一个文件夹下,这里就放到D:\study ...

随机推荐

  1. 轻松学习JavaScript二十七:DOM编程学习之事件模型

    在介绍事件模型之前,我们先来看什么是事件和什么是event对象. 一事件介绍 JavaScript事件是由訪问Web页面的用户引起的一系列操作,使我们有能力创建动态页面.事件是能够被 JavaScri ...

  2. Swift is Open Source 博客note

    Swift is Open Sourcehtml, body {overflow-x: initial !important;}html { font-size: 14px; } body { mar ...

  3. <悟道一位IT高管20年的职场心经>笔记

    1. 你一定会在某个时候惊讶地发现,原来当初你曾经硬着头皮挨过来的日子对你是那么的珍贵.2. "'老板就是老板'.这一点,你可能会忘,他一定不会忘.'老板不会总是老板'.这一点,他可能会忘, ...

  4. Urllib3 库详解

    文档:http://urllib3.readthedocs.io/en/latest/

  5. Android开发-新建线程崩溃

    一直不满意车机不能实现屏保,最近发现可以通过设置亮度实现,顾萌生了自己写程序的来实现的念头,遂修改原来练手的app.毕竟过去了1年,各类程序.sdk都已经更新了不知道多少版本.经历了痛苦的升级.更新, ...

  6. 使用JAAS登录kerberos服务器

    java代码: package com.snsprj.jaas0822; import javax.security.auth.*; import javax.security.auth.callba ...

  7. js学习(五)-全局函数和类内部函数区别

    //---------------------------js代码--------------------------- function User(){       //类成员的定义及构造函数 th ...

  8. Java容器有哪些?

    网易面试: 问:Java容器有哪些,你聊一聊吧 Java容器: 数组,String,java.util下的集合容器 数组长度限制为 Integer.Integer.MAX_VALUE; String的 ...

  9. Ogre2.1 结合OpenGL3+高效渲染

    在DX10与OpenGL3+之前,二者都是固定管线与可编程管线的混合,其中对应Ogre1.x的版本,也是结合固定与可编程管线设计.转眼到了OpenGL3+与DX10后,固定管线都被移除了,相对应着色器 ...

  10. (笔记)Linux下的静态库和动态库使用详解

    库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静态库和动态库的区别 1. 静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比 ...