安卓逆向系列篇:基本概念&环境配置

简介: 安卓逆向系列篇:基本概念&环境配置

一、Android概念介绍

1、apk基本结构

找个apk文件,使用压缩包软件将它打开,可以发现其具有如下文件

4962370c345aabf058fe6691a504c1d7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  • assets文件用于存放需要打包到Android应用程序的静态资源文件,例如图片资源文件、JSON配置文件、渠道配置文件、二进制数据文件、HTML5离线资源文件等。与res/raw目录不同的是, assets目录支持任意深度的子目录,同时该目录下面的文件不会生成资源ID。
  • lib文件夹中存放的是当前apk需要的so文件,so文件是利用底层的C/C++代码实现的
  • META-INF文件是所用到的证书签名文件,包含几个文件MANIFEST.MF (摘要文件) :程序遍历APK包中的所有文件,对非文件夹非签名文件的文件,逐个用SHA1生成摘要信息,再用Base64进行编码。如果APK包的文件被修改,在APK安装校验时,被修改的文件与MANIFEST.MF的校验信息不同,程序将无法正常安装。CERT.SF (对摘要文件的签名文件) :对于生成的MANIFEST.MF文件利用SHA1-RSA算法对开发者的私钥进行签名。在安装时只有公共密钥才能对其解密。解密之后将其与未加密的摘要信息进行比对,如果相符则文件没有被修改。INDEX.LIST:APK索引文件目录CERTRSA:保存公钥、加密算法等信息
  • res文件夹目录存放应用的资源文件,包括图片资源、字符串资源、颜色资源、尺寸资源等,这个目录下面的资源都会出现在资源清单文件R.java的索引中
  • AndroidManifest.xml是Android项目的系统清单文件,Android应用的四大组件Activity、Service、BroadcastReceiver和ContentProvider均在此配置和声明
  • classes.dex应用程序的可执行文件,Android的所有代码都集中在此。可以通过反编译工具dex2jar转化成jar包,再通过jdax-gui查看其代码。如果一个apk中方法数超过65535,会进行了分包处理,即有多个dex文件。如果未超过则只有一个dex文件。
  • resources.arsc是资源索引表,用来描述具有ID值的资源的配置信息。

2、各种虚拟机|混淆点

JVM

JVM指的是是Java虚拟机,运行的是.java文件编译后的.class文件。

DVM

DVM指的是Dalvik虚拟机,运行的是.dex文件。Dalvik虚拟机在Android4.4及以前使用的都是Dalivk虚拟机。APK在打包过程中先通过javac编译出.class文件,再使用dx工具处理成.dex文件,此时Dalvik虚拟机才可以解析执行。另外单个dex文件的最大为65535KB,超出需要使用两个及以上的dex文件,这导致在启动时会有个合包的过程,使得apk启动慢。

ART

ART指的是ART虚拟机,运行的也是.dex文件。ART虚拟机是在Android5.0才引入的Android虚拟机。在安装APK的时候就将dex直接处理成可直接供ART虚拟机使用的机器码,ART虚拟机将.dex文件转换成可直接运行的.oat文件,ART虚拟机天生支持多dex,不会有一个合包的过程,所以ART虚拟机会很大的提升APP冷启动速度。缺点是APK占用空间大和安装速度慢,因为需要生成可运行.oat文件。

3、apk打包流程

从官网的流程图中看出整个打包流程共分为七个步骤:

fa32a8eea934b3d1ac1400dc71e64ea4_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

  1. 打包资源文件,生成R.java文件
  2. 处理aidl文件,生成相应的.Java文件
  3. 编译项目源代码,生成class文件
  4. 转换所有的class文件,生成classes.dex文件
  5. 打包生成APK文件
  6. 对APK文件进行签名
  7. 对签名后的APK文件进行对齐处理

详细见此文

Android中apk打包流程 https://zhuanlan.zhihu.com/p/348198783


二、Android工具安装及环境配置

1、JDK及JRE安装

可以去官网下载,选择jdk8u111版本进行安装

JDK:Java Development Kit是Java的开发工具包,JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具。

JRE:Java Runtime Environment是Java运行时环境,包含了java虚拟机,java基础类库

安装过程:

1)双击启动安装程序

bb9d0cb28e92b6f4120aab9a2c08faac_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2)默认安装路径

b7febbb695d023c72e5d43ba7186432b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

3)jre路径选择

9d0859fb9d41b111a602dbce38d1a843_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

4)配置环境变量

JAVA_HOME
C:\Program Files\Java\jdk1.8.0_111

290a5f3df1e370c1903aa0dba3b9f77a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

%JAVA_HOME%\bin

1cebd6afa14a6c4a928a7c8b16b36829_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

C:\Program Files\Java\jre1.8.0_111\bin

8787dcfc7dfab2ac4df7be26e29483fa_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2、SDK安装

SDK(Software development kit)是软件开发工具,提供了Android调试工具等,如adb

下载地址:https://www.androiddevtools.cn

adb工具:命令行模式调试apk,定位追踪,删除apk中的广告部分

1)下载好后,解压至c盘目录下

30038210a69f0a0536c13a6ee78ad11b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2)配置环境变量

C:\sdk\tools
C:\sdk\platform-tools

330223f8f31fffb8295d11c695ec5b3c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

3、Android NDK安装

Android NDK(Native Development Kit)原生开发工具,用于编译生成so文件、可执行文件。(适用于ARM架构)

下载地址:https://developer.android.com/ndk/downloads

参考:

NDK 使用入门 https://developer.android.com/ndk/guides?hl=zh-cn


1)下载解压至C盘

6d5e8c18a309eb8a23b6f5b8231375c2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2)配置环境变量

C:\android-ndk-r10e

b7ad3207b0d7cb83fadae53ea51c9d37_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

3)构建build

ac783b33cd4f3521dd6d50b49d79b8a9_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

4、Android Killer安装

Android Killer是一款安卓逆向工具,集Apk反编译、Apk打包、Apk签名、编码互转、ADB通信等特色功能于一身,支持logcat日志输出,语法高亮,基于关键字项目内搜索,可自定义外部工具,简化了用户在安卓应用中的各种琐碎工作。

下载地址:https://www.androiddevtools.cn

Android Killer下载安装

1)下载后,解压至C盘

31a04b6e63e25a1349f09e04285ccd1d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

免安装直接使用。

2)简单配置

如果打开报错,就修改下jdk路径

835c9d484ec38d25caef9f9a240c0ed0_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

加载APKtool工具

默认情况下会自带一个apktool工具,这里加载额外的apktool

df646bcce7f61ee3ff63620f185219ce_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

Android Killer简单使用

对apk进行反编译

c23f3d5d13caebd0cbe0da9376b72505_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

三、上手Android Killer反编译apk

刚开始入门,这部分使用Android Killer工具进行两个简单的操作,修改apk程序名和图标,稍微练下手,为后续操作打好基础。

1、修改apk程序名称

1)将apk文件导入进Android Killer中

反编译好后,在工程搜索中搜索@string/app_name,将其修改为摸鱼小游戏

2)点击左上角的编译选项

将修改后的apk文件进行回编译

39c3a6de217fbfce616f7a28c6ec80e5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

3)安装已修改的apk

成功将原来的文件名修改为摸鱼小游戏

2a34843c369cbc6b80e34ff215e276a7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

2、修改apk程序图标

1)导入apk进Android Killer反编译

直接拉进去,等待一会即可

2)搜索icon.png图标位置

在工程搜索中输入/icon/png进行搜索

ed0578c89c7bcb57c230352891a20cb4_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

这里切记需要是png格式的图片文件,而不是只是将后缀名改下,可以通过在线网站进行转换

3)修改好后进行回编译

点击左上角的编译选项

f2e014f24c128e87fc96cf1db1ff53b5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

4)安装该程序

2e0ec808f4fb0e95511e1876013963d6_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

相关文章
|
2月前
|
搜索推荐 Java 数据库
打造个性化安卓启动器:从概念到实现##
【10月更文挑战第40天】 在数字时代,智能手机不仅是通讯工具,更是个性展示的窗口。本文将带你了解如何打造一个独一无二的安卓启动器,让你的手机界面与众不同,并提升你的开发技能。 ##
69 18
|
8月前
|
存储 Android开发 开发者
Android构建系统:Android.mk(1)基础概念赋值变量引用详解
Android构建系统:Android.mk(1)基础概念赋值变量引用详解
147 0
|
Java 开发工具 Android开发
安卓逆向系列篇:Dalvik概念&破解实例(二)
安卓逆向系列篇:Dalvik概念&破解实例
186 0
|
Java API Android开发
安卓逆向系列篇:Dalvik概念&破解实例(一)
安卓逆向系列篇:Dalvik概念&破解实例
191 0
|
Java Android开发
Android中Callable、Future、FutureTask的概念以及几种线程池的使用
在开始介绍线程池之前,先来介绍下`Callable`和`Future`的概念,众所周知,`Android`中实现多线程的方式有两种,实现`Runnable`接口或者继承一个`Thread`,但是这两种方式都有一个缺点:在任务执行完成之后没有返回结果,所以在`Java 1.5`之后,出现了`Callable`和`Future`,通过他们构建的线程,可以在线程执行完成之后得到返回结果。
276 0
|
存储 缓存 Java
Android OpenGL 显示基本图形及相关概念解读
Android OpenGL 显示基本图形及相关概念解读
Android OpenGL 显示基本图形及相关概念解读
|
编解码 算法 Android开发
Android音视频——相关概念
Android音视频——相关概念
210 0
Android音视频——相关概念
|
数据采集 传感器 编解码
【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )
【Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )
325 0
|
XML Java Android开发
【Android开发教程】一、基础概念
  Android操作系统   Android是一个基于Linux、使用java作为程序接口的操作系统。他提供了一些工具,比如编译器、调试器、还有他自己的仿真器(DVM — Dalvik Virtual Machine)。
1093 0
|
XML Java Android开发
“.NET研究”【Android开发教程】一、基础概念
  Android操作系统   Android是一个基于Linux、使用java作为程序接口的操作系统。他提供了一些工具,比如编译器、调试器、还有他自己的仿真器(DVM — Dalvik Virtual Machine)。
1372 0