Android逆向
菜鸡啥都学点,啥都不精。
工欲善其、事必先利其器
安卓APK逆向的工具
雷电模拟器运行APK
雷电模拟器,作为安卓模拟器的佼佼者,一直以来备受用户青睐。它不仅可以让你在PC上畅快运行安卓应用,还能提供与手机端接近的使用体验,让你在开发、调试乃至游戏娱乐中都能游刃有余。安装雷电模拟器其实并不复杂,但要确保顺利完成,还是有一些细节需要关注。
没用过,不清楚
https://www.ldmnq.com/
ADB的使用
ADB(Android Debug Bridge),简直是安卓开发者和逆向工程师的“瑞士军刀”。无论是调试、安装应用,还是进行日志分析,ADB都是不可或缺的工具。你可能会认为ADB只是一个命令行工具,然而它的强大远超你的想象。
没有用过,只使用GDB。
使用方法:ADB安装及使用详解(非常详细)从零基础入门到精通,看完这一篇就够了-CSDN博客
下载地址:ADB下载地址
这里笔者也就配置了一下环境变量,然后看了看版本啥的
具体的命令,没尝试过
JADX反编译APK
JADX是一款非常流行且功能强大的APK反编译工具,它能够将APK中的DEX文件(即Dalvik Executable文件)反编译成可读的Java源代码。JADX的优势不仅仅在于它的易用性,还在于它的反编译效果非常优秀,能够清晰地显示反编译后的Java代码,帮助开发者和安全人员深入理解应用的内部逻辑。
使用方法:APK反编译工具jadx - chuyaoxin - 博客园 (cnblogs.com)
下载地址:JADX下载地址
做过安卓题了解一点,看看加密逻辑,然解包啥的
GAD进行APK反汇编
GAD(Google Android Disassembler)是一个专注于APK底层字节码分析的工具。与JADX不同,GAD更多侧重于字节码级别的反汇编,它能够帮助安全研究人员和开发者深入到应用的最底层,查看其具体的机器码和执行逻辑。GAD特别适用于那些对字节码和汇编语言感兴趣的逆向工程师,它可以帮助我们获得应用中深层次的行为信息。
使用方法:[原创]GDA使用手册-Android安全-看雪-安全社区|安全招聘|kanxue.com
下载地址:GAD下载地址
没用过
JEB进行APK反汇编
JEB的魅力在于其高精度的反汇编能力。它不仅能解析传统的DEX文件,还能处理各类复杂的文件格式,包括加固过的APK、经过混淆处理的代码,甚至是一些非标准的Android文件结构。它像一把锐利的刀刃,切开了应用的“外壳”,揭示其最核心的部分。
使用方法:第36讲: 使用Jeb工具反编译安卓APK_jeb反编译工具-CSDN博客
下载地址:JEB下载地址
没用过,简单安装一下java环境,就完了
IDA进行反汇编
略
Frida脱壳工具的使用
Frida 是一个强大的动态分析工具,广泛应用于反向工程和安全测试中,尤其是在对 Android 应用进行脱壳(解除保护)时,它能够帮助研究人员通过动态注入脚本来分析应用程序的行为。以下是使用 Frida 进行脱壳的环境配置和基本步骤。
Frida相关工具的安卓
1
2
3
4 >pip install frida # 安装 Frida 主库
>#pip install frida-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
>pip install frida-tools # 安装 Frida 的工具集,提供命令行工具
>pip install frida-dexdump # 安装 frida-dexdump,用于分析 APK 文件的 dex 内容入门教程:[Frida入门教程] 一文搞定Frida环境搭建,基于逍遥模拟器(虚拟设备)和ADB(Android Debug Bridge)-CSDN博客
APK解析基础
简单讲一下APK。
APK文件是Android操作系统中的应用程序包,它包含了应用的所有资源、代码和必要的配置文件。可以把APK看成一个容器,其中集成了Android应用所有的组成部分。
APK的基本结构
APK文件是以ZIP格式进行压缩打包的,因此,我们可以像操作普通的ZIP文件应用,使用解压工具对其进行解压,通过解压查看APK文件的目录结构,我们能够清晰了解每个组成部分的作用。
我们简单拆一个包看一下其里边结构的目录文件。(题目:Palar靶场的Android)
- res
res/目录包含了Android应用所需的所有资源文件。与assets目录不同,res目录中的资源文件是经过编译的,按照不同类型的资源进行组织。
- META-INF
**META-INF/**目录与Java的JAR文件类似,用于存放APK文件的元数据,如签名文件、校验信息等。
- lib
lib/目录包含了本地库文件,通常是通过JNI(Java Native Interface)与C/C++编写的本地代码。这些库文件可以针对不同的硬件架构(如arm、x86等)进行编译,因此lib/
目录下通常会为每个架构创建相应的子目录。这个目录中存放的本地库可以通过Java代码调用JNI接口实现与系统底层的交互。
- resources.arsc
resources.arsc文件包含了应用程序的所有编译后的资源映射信息。这个文件并不存储实际的资源内容(如图片或字符串),而是存储资源与资源ID的映射关系。例如,它会保存应用中的字符串、颜色、尺寸、样式等信息以及这些资源的ID。通过这个文件,Android系统能够在应用运行时快速访问和加载所需的资源。
- classes.dex
classes.dex文件包含了应用程序的可执行代码。它是应用的Dalvik字节码文件,也是Android应用在运行时通过Dalvik虚拟机或ART解释执行的核心文件。每个Android应用中,所有的Java源代码都经过编译后形成一个或多个DEX文件,这些文件包含了应用的业务逻辑和代码实现。
在Android5.0之后,Google引入了ART代替传统的Dakvik虚拟机,ART的执行方式比Dalvik更高效,支持Ahead-of-time编译和即时编译策略。
拓展阅读一下,相关文档:
- assets
assets目录包含了应用程序的原始资源文件,这些资源不经过编译,直接以原始形式存储。通常,开发者可以在该目录中存放字体文件、音频文件、HTML文件等,应用在运行时通过API来读取这些资源。例如,游戏可能会将所有的地图文件或纹理图像存放在此目录中。通过AssetManager
API,应用可以访问这些文件。
- AndroidMainifest.xml(核心关键)
AndroidMainifest.xml是每个Android应用不可或缺的配置文件,他包含了应用的关键信息。我们可以把它看作是应用的“蓝图”或“说明书”,它向系统声明了应用的基本属性、组件以及权限等。
AndroidMainifest.xml包括以下重要的部分:
应用的包名:每个Android应用都有一个唯一的包名,通过包名来区分不同的应用。
应用的组件:声明应用包含哪些组件,以及这些组件的属性和功能。
权限声明:列出应用所需的权限,如访问网络、读取存储、使用相机等。
应用主题和图标:定义应用的UI样式和图标等。
最小SDK版本和目标SDK版本:确定能在什么版本的Android系统上运行。
1 |
|
解析一下关键字段:
- mainifest:包含整个应用的包信息及权限定义
- package:定义了应用的包名,通常为反向域名格式,如com.example.app。
- android:versionCode:定义应用的版本号
- android:versionName:定义应用版本名称
- application:包含应用的核心配置,如主题、图标等
- android:icon:定义应用的图标
- android:label:定义应用的名称
- android:theme:应用的UI主题
- activity:声明应用的各个界面,以及这些Activity的属性和行为
- android:name:Activity的类名
- android:label:Activity的标签
- android:theme:Activity特有的UI主题
- uses-permission:声明应用所需要的权限,如访问网络、发送短信等
- intent-filter:定义组件的功能和响应的事件,如Activity的启动方式或Broadcast Receiver接收的广播类型