反编译 android apk 文件看看java源代码

简介: 1,关于apk想要做android开发,要做的一个事情就是学习别人的代码。 先研究下别人的代码,看看咋写的有啥漏洞。学开源的项目也行。 开源项目不如真实的项目有代表性。同时开能看看别人的服务器接口是咋设计的。 比如你弄到一个apk文件。 apk首先是一个压缩文件,只要解压缩就好了。2,解开xxx.apk假设在服务器上面直接解压缩就行了。un

1,关于apk


想要做android开发,要做的一个事情就是学习别人的代码。
先研究下别人的代码,看看咋写的有啥漏洞。学开源的项目也行。
开源项目不如真实的项目有代表性。同时开能看看别人的服务器接口是咋设计的。
比如你弄到一个apk文件。
apk首先是一个压缩文件,只要解压缩就好了。

2,解开xxx.apk


假设在服务器上面直接解压缩就行了。

unzip /data/app/xxx.apk -d /data/app/xxx

里面会有几个文件
AndroidManifest.xml classes.dex resources.arsc META-INF res
其中classes.dex 就是相当于jar的文件了

3,解开dex文件


需要用到一个工具,反编译dex 工具
gitlab项目:
https://github.com/pxb1988/dex2jar
https://sourceforge.net/projects/dex2jar/?source=typ_redirect
工具可以在windows 和 linux 上面使用,也是java写的。
比如在linux上面:

sh ./dex2jar-2.0/d2j-dex2jar.sh /data/app/classes.dex -o /data/app/classes-dex2jar.jar

然后就转换成jar文件了。

4,使用jad反编译


jad是命令行的:
http://varaneckas.com/jad/

unzip /data/app/classes-dex2jar.jar -d /data/app/classes

-o参数,设置输出文件目录和名称:

jad -r -ff -d src -s java classes/**/*.class 

然后src里面就是源代码了。

5,最简单的方法


使用jd-gui直接打开
http://jd.benow.ca/
要什么自行车啊,直接就可以打开这个jar文件。
下载执行文件,直接执行就行。

灰常简单。

4,写完才知道还有一步到位的工具


https://github.com/skylot/jadx
直接有人写好了的工具,一步到位,直接分析apk文件的。

省了不少事情。超级赞。

5,总结


android反编译起来还是非常容易的,尤其是java还有反编译工具。
看起来就更容易了,jd-gui还是非常的好用的。gui的界面使用起来也是很方便的。
但是如果app做了混淆了,并且,app做了加壳把重要的代码,算法都放到了so文件里面
这个使用需要使用其他办法解决了。
一般要是研究些小应用的app他们是啥也没有做的,学习起来还是非常方便的。

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/53025024 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

目录
相关文章
|
18天前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
31 2
|
2月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
108 1
|
3月前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
3月前
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
68 1
|
3月前
|
Java Android开发
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
解决Android编译报错:Unable to make field private final java.lang.String java.io.File.path accessible
410 1
|
3月前
|
Android开发
Cannot create android app from an archive...containing both DEX and Java-bytecode content
Cannot create android app from an archive...containing both DEX and Java-bytecode content
32 2
|
3月前
|
IDE Java Linux
探索安卓开发:从基础到进阶的旅程Java中的异常处理:从基础到高级
【8月更文挑战第30天】在这个数字时代,移动应用已经成为我们日常生活中不可或缺的一部分。安卓系统由于其开放性和灵活性,成为了开发者的首选平台之一。本文将带领读者踏上一段从零开始的安卓开发之旅,通过深入浅出的方式介绍安卓开发的基础知识、核心概念以及进阶技巧。我们将一起构建一个简单的安卓应用,并探讨如何优化代码以提高性能和应用的用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和启发。
|
4月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
139 4
|
4月前
|
SQL Java Unix
Android经典面试题之Java中获取时间戳的方式有哪些?有什么区别?
在Java中获取时间戳有多种方式,包括`System.currentTimeMillis()`(毫秒级,适用于日志和计时)、`System.nanoTime()`(纳秒级,高精度计时)、`Instant.now().toEpochMilli()`(毫秒级,ISO-8601标准)和`Instant.now().getEpochSecond()`(秒级)。`Timestamp.valueOf(LocalDateTime.now()).getTime()`适用于数据库操作。选择方法取决于精度、用途和时间起点的需求。
59 3
|
4月前
|
Java 编译器 开发者
Java演进问题之Truffle处理不同编程语言的源代码或中间格式如何解决
Java演进问题之Truffle处理不同编程语言的源代码或中间格式如何解决