apktool安装

Windows系统: 
1. 首先确保系统安装有Java

2. 下载最新版本的apktool.jar https://ibotpeaches.github.io/Apktool/

下载最新的jar,我看到最新的是2.3.1

2. 为了直接能在运行需要配置apktool.bat
  

@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
chcp 65001 2>nul >nul
java -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0\apktool_2.3.1.jar" %*

apktool.bat和apktool_x.x.x.jar都放在同一目录下面

3. 为了使用方便把目录配置到环境变量中

4. 输入apktool 出现以下则成功

apk反编译

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

其中<output_dir>指定输出目录

xxx.apk为apk的名字

例如我执行

apktool.bat d -o app app.apk

得到反编译的目录

重新编译apk

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

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

执行

apktool.bat b -o output.apk app

出错了,找不到aapt

1.在Android SDK通过build-tools下面选择Android/sdk/build-tools/27.0.3/版本的aapt.exe的目录配置到系统环境变量

2.执行apktool empty-framework-dir --force

3.如果还有问题请查看https://github.com/iBotPeaches/Apktool/issues

这个时候编译的apk是没有签名的不能安装到手机上的

签名

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

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

签名需要keystore文件,如果没有可以新建keystore,如果有跳过

生成keystore文件

APK重签名

/*解释:
jarsigner是Java的签名工具 -verbose参数表示:显示出签名详细信息 -keystore表示使用当前目录中的release.jks签名证书文件。 -storepass 密钥口令 -signedjar ThinkDrive_signed.apk表示签名后生成的APK名称, ThinkDrive_temp.apk 表示未签名的APK, androiddebugkey表示debug.keystore的别名 */ jarsigner -verbose -keystore release.jks -storepass android -keypass android -signedjar signapp.apk nosign.apk test

android apk反编译,重新打包,签名的更多相关文章

  1. Android apk反编译基础(apktoos)图文教程

    本文主要介绍了Android apk反编译基础,使用的工具是apktoos,我们将用图文的方式说明apktoos工具的使用方式,你可以参考这个方法反编译其它APK试试看了 很久有写过一个广工图书馆主页 ...

  2. android逆向基础:apk 反编译 重打包 重签名

    apk 反编译大家都比较熟悉,这里只做一个笔记. 1 反编译 apk apktool d perfect.apk 这样就把资源文件解压缩了, classes.dex 也反编译成了 smali 文件 2 ...

  3. 【转】Android APK反编译就这么简单 详解(附图)

    转载地址:http://blog.csdn.net/vipzjyno1/article/details/21039349 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂 ...

  4. Android APK反编译(一)

    apk是安卓工程打包的最终形式,将apk安装到手机或者模拟器上就可以使用APP.反编译apk则是将该安卓工程的源码.资源文件等内容破解出来进行分析. 一.APK反编译基本原理 1.APK分析 apk文 ...

  5. Android: apk反编译 及 AS代码混淆防反编译

    一.工具下载: 1.apktool(资源文件获取,如提取出图片文件和布局文件) 反编译apk:apktool d file.apk –o path 回编译apk:apktool b path –o f ...

  6. Android APK反编译详解(附图)

    转载自http://blog.csdn.net/sunboy_2050/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而 ...

  7. Android APK反编译easy 详解

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...

  8. Android APK反编译就这么简单 详解(附图)

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...

  9. Android APK反编译详解(附图)(转)

    这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件, ...

随机推荐

  1. jQuery的事件处理方法

    .on()方法用来处理事件 $("li").on("click",function(){ $(this).addClass("complete&quo ...

  2. C++轮子队-第六周--事后分析

    C++轮子队 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 实现2048+俄罗斯方块结合的小游戏,定义的比较清楚,典型用户也很清晰,提供给那些对该类游 ...

  3. JavaScript prototype原型链介绍

    javascript 是一种基于原型的编程 (prototype based programming) 的语言, 而与我们通常的基于类编程 (class based programming) 有很大的 ...

  4. Python如何打包EXE可执行文件

    一.安装Pyinstaller 使用Python打包EXE可执行文件时,需要使用Pyinstaller,使用命令pip install PyInstaller进行安装,如下图: 安装成功后的效果如下图 ...

  5. passing parameter to an event handler [stackoverflow]

    Q: i want to pass my List<string> as parameter using my event public event EventHandler _newFi ...

  6. 线程池ThreadPool实现异步多线程

    ThreadPool线程池的主要方法: 1. public static Boolean QueueUserWorkItem(WaitCallback wc, Object state); WaitC ...

  7. 洛谷P3258 [JLOI2014]松鼠的新家(树上差分+树剖)

    题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...

  8. peaks

    给定一个无向图,点有点权边有边权 Q次询问,每次询问从点v开始只经过边权<=x的边能到达所有点中点权第k大值,无解输出-1 N<=1e5,M,Q<=5e5 建立大根kruskal重构 ...

  9. 如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?

    如何实现 MySQL 的读写分离? 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去. MySQL 主从复制原理的是 ...

  10. __weak 和 __strong 还有Autorelease的用法

    使用容器的block版本的枚举器时,内部会自动添加一个AutoreleasePool: Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop ...