【总结】Apk反编译全解

2023-10-28

实践总结,解决问题,乐在分享古月大仙荣誉出品欢迎关注、加粉、点赞、评论、交流

1  内容摘要

Apk保险措施混淆、加固、NDK、敏感操作的字符串替代、检查签名、……

高手成长路径

脱壳→反编译(jadx:dexjarapktool:xml)→修改(AS)→重打包(apktool)→重新签(apktool/autosign

代码的反编译工具jadx=dex2jar+ jd-gui)(src

dex2jar jd-gui:dex2jar将Android APK内的dex转化为jar文件,然后使用jd-gui可以查看,保存为java文件。

jadx:jadx是一个非常好用的反编译工具,可以原作者已经没有维护了。但也不妨成为一个经典工具。

资源的反编译工具apktool res

apktool :使用apktool将布局图片等资源可以提取出来。


2  软件下载

(为免除逐个下载的烦恼,本文所有软件已打包,请移步本人文件分享页面:工具合集)   

 jadx查看源码及目录结构。

下载地址:下载1 (源文件 );下载2推荐);下载3(zip文件)。

 apktool:用来反编译apk,apk重新打包

下载地址:下载1  (apktool.jar)(推荐);下载2 (apktool.bat和apktool.jar);下载3下载4

dex2jar:源码文件获取。

下载地址:下载1下载2

 jd-gui :源码查看。

下载地址:下载1 (推荐);下载2

 autosign:自动签名工具,将重新打包的apk进行签名,如果不签名,无法安装使用。

下载地址:暂无。

enjarify:google反编译工具,比dex2jar更强大成功率更高,只不过是python项目。

下载地址:下载1


3 高手成长路径

  ① 反编译代码jadx:dexjar)(jadx在线的反编译网站:http://www.javadecompilers.com/apk

     如图所示, jadx解压后得到5个文件,操作步骤如下:

xxx.apkxxx.zip解压缩得classes.dex拷贝到bin目录选择执行指令bin目录生成out文件夹完成反编译

cmd指令(在该目录下,按住Shift,然后右键选择“在此处打开命令窗口”,根据需要输入命令)

jadx -d out classes.dex // 直接反编译输出.java文件到out目录(out文件加下只生成sources一个文件夹)
jadx-gui classes.dex     // 直接使用gui打开查看源码,此操作等同于“双击运行bin / jadx-gui.bat→加载classes.dex”
jadx-gui xxx.apk           // 直接反编译输出.java文件到out目录(out文件加下生成resourcessources两个文件夹)
jadx -d out xxx.apk       // 直接使用gui打开查看源码,此操作等同于“双击运行bin / jadx-gui.bat→加载xxx.apk”

重要提示:

利用Github开源项目jadx可以直接对 .dex, .apk, .jar, .class 类型的文件进行直接反编译。这只是用于查看源码,并起不到修改作用,不过可以查看要修改的东西在哪个位置,真正修改要通过apktool反编译apk的源码才可以修改。jadx-gui图形化界面:点击文件-另存为Gradle项目,就可以在Android Studio中打开了,这样使用顺手的IDE可以更方便查看。


② 反编译资源apktool:xml)→只需要res目录AndroidManifest.xml文件

将apktool_x.x.x.jar、apktool.bat、xxx.apk文件同放apktool文件夹选择执行指令生成xxx文件夹得所有xml资源文件

apktool.bat脚本文件代码:

@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9

cmd指令:

apktool.bat d xxx.apk

apktool.bat d -f xxx.apk -o xxx   // apktool d -f “apk路径” -o “文件保存路径” 

参数说明:

  • -f 如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,则解码失败)。
  • -o 指定解码目标文件夹的名称(默认使用APK文件的名字来命名目标文件夹)。
  • -s 不反编译dex文件,也就是说classes.dex文件会被保留(默认会将dex文件解码成smali文件)。
  • -r 不反编译资源文件,也就是说resources.arsc文件会被保留(默认会将resources.arsc解码成具体的资源文件)

重要提示:在这个文件夹下面便是反编译出来的资源文件,我们只需要res目录和AndroidManifest.xml文件。然后进行xxx\res目录去修改ic_launcher,这里所有的ic_launcher都要做替换。另外,反编译的apk会缺少部分资源文件(res–>value下的文件),只需要拷贝缺少资源重新回编译即可

常见报错:解决jdk安装后出现 Error: could not open `E:\jdk\lib\amd64\jvm.cfg'


③ 修改图标和logo

④ 重新打包

apktool文件夹执行命令在xxx目录下面生成一个dist目录得重打包后的apk

cmd指令:

apktool.bat b xxx     // xxx为apk名字

重要提示:但是这个apk没有签名,需要重新签名之后,才能安装。

⑤ 生成keystore文件

apktool文件夹执行命令生成一个abc.keystore证书文件

cmd指令:

keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore

⑥ 签名apktoolautosign

     apktool方法dist/xxx.apk→拷贝到apktool目录→执行命令→得到xxx_signed.apk

jarsigner -verbose -keystore abc.keystore -signedjar xxx_signed.apk xxx.apk abc.keystore

     autosign方法dist/xxx.apk→拷贝到解压好的auto-sign文件夹→执行命令→xxx_signed.apk

java -jar signapk.jar testkey.x509.pem testkey.pk8 xxx.apk xxx_signed.apk

4 参考文章

[1] jadx反编译—下载和使用

[2] jadx-gui反编译apk

[3] Android逆向工具 - jadx

[4] 史上最全:Apk反编译之jadx,jd-gui,dex2jar,apktool,dex和smali的使用总结很细致

[5] 反编译Android应用,修改代码并重新打包,破解收费APP以破解实际App为例

[6] Android 反编译Apk,修改资源,重新打包,签名发布总结很全面

[7] Apktool重打包Apk详细介绍介绍Apktool重打包

[8] Android反编译流程和apk反编译重新打包签名值得重复看

[9] 用jadx和apktool反编译apk介绍jadx和apktool

[10] 利用开源项目jadx反编译Android应用介绍jadx

[11] 一步一步带你反编译apk,并教你修改smali和重新打包

[12] 安卓反编译入门(二)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【总结】Apk反编译全解 的相关文章

随机推荐

  • 没有工业软件 谈什么智能制造转型

    没有工业软件 谈什么智能制造转型 时间 2017 02 04 1 赞 0 评论 关键字 工业软件 智能制造 PI推出全新LinkSwitch TN2开关电源IC LinkSwitch LP ADC原理及应用 AWR1243查看技术文档 Li
  • 程序员成长的四个简单技巧,你 get 了吗?

    最近拜读了 阿里工程师的自我修养 手册 12 位技术专家分享生涯感悟来帮助我们这些菜鸡更好的成长 度过中年危机 我收获颇多 其中有不少的方法技巧和我正在使用的 这让我觉得我做的这些事情是对的 我走在了一条正确的道路上 我们程序员这个行业不像
  • vue+element表格的左右布局及动态添加行

    一般我们实现表格 直接使用element中的table组件 现在有个原型图是 类似表头左边 本来在纠结要写元生的表格了 最后突然想到把它当成form表单 直接样式实现表格效果 效果如图 我这里还有一个动态的添加行 我只做了这一个的动态添加的
  • [ MySQL] — 事务管理

    什么是事务 事务就是一组DML语句组成 这些语句在逻辑上存在相关性 这一组DML语句要么全部成功 要么全部失败 是一个整体 MySQL提供一种机制 保证我们达到这样的效果 事务还规定不同的客户端看到的数据是不相同的 事务就是要做的或所做的事
  • springcloud3 分布式事务解决方案seata之TCC模式6

    一 TCC模式 1 1 TCC的逻辑 TCC模式与AT模式非常相似 每阶段都是独立事务 不同的是TCC需要人工干预编写代码 需要实现三个方法 Try 资源的检测和预留 Confirm 完成资源操作业务 要求 Try 成功 Confirm 一
  • springboot多环境配置

    1 新建一个springboot项目 2 新建多个环境的配置文件 在springboot中多环境配置文件名需要满足 application profile yml的格式 其中 profile 是对应的环境标识 比如 开发环境 applica
  • ES6详解七:循环的秘密 - iterator 和 yield

    如果学过设计模式或者java之类的肯定知道 iterator 是什么 在 Symbol iterator 出现后 JS中也可以自己定义一个迭代器 只要一个对象实现了正确的 Symbol iterator 方法 那么它就可以被 for in
  • 【问题解决】javaWeb项目中报:java.io.FileNotFoundException: src\druid.properties (系统找不到指定的路径。)错误

    在登录界面填写账号密码提交后 报java io FileNotFoundException src druid properties 系统找不到指定的路径 错误 解决方法 把下面的相对路径改为绝对路径 改正后 可正常运行
  • MySQL中InnoDB的事务隔离

    文章目录 前言 一 事务介绍 二 事务的四大特性 三 事务的隔离性 四 事务隔离的实现 前言 我们在实际开发中 执行某个业务 肯定不是简单的操作某一句SQL语句 而是多条SQL语句 那么这多条SQL语句必须是全部成功执行 或者全部失败 才能
  • 刷脸支付服务商加入支付行业分一杯羹

    随着人工智能的成熟 更多智能化融入到日常生活中 支付行业在智能的浪潮下有了翻天复地的变化 由传统支付到新型支付 再到人工智能 由传统钱包到手机钱包 由手动数钱到指纹识别 每个迭代周期超乎我们的想象 就支付行业 中国已经处在全世界领先地位 让
  • springcloud(九):微服务的链路追踪 zipkin + 消息中间件收集数据 + 存储跟踪数据

    一 zipkin 1 概述 在大型系统的微服务化构建中 一个系统会被拆分成许多模块 这些模块负责不同的功能 组合成系 统 最终可以提供丰富的功能 在这种架构中 一次请求往往需要涉及到多个服务 互联网应用构建在 不同的软件模块集上 这些软件模
  • 数据清洗实例分析

    一 数据清洗工作 数据清洗 如填充缺失数据 消除噪声数据等 主要是通过分析 脏数据 的产生原因和存在形式 利用现有的数据挖掘手段和方法去清洗 脏数据 将 脏数据 转化为满足数据质量要求或应用要求的数据 从而提高数据集的质量 满足现阶段数据分
  • 【贪心+可并堆】 [BalticOI 2004]Sequence 数字序列

    题目 思路 首先考虑原题弱化版 相邻的b可以相等 于是我们可以得到两个性感感性的结论 如果a递增 则b a最优 如果a递减 b a的中位数最优 根据这两个结论 我们可以得到一个比较感性的做法 将原序列分成单调不升的m段 则每一段我们都取中位
  • 1122.数组的相对排序(分治+拼接)

    题意 本题目刚刚接触可能会有一点想不通 这是正常的现象对题目的解释如下 arr1的数组与arr2的数组中以arr2的数组进行排序 将arr1中的但是没有在arr2中不存在的元素 与arr2进行拼接 原题题干 代码 class Solutio
  • PostgreSQL数据库命令行执行SQL脚本的三种方式

    文章目录 前言 一 psql命令执行 二 i命令执行 三 e命令执行 总结 前言 生成环境中 出于安全性等原因 往往不提供数据库连接工具 所以对数据库的更新和升级就得通过命令行来实现 本文总结了三种命令行执行sql脚本的方式 一 psql命
  • 22.1 Numpy 去重

    Numpy 去重 np unique 参数1 a 数组 参数2 return index True False 新列表元素在旧列表中的位置 参数3 retun inverse True False 旧列表元素在新列表中的位置 参数4 ret
  • Vue3 实现Event-Bus事件总线 (mitt插件)

    文章目录 一 参考 二 问题描述 三 开发案例 typescript 解析 instance proxy Bus出错 一 参考 vue3 eventBus npm mitt 二 问题描述 Vue3 没有像Vue2那样创建一个Vue实例作为事
  • centos 7 开启80,443端口

    一 查看系统防火墙状态 如果返回 running 代表防火墙启动正常 1 firewall cmd state 二 开启端口外网访问 1 添加端口 返回 success 代表成功 permanent永久生效 没有此参数重启后失效 1 fir
  • QProcess中的调用外部exe结束之后的finished信号及常用信号

    1 可以参考相关的链接 https doc qt io Qt 5 qprocess html finished 2 注意使用的时候启动以下4个信号 使用的是start 否则启动就有问题 这边注意一下start 和startDetached
  • 【总结】Apk反编译全解

    实践总结 解决问题 乐在分享 古月大仙荣誉出品 欢迎关注 加粉 点赞 评论 交流 1 内容摘要 Apk保险措施 混淆 加固 NDK 敏感操作的字符串替代 检查签名 高手成长路径 脱壳 反编译 jadx dex jar和apktool xml