安卓逆向
安卓逆向是对已经打包好的APP进行反编译、源码分析了解APP实现逻辑的一门技术。我们可以把安卓安装时用到的APK文件看作一个加密后的压缩包,逆向就是要最大程序地还原出APK打包之前的源码
安卓是基于java开发的,需要java环境,之后改为了Kotlin(基于JVM的编程语言)
Android Tools
反编译代码的工具:
dex2jar:把dex文件转成jar文件
jd-gui:将jar文件转换成java代码
反编译资源的工具:
APKTool:apk逆向工具
安卓逆向流程
首先把后缀为.apk的文件改为.zip的一个压缩文件,方便解压,dex2jar和jd-gui配套使用,用于逆向代码部分,APKTool用于逆向res文件夹下的图片布局部分。
.apk修改成.zip文件解压后的目录树长这样:
Android四大组件
Android四大组件(整理相关知识点)_android 四大组件-CSDN博客
1.Activity
面向用户的应用组件或者用户操作的可视化界面,基于Activity基类,底层由ActivityManager统一管理,也负责处理应用内或应用间发送的Intent消息
2、Service
通常用于处理后台耗时逻辑,用户不直接与Service对应的应用进程交互。与其他Android应用组件一样,Service也可以通过IPC机制接受和发送Intent
3、Broadcast Receiver
接受并过滤广播消息的组件,应用想显示的接收广播消息,须在Mainfest清单文件中注册一个receiver,用Inter filter过滤特定类型的广播消息,应用内也可以通过registerReceiver在运行时动态注册。
4、Content Provider
应用程序间数据共享的组件。如ContactsProvider(联系人提供者)对联系人信息统一管理,可以被其他应用(申请权限后)访问,应用还可以创建自己的Content Provider,并且把自身数据暴露给其他应用
Apk文件(详情见Reverse-apk)
通过apk文件可以判断是安卓逆向。apk就是英文AndroidPackage的缩写,也就是我们常说的Android系统安装包。apk类似于Symbian系统的Sis或Sisx文件格式。我们可以将APK文件直接传到Android模拟器或Android手机中执行即可安装。其实就是一个压缩文件,类似于zip格式,或者说就是zip格式。
用jadx打开apk文件,得到apk文件的java代码,通过对java代码进行逆向分析
APK文件结构
1、meta-inf目录
#mainfest.mf: 清单文件
#cert.rsa: 应用签名文件
#cert.sf: 资源列表及对应的SHA-1签名
2、lib目录
#armeabi:所有ARM处理器相关文件
#armeabi-v7a: ARMv7及以上处理器相关文件
#arm64-v8a:所有ARMv8处理器下的arm64相关文件
#x86:所有x86处理器相关文件
#x86_64:所有x86_64处理器相关文件
#mips:MIPS处理器相关文件
3、res
res文件是没有编译至resources.arsc中的其他资源文件
4、assets
assets文件是指能通过AssetManager访问到的资源文件
5、AndroidMainfest.xml
AndroidMainfest.xml是Android组件清单文件,包含应用名字、版本、权限等信息,以二进制XML文件格式存储在APK文件中,能通过apktool,AXMLPrinter2等工具转换成XML明文格式文件
6、classes.dex
classes.dex是Android运行时可执行文件
7、resources.arsc
resources.arsc包含编译好的部分资源文件
DEX文件格式
DEX是Android Dalvik可执行程序,其中包含该可执行程序的所有Java层代码。Dex经过压缩和优化,不仅能减小程序大小,还能加快类及方法的查找效率