电子数据取证之Android APK分析
都是比较基础的知识,目的是做学习记录,有不足之处欢迎指正。
一、Android APK概念
APK (Android application package)指 Android 应用程序包,是 Android 系统中的一种文件格式,用来对安卓应用程序的文件进行打包。APK 文件包含了应用程序的所有文件,包括:静态资源文件(assets)、库文件(lib)、签名文件(META-INF)、编译资源文件(res)、配置清单文件(AndroidManifest.xml)、核心代码文件(classes.dex)、资源映射文件(resources.arsc)等。
assets:静态资源资源文件(图片,视频等),这个文件夹下不会被编译。
lib:.so库,系统库,自己打包的库。有的把加密/token生成方式放在.so文件里
META-INF:签名信息。
res:资源文件(静态文本,图片,关键资源) 汉化,会被编译。 比如汉化
AndroidManifest.xml:配置信息(关键),举例修改权限
classes.dex:android dalvik虚拟机可执行文件
resources.arsc:资源索引/对应文件
二、配置清单文件介绍
AndroidManifest.xml文件是配置清单文件,也是编译过的文件,用来描述应用程序的清单信息。包括包名、应用名、权限、安卓四大组件、版本等重要信息都在这里面声名。
当打包应用程序时,AndroidManifest.xml 文件会自动生成,并且会被打包进 APK 文件中。当你安装应用程序时,Android 系统会读取这个文件,以确定应用程序的基本信息和权限要求。
开发者可以在 AndroidManifest.xml 文件中声明应用程序使用的权限,例如访问网络、访问文件、访问相机等。在应用程序安装时,用户会看到这些权限的描述信息,然后决定是否允许应用程序使用这些权限。
AndroidManifest.xml 文件还用来声明应用程序的主要组件,例如活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)等。这些组件是安卓应用程序的四大组件的组成部分,它们负责实现应用程序的功能。
三. 静态资源文件
静态资源文件主要指存放在assets 文件夹中的文件。assets 文件夹是一种未经编译的资源目录,它会被打包进 APK 文件中,在安装应用程序之后可以被访问。assets 文件夹中的文件不会被解压缩,这意味着它们的访问速度会比较快,但是会占用更多的安装包空间。通常情况下,开发者会将应用程序中的静态文件、配置文件、原始数据或者其他不常改变的文件放在 assets 文件夹中。这样可以使得应用程序的下载包大小变小,并且可以更快速地访问这些文件。在静态资源assets文件夹中,可能存放一些图片包括(jpg、png、gif等),还有可能存放js文件。
四.库文件
库文件主要指lib文件夹中的文件,在这个文件夹中,存放了运行APP所需要的so文件,也就是动态链接库的二进制文件。为了适配不同安卓系统处理器的版本,lib文件夹中的so库也是按不同处理器版本的文件夹分类放置。在图3的示例中,分成了三种文件夹包括armeabi、armeabi-v7a和x86文件夹,分别用来存储适配arm5架构、arm7架构、Intel32架构的CPU处理器版本的安卓系统。例如,如果智能手机使用的是arm7架构CPU处理器版本的安卓系统,APP在运行时就会调用armeabi-v7a文件夹下的动态链接库文件执行程序。
在安卓系统中库文件分文两种,一种是共享库文件(Shared Libraries),另一种是本地库文件(Native Libraries)。共享库文件是可供多个应用程序使用的库,它们被存放在系统目录中。在 Android 系统中,共享库文件以 .so 为后缀,常见的共享库文件包括 libc.so 和 libm.so。
而lib文件夹存放的就是本地库文件。本地库是专门为应用程序所使用的库,它们被打包进 APK 文件中,在安装应用程序之后会被放到私有目录中。在 Android 系统中,本地库文件也以 .so 为后缀,armeabi-v7a的so文件示例见图4。对于一个 Android 应用程序来说,本地库文件往往是应用程序所特有的,并且不会被其他应用程序使用。例如,一个应用程序可能使用本地库文件来封装特定的硬件访问功能,或者使用本地库文件来进行加密解密操作。
五.签名文件
签名文件指的是存放在META-INF文件夹中的文件。META-INF 文件夹是 Android 系统中的一种特殊文件夹,它用来存放应用程序的签名信息。在 META-INF 文件夹中可以找到三种常见的文件:CERT.RSA、CERT.SF和MANIFEST.MF,META-INF文件夹示例见图5。CERT.RSA、CERT.SF这两个文件用来存放应用程序的签名信息。当安装一个应用程序时,Android 系统会检查这两个文件,以确保应用程序的完整性和安全性。MANIFEST.MF文件用来存放应用程序的所有文件的清单信息。
当打包应用程序时,这些文件会自动生成,并且会被打包进 APK 文件中。通常情况下,不需要手动修改这些文件,但是有时候可能需要编辑这些文件来更新应用程序的版本号或者修改权限要求。
META-INF文件夹,用于存放签名证书,在APK安装时作为校验的凭据,用于保护APK不被恶意篡改,同时也是对APK著作权和所有权的声名。例如,对安装包的任意文件最作修改,导致安卓系统检查计算后的签名信息与APK文件中存储的签名信息不一致,最终无法安装,会出现签名冲突的问题。
六.编译资源文件
编译资源文件主要指存放在res文件夹中的文件。res文件夹,存放的也是资源文件,与assets文件夹不同的是,这里是编译后的资源文件。直接打开可能显示乱码。在 res 文件夹中你会找到许多子文件夹,每个子文件夹都用来存放特定类型的资源文件,res文件夹示例见图6。主要的文件夹包括drawable 文件夹、layout 文件夹和values 文件夹。
drawable 文件夹用来存放图片资源文件,包括位图文件(.png, .jpg, .gif 等)和矢量图文件(.svg)。
layout 文件夹用来存放布局文件,布局文件用来描述应用程序的界面结构。
values 文件夹用来存放值资源文件,值资源文件用来存放应用程序中使用的常量值和颜色信息。
在 Android 系统中,所有的资源文件都必须在 res 文件夹中存放,并且需要使用特定的文件名和文件夹名。这样的好处是,Android 系统会自动为每个资源文件分配一个唯一的资源 ID,使得安卓系统可以方便地引用这些资源。
七.核心代码文件
核心代码文件主要指classes.dex文件。classes.dex文件是 Android 系统中的重要代码文件,它是 Dalvik 可执行文件的缩写。Dalvik 是 Android 系统中的一种虚拟机,它负责在 Android 系统中运行应用程序的代码。classes.dex文件运行在Dalvik虚拟机上的核心代码文件,它反编译后的语言是smali代码语言,smali代码可转换为java代码。对于大的APK文件会出现多个dex文件,但在APP实际运行的过程中会将多个dex文件合并成一个dex文件运行。APK打包时存放多个dex的原因是每个dex文件的大小是有限制的。
.dex 文件中存放的是 Java 字节码,这是 Java 编译器编译出来的机器码。.dex 文件本身是一种二进制文件,它使用一种特殊的格式来存放字节码。
在打包 Android 应用程序时,.dex 文件会自动生成,并且会被打包进 APK 文件中。当你安装应用程序时,.dex 文件会被解压缩并放到私有目录中,然后被 Dalvik 虚拟机加载并运行。
.dex 文件的好处是,它可以使得应用程序的下载包大小变小,因为 Java 字节码文件可以被压缩得比较小。但是,.dex 文件的缺点是,它的访问速度略慢于共享库文件。因此,在 Android 系统中,一般情况下会尽量使用共享库文件来实现应用程序的功能。
八.资源映射文件
resources.arsc 文件是 Android 系统中的一种特殊文件,它用来存放应用程序的资源表。资源表是一种二进制文件,它包含了应用程序的资源 ID 和资源类型的映射关系。
在 Android 系统中,所有的资源文件都必须在 res 文件夹中存放,并且需要使用特定的文件名和文件夹名。当你编译应用程序时,编译器会将 res 文件夹中的资源文件编译成资源表,并且将资源表打包进 APK 文件中。
resources.arsc 文件的好处是,它可以使得应用程序的资源文件变小,因为资源表文件可以被压缩得比较小。但是,resources.arsc 文件的缺点是,它的访问速度略慢于普通的文本文件。因此,在 Android 系统中,一般情况下会尽量使用普通的文本文件来存放应用程序的资源信息。
注意,resources.arsc 文件仅仅是一个辅助文件,它本身并没有什么实际意义。应用程序通常是通过资源 ID在这个资源映射表中寻找对应的资源,来获取相应的参数。
九、APK的静态分析
1、静态分析,通过jadx或者jeb,jadx比较推荐 ,这个可以全局搜索,可以自动编译;
2、通过静态分析的话,要注意manifest.xml文件,这个类似于入口文件,里面有包名packename,有user-permission,可以通过关键词MAIN、LAUNCHER,找到上一层acivity,找到主函数的入口地址,进一步的分析就要在主函数中进行了。
十、APK的动态分析
1、需要准备root手机,最好的安卓版本是6或者7;
2、动态分析,抓包工具推荐fiddler,因为fiddler是工作于HTTPS加密前,比较适合手机apk抓包分析;
3、jadx分析,找到主函数,先找oncreat方法;
十一、APK加壳脱壳
1、一种是硬脱壳,一种是动态脱壳;
2、HOOK技术,就是钩子函数;
十二、apk 分析之frida hook
1、所有工具
ida反编译工具
Python
Frida
adb
jadx_gui
db browser for sqlite app数据库查看工具
雷电模拟器4.x(root 真机优先)
解密工具或者网站
2、基于电脑的服务端:frida 基于Python javascript的hook框架
--python环境推荐3.7以上
--安装Frida模块 pip install frida== 15.0.8
--安装frida-tools模块 pip install frida-tools==10.0.0
可以在github上找到Frida和frida-tools的对应关系,上面给出的是相互对应的。
3、基于手机的客户端:
----手机或者模拟器安装frida_server ,到GitHub上下载;github.com/frida/frida/releases,找到对应的版本;
---- 通过adb shell,给程序赋予权限:
chmod 777 Frida_server
./frida_server
电子数据取证之Android APK分析相关推荐
- 2016第二届美亚杯全国电子数据取证大赛团队赛write up
2016第二届美亚杯全国电子数据取证大赛 团队赛wp 本人TEL15543132658 同wechat,欢迎多多交流,wp有不足欢迎大家补充多多探讨! A部分write up 关于Hugo计算机的附加 ...
- 网络安全应急响应-电子数据取证技术
网络安全应急响应专题文章: 1. 网络安全应急响应-日志分析技术 2. 网络安全应急响应-流量分析技术 3. 网络安全应急响应-恶意代码分析技术 4. 网络安全应急响应-终端检测与响应技术 5. 网络 ...
- [完整]首届盘古石杯电子数据取证大赛晋级赛Writeup
首届盘古石电子数据取证大赛晋级赛Writeup 致谢 湖南警察学院-雷波(https://mp.weixin.qq.com/s/KyeHWgnfRdR0yUZm9PUYhQ) 浙江警察学院-Zodi4 ...
- 《电子数据取证》读书笔记
第一章 电子数据取证概述 1.1网络犯罪与网络安全 纵观国内外网络犯罪现状,网络犯罪活动的突出表现为: 利用网络编造.传播虚假信息.造谣.诽谤或者传播有害信息.煽动颠覆国家政权.破 坏国家主权.利用 ...
- 2020第六届美亚杯中国电子数据取证大赛个人资格赛
2020第六届美亚杯中国电子数据取证大赛个人资格赛 这一套还不错,个人赛的检材也各个有联系,检材照片和笔录让人身临其境. 第一次用富文本编辑器,感觉好酷 目录 笔记本计算机 手机 USB 笔记本计算机 ...
- 《中国人工智能学会通讯》——4.27 电子数据取证理论与技术
4.27 电子数据取证理论与技术 电子数据取证的概念 电子数据取证是指恢复已被破坏的计算机数据及提供相关的电子数据证据.利用计算机软硬件技术,以符合法律规范的方式对计算机入侵.破坏.欺诈.攻击等违法犯 ...
- 《公安机关办理刑事案件电子数据取证规则》
来源:公安部网站 原文链接:https://www.mps.gov.cn/n6557558/c6337154/content.html 公安机关办理刑事案件电子数据取证规则 [2019年2月1日起施行 ...
- 复盘首届盘古石杯全国电子数据取证大赛晋级赛write up
哪里有问题,请及时提醒答案以官方为准 邮箱投送 容器密码:usy1UN2Mmgram&^d?0E5r9myrk!cmJGr链接:https://pan.baidu.com/s/11W3KTP5 ...
- 【电子数据取证】8个门道儿
2019独角兽企业重金招聘Python工程师标准>>> 转 [电子数据取证]8个门道儿 2018年08月24日 06:30:00 电子物证 阅读数:335 来源:疯人杂说 ID:YC ...
最新文章
- Asp.net 服务器端控件
- And seeing the whole machine market
- 阿里撬得动“印度版”抖音吗?
- loj 1308(点双连通分量应用)
- oracle改字符集sjis,MySQL字符集专题(字符集,校对,乱码)_MySQL
- 《数字电子技术基础》6.3 时序逻辑电路——寄存器、计数器及脉冲发生器功能介绍
- Linux查看硬盘挂载
- 一份让你效率翻倍的年终总结
- Flutter CircularProgressIndicator圆形进度指示器
- Https网址在线安全检测网站
- Java批量导出word压缩后的zip文件
- 如何查看MySQL的表空间
- codeBlock软件下面的框不见了,怎么办?
- 【SAP】根据生产订单号查询序列号并导出序列号数据
- 消息循环中的TranslateMessage函数和DispatchMessage函数
- 软件测试流程有哪些?
- Flask Web开发 3.0 模板
- 国外经典网页设计:50个优秀的移动网站设计实例
- 数字麦克风和阵列拾音技术的应用
- 我在朝鲜做生意的一段经历(转贴震憾长文)