安卓apk反编译教程

article/2025/10/24 9:35:29

从dex提取jar文件

手机直接提取

np或者mt管理器
点击2jar即可
如果遇到多个dex 即使合并也可能失效(因为单个dex有最大限制)

电脑提取

下载dex2jar github
注意是>2.0的 如2.1版本,2.0以及之前的版本 不支持多个dex文件

# 最好文件路径别带空格 或者中文
cd 到下载目录 windows使用 并将要反编译的文件放到同级目录下
# 若没有java或直接没反应  请安装或者重装java
d2j-dex2jar.bat XXX.apk  ##也可为xx.dex apk可默认多个dex to jar

若文件较大 请编辑 d2j_invoke.bat文件 修改其中的内存参数 一个为虚拟机最大空间 一个为最小占用

若文件较大 可能刚开始的时候没什么cpu占用 后期会升高很多== 可能是不止编译了dex·· 有的很慢 比如某个100mb的app 可能一个小时 请耐心等待

-Xmx1024m:设置JVM最大可用内存为1024M。-Xms512m:虚拟机占用系统的最小内存。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。-XX:MaxPermSize:最大堆大小。这个也适当大些, 所以若出现问题,首先请调整 –Xms512m:将其设置的小一些,就ok了。注意事项:配置时字符不要写错了,否则可能导致myeclipse环境不可以运行Java程序。
————————————————
版权声明:本文为CSDN博主「KateZeng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_35733852/article/details/114113306

在dex2jar更新v2.1之前笔者是用的一个比较”耿直”的方法解决这个问题,因为dex的method数量有限但是jar包对method是没有特别限制的,所以我写了一个脚本将apk中多个dex先转化为jar文件之后解压缩最后合并打包压缩,同样可以得到完全的反编译文件.

转换为java代码

工具介绍

JD-GUI

JDK7以及之前可以使用 JD-GUI,如果版本>=1.8 各种问题
http://java-decompiler.github.io

procyon-decompiler

如果版本>=1.8 ,可以使用 procyon-decompiler,不过是命令行界面
https://bitbucket.org/mstrobel/procyon/downloads/

在代码支撑方面,JDK 1.7引入了字符串Switch、泛型接口改进等新功能,1.8增加了lambda表达式、方法传递、多重注解等新特性,这使得反编译工具的编写难度加大,Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错:
字符串的Switch
枚举声明方面
注解方面
匿名类、内部类
Java8新接口规范
Java8 Lambda表达式
Java8 方法传递
另外它在反编译后输出多种类型的结果,如Java源码、原始字节码、字节码AST

可以直接解析class文件到cmd窗口显示
也可以将反编译之后的文件保存到指定位置,如果需要保存在指定位置,需要增加 -o命令参数,并且需要指定保存的路径java -jar procyon-decompiler的绝对路径 -jar 想反编译文件的绝对路径 -o 输出文件夹的绝对路径直接显示:
java -jar D:\ApplicationFiles\program\procyon-decompiler-0.5.30.jar D:\ProgramData\ideaProjects\...\news\NewsController.class保存文件:
java -jar D:\ApplicationFiles\program\procyon-decompiler-0.5.30.jar D:\ProgramData\ideaProjects\...\news\NewsController.class -o C:\Users\noteless\Desktop\dddddd

luyten

luyten是Procyon的GUI,只需要下载luyten即可,不用下载Procyon
https://github.com/deathmarine/Luyten

下载地址
https://github.com/deathmarine/Luyten/releases

crf

crf也可以支持更高版本
http://www.benf.org/other/cfr/

jeb

一般情况下我们都是使用dex2jar + jd-gui的方式反编译代码,在实际使用过程中,有时候发现反编译出来的代码阅读效果不是很好,所以就尝试使用其他的方式反编译代码。

JEB是Android应用静态分析的de facto standard,除去准确的反编译结果、高容错性之外,JEB提供的API也方便了我们编写插件对源文件进行处理,实施反混淆甚至一些更高级的应用分析来方便后续的人工分析.(摘自乌云)。

jeb凭借其牛X的保护措施和高昂的售价,使得诸多普通逆向爱好者望而却步,当然ida也是,目前网络上仅流传着jeb 1.5和ida 6.6的破解版,虽是旧版,面对很多情况依然是绰绰有余。

小结

如果你的版本<=7,都可以使用,如果版本更高,请使用除了JD-GUI以外的选择
而且若有内部匿名类 请使用除了JD的工具

反编译遇到的奇怪代码

需要先看java面向对象 匿名内部类那里的几种情况
其次
在这里插入图片描述

others

在5.0之前所使用的Dalvik运行时默认的一个apk中只能包含一个dex文件。为了解决这个限制,我们可以使用multidex
support库,它会成为主dex的一部分,用来取得其它辅助dex文件中的方法。

com.android.support:multidex:1.0.0

在5.0之后,Android改用ART作为运行时,ART天生支持一个APK中包含多个dex文件。因为它在APK安装时,会预先扫描所有的classes(…N).dex文件,把它们编译合成一个.oat的可执行文件。

推荐阅读

吾爱破解安卓逆向入门教程系列(但比较老了 15年)

【性能优化】也谈APK瘦身


http://chatgpt.dhexx.cn/article/jOoKaM48.shtml

相关文章

Android APK反编译教程

目录 一、反编译工具二、注意事项三、apktool1.1 官方链接1.2 下载安装1.3 使用 四、dex2jar1.1 官方链接1.2 下载安装1.3 使用 五、jd-gui1.1 官方链接1.2 下载安装1.3 使用 一、反编译工具 1、apktool&#xff1a;获取资源文件&#xff0c;提取图片文件&#xff0c;布局文件…

c语言so文件反编译,apk so文件反编译教程

apk so文件反编译教程 [2021-02-16 11:29:44] 简介: php去除nbsp的方法&#xff1a;首先创建一个PHP代码示例文件&#xff1b;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#xff…

双端原生小龟影视反编译教程

介绍&#xff1a; 双端原生小龟反编译教程 网盘下载地址&#xff1a; http://kekewl.org/ASpd7fRv9BM0 图片&#xff1a;

android逆向工程反编译指南(详细教程)

要反编译一定要用到工具。 apktool是谷歌官方推出的反编译软件&#xff0c;只能说还能用。而且至今没有好用的IDE。android反编译就是通过apktool这个工具来实现的。其他的GUI环境&#xff0c;例如AndroidKiller都是给apktool套了一个壳而已。不过不得不提的是AndroidKiller这个…

(史上最全)C语言快速入门宝典(一)

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言       今天给大家分享C语言中…

C语言入门(一):初识C程序

C语言入门&#xff08;一&#xff09;&#xff1a;初识C程序 网址&#xff1a;C语言入门 1-2 C程序结构 简单来说&#xff0c;一个C程序就是由若干头文件和函数组成。 #include <stdio.h> // 包含头文件&#xff0c;预处理 int main() // 在最新的C…

C语言入门这一篇就够了!!!-万字长文(前半部分)

C语言-万字长文总结 前言一、C语言-简介二、C语言-程序结构2.1 程序结构2.2 无头文件-错误解析 三、C语言-基本语法3.1 关键字3.2 标识符3.3 注释 四、C语言-数据类型4.1 整数类型4.2 浮点类型4.3 void 类型 五、C语言-变量5.1 变量类型5.2 变量的定义、声明5.3 Lvalues和Rvalu…

C语言入门教程合集

目录 第一章 初识C语言 1.C语言基础知识 2.C语言的构成 3.第一个C语言程序 4.数据类型 5.C的标识符 5.1标识符的命名规则 5.2标识符的分类 6.变量 6.1定义变量的方法 6.2变量的分类 6.3变量的使用 6.4变量的作用域和生命周期 7.常量 7.1符号常量 7.2字符串常量…

简单c语言入门

[TOC](目录 ## 前言 内容 ​​# 1.第一个C程序 # 2.标识符 # 3.变量 # 4.数据类型 ### 1.1整型 ### 1.2浮点型 ### 1.3字符型 # 5.运算符 # 6.符号常量 # 7.标准化输入输出 # 8.语句结构 ## 1.1顺序结构 ## 1.2择结构 ## 1.3循环结构 ## 9.break和continue语句…

零基础学C语言(C语言入门)

C语言入门&#xff08;初识C语言&#xff09; 初识C语言 前言什么是C语言为什么要选择C语言作为学习的第一门语言一.第一个C语言程序1.1 #include1.2 int main()1.3 printf1.4 return 01.5小结 二.C语言的数据类型三.C语言的常量与变量3.1常量3.2变量 总结 前言 什么是C语言 …

C语言入门教程,C语言自学教程(2022年)

一、C语言入门教程&#xff0c;C语言自学教程 经过多年的时间洗礼&#xff0c;C语言俨然已成为“第一”语言&#xff0c;出色的性能使之成为高级语言中的性能王者。这么牛的语言&#xff0c;你是不是想知道怎样学习和掌握它呢&#xff1f;接下来请看经过小编整理过的C语言入门…

C语言从入门到精通

文章目录 C语言1.helloworld1.1 pause1.2 cls清屏1.3 加法运算1.4 hello 2 常量变量和数据类型2.1 常量2.2 变量2.3 sizeof数据类型大小2.4 无符号整型2.5 字符类型2.5.1 字符类型简介2.5.2 字符类型运算 2.6 实数型2.7 进制和转换2.8 数据溢出 3. 运算符和分支循环语句3.1 字符…

单片机及C语言入门

一、什么是单片机&#xff1f; 将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备&#xff08;小键盘、LED显示器&#xff09;等装配在一块印刷电路板上&#xff0c;再配上监控程序&#xff08;固化在ROM中&#xff09;&#xff0c;就构成了一台单片微型计算机&#xff08;简…

【零基础】入门C语言这一篇就够了

初识C语言 1. 什么是C语言&#xff1f;2. 第一个C语言程序2.1 如何写代码2.2 运行代码 3. 数据类型3.1 为什么出现这么多类型&#xff1f;3.2 如何使用数据类型3.3 数据类型的大小 4. 变量、常量4.1 定义变量的方法4.2 变量的命名4.3 全局变量和局部变量4.4 变量的使用4.4.1 sc…

C语言入门学习(入门级C语言)

一、初识C语言 【定义】C语言&#xff1a;一种通用的计算机语言&#xff08;人和计算机交互的语言&#xff09;&#xff0c;广泛用于底层软件开发。 C语言是一门面向过程的编程语言。 【如何写语言代码】 第一步&#xff1a;写出主函数&#xff08;main函数&#xff09; C…

C语言入门教程(一)

C语言入门教程&#xff08;一&#xff09;&#xff1a;输入输出函数、程序中的数据 本文为初学 C语言的学习日志篇一。 实验环境 Ubuntu 16.04 终端gccgedit 代码如下&#xff1a; #include<stdio.h> int main() {int a,b,c;printf(" Please enter a value: &q…

c语言零基础入门(完整版)

1软件下载 官网下载: https://sourceforge.net/projects/orwelldevcpp/ 百度网盘&#xff1a;https://pan.baidu.com/s/1mhHDjO8 提取密码&#xff1a;mken 推荐用百度网盘&#xff0c;官方下载太慢了 开始安装 首先双击打开刚刚下载的软件 点击0k 因为在安装过程中不能使用…

【C语言】 基础知识入门

目录 一&#xff1a;C语言结构 二&#xff1a;C标准库 三&#xff1a;C程序执行过程 编写过程 四&#xff1a;数据类型 五&#xff1a;变量在内存中的存储 六&#xff1a;C基本数据类型 一&#xff1a;C语言结构 1.1 C语言允许分割代码和数据 可以使用具有局部&#xff0…

《零基础看得懂的C语言入门教程 》——(一)脱离学习误区

本节视频连接&#xff1a; https://www.bilibili.com/video/BV1Qv411t7ae 新手C语言学习有些误区你应该知道&#xff0c;这样学习起来事半功倍~ 一、前言 距离上一次编写C语言的教程是5年前了&#xff08;2015年&#xff09;&#xff0c;由于自己是从初一时开始学习编程&…

c语言入门这一篇就够了-学习笔记(一万字)

内容来自慕课网&#xff0c;个人学习笔记。加上了mtianyan标签标记知识点。 C语言入门 -> Linux C语言编程基本原理与实践 -> Linux C语言指针与内存 -> Linux C语言结构体 https://www.imooc.com/course/programdetail/pid/37 c语言入门 C语言一经出现就以其功能丰…