大家一听到反编译、逆向工程就觉得好像离自己很远,都是些黑客才干的事儿,但实际情况并不是这样,做过手机游戏开发的小伙伴应该都知道,一个游戏包从开发测试到最终在游戏商店上架,中间会经过,代码混淆,增加渠道资源,包体加固等等,这些工作都需要使用反编译和再次打包的技术。
安卓反编译用到的主要工具就是ApkTool了,最常用的命令如:
反编译apk包

apktool d app.apk

打包成apk文件

apktool b app

但在实际使用过程中,有时可能反编译会失败,大多数原因是使用的apktool版本与生成apk的安卓版本不匹配,特别是使用最新的安卓SDK版本,这时候我们可以下载最新的apktool,如果还是解决不了问题,那就只能等apktool官方升级了。但是! 如果我们使用Java调用apktool,如果apktool还没有兼容最新版本的安卓SDK,那我们就可以自己来升级啦。
Java调用apktool反编译方法:

import brut.androlib.Androlib;
import brut.androlib.ApkDecoder;public void decompile() {ApkDecoder decoder = new ApkDecoder();decoder.setApkFile(apkFile);decoder.setForceDelete(true);decoder.setDecodeSources((short) 16);decoder.setOutDir(outputDir);decoder.decode();
}

读取AndroidManifest.xml清单文件:

import org.w3c.dom.Document;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;public static Document readAndroidManifest(){File manifestFile = new File(apkFile.getDecompiledDirectory(), "AndroidManifest.xml");DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();Document doc = dBuilder.parse(manifestFile);doc.getDocumentElement().normalize();return doc;
}

修改APK包名

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;public static void renamePackage(Document manifestDoc, String newPackage){Element element = getElementByTag(manifestDoc,newPackage);element.setAttribute("package",newPackage);
}public static Element getElementByTag(Document document, String tag) {NodeList elementList = document.getElementsByTagName(tag);if (elementList.getLength() != 1)return null;Node nNode = elementList.item(0);if (nNode.getNodeType() == Node.ELEMENT_NODE) {return (Element) nNode;}return null;
}

经过了一顿操作,往包里加入了我们自己的料,最终再次打包生成apk。
重新生成apk文件

import brut.androlib.Androlib;
import brut.androlib.ApkOptions;public void builder() {ApkOptions apkOptions = new ApkOptions();new Androlib(apkOptions).build(apkFile.getDecompiledDirectory(), outFile);
}

以上是反编译及二次打包常用方法介绍,获取更多资料及下载全部代码,请访问AnyPacker官网。

Java原生调用apktool反编译及再次打包源码相关推荐

  1. apktool反编译及后续打包

    资料 apktool下载地址 android studio 查看默认签名 apktool重打包失败原因之一分析: 微信使用apktool反编译后回编译出错 如何使用apktool解码,打包,签名 Ho ...

  2. 反编译apk文件查看源码,反编译apk获取资源

    之前做过反编译apk文件的,原本想的就是应该做下总结的,后来...不知道后来发生了什么,一定不是因为我懒了.总之,今天领导让我研究下一个口碑比较好的app,看下它某个功能怎么实现的,用的什么技术,又扒 ...

  3. 微信反编译(二)源码还原

    概览 我们知道,前端 Web 网页编程采用的是 HTML + CSS + JS 这样的组合,其中 HTML 是用来描页面的结构,CSS 用来描述页面的样子,JS 通常用来处理页面逻辑和用户的交互.类似 ...

  4. Android 的反编译 (附愤怒的小鸟源码下载)

    读源码是最好的学习方法,下面我们以愤怒的小鸟为例,看看如何把一个android游戏反编译成可读的源码. 工具介绍: 1.apktool   这个工具用来解压xml文件 到http://code.goo ...

  5. 如何反编译apk文件得到源码和XML文件

    相信很多开发者都知道反编译APK,正常情况下,如果我们想要看看xml,看看java源代码,是看不了的.用压缩工具解压apk得到的文件也都是二进制文件,打开后全是乱码. 开发者能够用的也仅仅是图片资源, ...

  6. mac平台反编译apk,获取源码,androidmanifest和资源文件

    "提供一个反编译apk的工具" 在window上反编译apk是比较容易的事情,但是在mac上就需要稍微费力一些,这里为了方便大家,特意提供了一个python脚本,实现快速反编译ap ...

  7. python加密反编译_对Python源码进行加密及反编译前后对比

    关于python的加密 目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行 保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程. ...

  8. 小程序代码反编译获取小程序源码nodejs

    第一步,360软件管理里面搜雷电模拟器4,然后按装 第二步,打开后按顺序下载,微信(用来打开小程序来获取小程序源码的wxapkg文件),QQ(从本地电脑发RE管理器到模拟器中进行安装),在模拟器中安装 ...

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

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

最新文章

  1. 有针对linux系统的补丁吗,Linux用户的注意了 有两个补丁需要你打一下
  2. android studio 使用adb
  3. java面试难吗_面试两个月,整理了今年的最新java面试题,你看行吗?
  4. 如何下载 Intel Integrated Performance Primitives –intel IPP
  5. windows系统自动化设置
  6. java 错误 代码_Java错误代码及异常处理
  7. iis 装完framework4 7 无法切换_扫盲贴之电压并列与电压切换
  8. 勒索病毒运营团伙的运作流程
  9. 已知两点坐标和三边长度,求三角形第三点的坐标
  10. 2021年12月22日 腾讯会议Ipad录屏无法录制声音问题解决
  11. 章节专题2021-整合管理
  12. linux驱动:二、LED灯驱动编写
  13. STM32F407 电机编码器测量
  14. 输入一个正整数,判断它是否是回文数。要求定义和调用函数:int isPalindrome(int n),如果n是回文数,该函数返回1,否则返回0。回文数是指正读和反读都相同的数。
  15. python访问陌生人qq空间_Python爬虫获取QQ空间信息(上)
  16. AEJoy —— 如何让你的 AE 插件 适应每通道 8,16,32 位颜色
  17. 人类有多少可能移民火星?
  18. wpf 非托管代码崩溃_崩溃! 地狱的网络托管公司
  19. 网页制作基础学习——HTML+CSS常用代码
  20. matlab maxfunevals,matlab优化工具箱概述

热门文章

  1. html5上传mov视频播放,Html5通过数据流方式播放视频的实现
  2. 影音/视APP搭建运营软硬件成本有哪些?
  3. golang分词工具sego的使用
  4. 网页调用php网页,在HTML网页中利用js调用php的内容_PHP教程
  5. 在Ubuntu18.04上搭建私有网盘 —— ownCloud
  6. 无法将 char 值转换为 money。该 char 值的语法有误。_Java类型之间的转换
  7. 【Python+Flask+Echarts】可视化练习题 ---- 招聘数据折线图
  8. 巴法云 使用 esp01s wifi模块 做一个网络智能开关
  9. OpenCV系列之光流 | 四十八
  10. MySQL挑战:建立10万连接