【愚公系列】2023年08月 攻防世界-MOBILE(Flag_system)
前言
1.ab文件
在对安卓手机进行取证时,经常需要备份手机的应用程序数据,备份后得到的数据文件为ab格式。虽然大部分的取证软件都可以对ab文件进行分析,但是,有时候你可能需要解析ab文件的文件系统,然后对应用程序数据进行手动分析。ab文件一般分两种,一种是没有加密,这种文件前面有24字节的文件头,文件头包含none标志,文件头之后就是数据;一种是加密的备份文件,它的文件头就比较复杂了,文件头包含AES-256标志。
2.Android backup extractor
Androidbackup extractor是一个开源项目,从sourceforge和github都可以下载最新的源码,它采用java编写,因此运行的时候需要java环境。Android backup extractor可以将ab格式转换为我们熟悉的tar格式,最重要的是它同时支持没有加密和数据加密的adb备份。下面分别介绍一下转换时的命令格式:
对于没有加密的ab文件,命令格式为:java -jar abe.jar unpack <backup.ab> <backup.tar>。如果执行成功,则没有任何信息提示;如果出现错误提示,有可能ab文件损坏,需要重新制作备份。
对于加密的ab文件,转换就比较麻烦,需要安装Java Cryptography Extension,可以从java官网下载文件local_policy.jar和US_export_policy.jar,复制到当前系统的java相应目录下,具体细节大家可以参考Android backup extractor的readme.txt文件。对于加密ab备份的转换,具体命令格式为:java -jar abe.jar unpack <backup.ab> <backup.tar> [password]。如果执行成功,则没有任何信息提示;如果出现错误信息,有可能ab文件损坏或者密码错误。
Androidbackup extractor除了可以将ab转化为tar,还可以将tar转换为ab。例如,你需要修改一些应用程序数据,但是手机又无法root,因此可以先将手机数据备份为ab文件,将ab备份转换为tar后修改数据,然后将修改后的tar转换为ab备份,最后恢复修改后的ab备份到设
3.相关工具
下面介绍三个反编译工具
- jadx是一个用于反编译Android APK文件的开源工具,静态反编译,查找索引功能强大
- jeb和IDA很像,属于动态调试,可以看java汇编也可以生成伪代码,还可以动态attach到目标调试
- Dex2jar:Dex2jar是一种工具,可以将Android的.dex文件转换为Java的.class文件,以便更方便地进行反编译和分析。
对于so文件的逆向工具选择
- IDA逆向工具是一款反汇编器,被广泛应用于软件逆向工程领域,能够反汇编各种不同平台的二进制程序代码,并还原成可读的汇编代码。
Objection是一款移动设备运行时漏洞利用工具,该工具由Frida驱动,可以帮助研究人员访问移动端应用程序,并在无需越狱或root操作的情况下对移动端应用程序的安全进行评估检查。
安装命令
pip3 install objection
frida是一款便携的、自由的、支持全平台的hook框架,可以通过编写JavaScript、Python代码来和frida_server端进行交互
frida的安装可以参考:https://www.jianshu.com/p/60cfd3f6afde
一、Flag_system
1.题目
2.答题
该题给出了一个修改过的backup.ab,稍微需改了ab的头部,version以及compress。直接使用abe进行提取的话需要根据代码简单修复一下ab头部。提取出来后发现有两个备份apk文件。
com.example.mybackup
com.example.zi
其中mybackup里提供了一个经过sqlcipher加密过的BOOKS.db.该数据库里存储了flag,只要解密该数据库之后即可获取flag。
密码直接可以通过反编译看到
public BooksDB(Context context) {
super(context, "BOOKS.db", null, 1);
this.k = Test.getSign(context);
this.db = this.getWritableDatabase(this.k);
this.dbr = this.getReadableDatabase(this.k);
}
getSign为自己写的获取签名,然后计算"SHA1",直接利用jeb反编译结果编写代码即可获取key,然后选择尝试正确的sqlcipher版本进行解密即可。
sqlite> PRAGMA KEY = 'KEY';
sqlite> .schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE books_table (book_id INTEGER primary key autoincrement, book_name t
ext, book_author text);
sqlite> select * from books_table
或者利用backup的apk中提供的sqlcipher库进行重写读取数据库也是可以获取到BOOKS.db内容。
- 点赞
- 收藏
- 关注作者
评论(0)