前言
不牵涉到过多的逆向,主要看看抓包可能遇到的问题,Android和java一样是个大坑,我这人喜欢实践的一些东西,不喜欢空谈理论和做一些没意思的练习,就和以前一样看看b站视频写写简单的总结,写到哪算哪,有个概念,反正个人感觉万事开头难,一直观望不如直接就开始学
安卓的基本概念
Android 是一个由 Google 主导开发的 基于 Linux 内核的开源操作系统,所以调用的底层是linux接口,同时Android系统的应用层是采用Java开发的
APK文件结构
apk修改为zip后缀名,进行解压就可以看到内部结构
初步分析分为这几类
源代码
对应classes.dex,DEX(Dalvik Executable)文件是一种专门为Android操作系统设计的可执行文件格式。它是将Java字节码(class文件)转换为Dalvik字节码的结果
资源文件
res目录 res目录存放资源文件,包括图片,字符串等等,APK的脸蛋由他的layout文件设计
resources.arsc文件 resources.arsc是编译后的二进制资源文件,它是一个映射表,映射着资源和id,通过R文件中的id就可以找到对应的资源
配置信息
AndroidMainfest.xml文件 APK的应用清单信息,它描述了应用的名字,版本,权限,引用的库文件等等信息
META-INF目录 保存应用的签名信息,在 Android 中,应用签名用于验证应用的身份和完整性。如果应用被篡改或者被恶意修改,则应用的签名将无法验证,使得应用无法被安装或者运行。
安卓四大组件
安卓和一般的桌面程序在应用场景上是相似的,所以我们大二的时候安卓和c#的wcf开发是划为一类的,可惜的是我们信安学的是wcf计科学的安卓,四大组件其实就是在对Android开放时的开发需要考虑的方面的划分
Activity(活动) 应用的一个单一界面,负责与用户进行交互,和web的前端不同,应用程序是不跨设备的所以Activity可以执行系统操作
Service(服务) 在后台运行的组件,主管后台逻辑,Service的生命周期与Activity无关。即使关闭所有Activity,Service仍然可以继续在后台运行
Broadcast Receiver(广播接收器) 用于接收并响应系统或应用发出的广播消息,实现应用程序之间,程序和系统之间的通信
Content Provider(内容提供者) 存储并检索数据以及向其他应用程序提供访问数据的接口。可以访问文件系统、SQLite 数据库、网络等数据源
ADB的使用
adb(Android Debug Bridge)是一种用于在 Android 设备和计算机之间通信的命令行工具,开发人员可以在连接到设备时运行各种命令来执行各种任务。adb 是 Android SDK(Software Development Kit)的一部分。
adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。
和手机连接前需要手机打开开发者模式
1 | adb connect 127.0.0.1:7555 #mumu模拟器开放端口,真机就是数据线连接 |
package manager(包管理器)
包管理器是一个系统级服务,它负责管理应用程序的安装、卸载、更新、清除和查询等操作。
1 | adb shell pm list packages #列出安装在连接设备上的所有软件包 |
frida-hook
Frida 是一款开源的动态插桩工具,可以插入一些代码到原生App的内存空间去动态地监视和修改其行为,可以实现Java层和Native层Hook操作。
1 | frida-ps -U -a #查看当前手机运行的进程 |
hook函数编写
1 | //方法重载 |
objection
Objection是基于Frida API开发的一个工具,Objection将Frida的API封装成易于使用的命令行接口,从而降低了使用门槛,提高了效率
这个工具需要已经开启frida服务端
1 | #建立连接,Objection 会重启应用并且注入Frida Agent到目标应用程序 |