最新的IOS10版本,这些信息存储在Manifest.db的sqlite数据库中,用sqlite软件打开即可查看对应的信息

转载:http://www.cnblogs.com/ios8/p/ios-store2.html

这篇主要讲解如何解析Manifest.mbdb文件。

使用二进制工具打开这个文件,文件的头6个字节是固定的,相当于是文件的一种标识

后面的内容是一个一个的项,可以使用一个循环来读取文件,一个一个解析。

这里有一个概念要先说一下,就是域,域是用来定位一个文件在手机上的全路径。比如上图的 AppDomain-cairot,这个域就表示文件在手机上的目录为 /var/mobile/Applications/,不同的域对应的手机的目录是不一样的,下面给出所有域和目录的一个对应关系,下面是自己的一段代码, 看懂这段代码就知道域和路径的关系了。

if (item.Domain == "WirelessDomain")
{
item.PathOnPhone.Format("/var/wireless/%s", item.Path);
}
else if (item.Domain == "ManagedPreferencesDomain")
{
item.PathOnPhone.Format("/var/Managed Preferences/%s", item.Path);
}
else if (item.Domain == "MediaDomain")
{
item.PathOnPhone.Format("/var/mobile/%s", item.Path);
}
else if (item.Domain == "SystemPreferencesDomain")
{
item.PathOnPhone.Format("/var/preferences/%s", item.Path);
}
else if (item.Domain == "CameraRollDomain")
{
item.PathOnPhone.Format("/var/mobile/%s", item.Path);
}
else if (item.Domain == "RootDomain")
{
item.PathOnPhone.Format("/var/root/%s", item.Path);
}
else if (item.Domain == "MobileDeviceDomain")
{
item.PathOnPhone.Format("/var/MobileDevice/%s", item.Path);
}
else if (item.Domain == "KeychainDomain")
{
item.PathOnPhone.Format("/var/Keychains/%s", item.Path);
}
else if (item.Domain == "HomeDomain")
{
item.PathOnPhone.Format("/var/mobile/%s", item.Path);
}
else if (item.Domain == "DatabaseDomain")
{
item.PathOnPhone.Format("/var/db/%s", item.Path);
}
else if (item.Domain.Find("AppDomain-") == 0)
{
CAtlStringA strTmp(item.Domain);
strTmp.Replace("AppDomain-", "");
item.PathOnPhone.Format("/var/mobile/Applications/%s/%s",strTmp , item.Path);
}

1) 获取域。 头6个字节之后的2个字节,标识域的长度,但是2字节的内容并不是直接标识长度,看下面的代码。先读出一个字节,然后再读出一个字节,进行运算之后得出的一个长度。下图就是 AppDomain-cairot

std::string CBackupMbdb::ReadNextStringBy2bytesLen(CBinaryReader& reader)
{
std::string strResult;
byte num =  reader.ReadByte();
byte num2 =  reader.ReadByte();
if ((num == 0xff) && (num2 == 0xff))
{
return strResult;
}
int num3 = (num * 0x100) + num2;
strResult = reader.ReadString(num3);
return strResult;
}

2) 之后就是手机上路径。这个路径和域组合之后就可以得出文件在iphone 上的全路径了。第一个图中的item.path 就是这个路径,item.Domain 就是域。 根据上面的代码就可以组合出全路径了。这个路径获取方法和域是一样的。先读取文件的2个字节,然后根据这两个字节的大小读取内容。从上图看先读的两个为0000,所以路径就是空字符串。

3)链接路径。这个我也不是很清楚,貌似像是windows 的快捷方式一样,会指向一个其他的路径。反正我没用上这个东西。 读取的方式和前面一样

4) 紧接着数据的一段哈希。先读出2个字节,然后根据这两个字节计算出一个大小,进行一些判断之后把16 进制的数据转换成字符串。

std::string CBackupMbdb::smethod10(CBinaryReader& reader)
{
std::string strResult ;
byte num =  reader.ReadByte();
byte num2 =  reader.ReadByte();
if ((num == 0xff) && (num2 == 0xff))
{
return strResult;
}
int num6 = (num * 0x100) + num2;
CAutoVectorPtr<byte> pBuffer;
pBuffer.Allocate(num6);
reader.Read(pBuffer.m_p,num6);
int index = 0;
index = 0;
while (index < num6)
{
if ((pBuffer.m_p[index] < 0x20) || (pBuffer.m_p[index] >= 0x80))
{
break;
}
index++;
}
if (index == num6)
{
strResult = bytes_to_hex_string(pBuffer.m_p,num6);
}
return strResult;
}

5)  第五个内容的读取方法和第四个一样,但是所有的读出来的都是空字符串。

6)   读出固定的40个字节,这40个字节里面包含的信息很多,不过大部分都是不需要的,只有一个字段是重要的,这个字段会影响后面的文件读取。

CAutoVectorPtr<byte> pRecordInfo;
pRecordInfo.Allocate(40);
reader.Read(pRecordInfo.m_p,40);

//0x27 也就是最后的位置保存了这个项的属性个数,要用这个数字循环读出属性来。

itemInfo.PropertyCount = pRecordInfo[0x27];

for (int i=0;i<itemInfo.PropertyCount;i++)
{
CAtlStringA key = ReadNextStringBy2bytesLen(reader).c_str();
CAtlStringA value = smethod10(reader).c_str();
itemInfo.Properties[key] = value;
}

7)  根据第一步和第二步得出来的域和路径计算SHA1值,这个哈希值也就是本地的路径。

std::string strHash1Src;
if (itemInfo.Path.IsEmpty())
{
strHash1Src = itemInfo.Domain;
}
else
{
strHash1Src = itemInfo.Domain + "-" + itemInfo.Path;
}
std::string strTmp;
CAppUtilis::EncrypBySHA1(strHash1Src,strTmp);

然后一直循环读取文件,直到文件读完就可以解析出所有的文件路径了

苹果域对应关系 Manifest.db文件解析相关推荐

  1. hackthebox- kotarak(考点:信息搜集隐藏端口 tom 上传 域文件解析 wget-gnu 1.16提权 )

    1扫描搜集 普通nmap -A 扫.8009打不开,8080是汤姆猫,但是没密码. 没有多少价值信息,很可能端口扫描不全,于是速度版全端口再扫 masscan -p1-65535,U:1-65535 ...

  2. MANIFEST.MF文件全面解析

    (一)简介 当我们用Jar命令打完包后,会在根目录下面创建META-INF目录,该目录下面会有一些对该Jar包信息的描述,其中肯定会有一个MANIFEST.MF文件,该文件包含了该Jar包的版本.创建 ...

  3. Teams Bot App Manifest 文件解析

    这篇文章我们继续以 Hello World Bot 这个 sample 来讲一下 manifest template. 实际上在 Teams app 开发的时候,有 manifest 的概念,mani ...

  4. Python源码剖析[16] —— Pyc文件解析

    Python源码剖析[16] -- Pyc文件解析 2008-02-28 18:29:55|  分类: Python |举报 |字号 订阅 Python源码剖析 --Pyc文件解析 本文作者: Rob ...

  5. AVI文件格式解析+AVI文件解析工具

    (转)AVI文件格式解析+AVI文件解析工具 AVI文件解析工具下载地址:http://download.csdn.net/detail/zjq634359531/7556659 AVI(Audio ...

  6. PDF 与 PS页面描述语言与PDF文件解析(转)

    PDF 与 PS页面描述语言与PDF文件解析(转) 页面描述语言 页面描述语言(Page Description Language,简称PDL)是一种面向输出效应的语言,用于描述打印或照排的版面,这种 ...

  7. EXCEL通过配置导入规则,实现任意格式EXCEL文件解析

    EXCEL文件导入到数据库,是一种常见的文件导入格式. 本文实现的EXCEL文件解析方法,优点是适合任意格式的EXCEL文件,缺点是每一张表单都需要配置对应的导入规则,在字段数量多时,配置导入规则就尴 ...

  8. Json文件解析(上)

    Json文件解析(上) 代码地址:https://github.com/nlohmann/json 自述文件 alt=GitHub赞助商 data-canonical-src="https: ...

  9. .Net读取XP文件夹中的Thumbs.db文件

    一般在XP文件夹里面,特别是图片和视频文件夹里有一个文件-Thumbs.db文件.这个文件是XP用来缓存图片和影音文件的缩略图的,有了这个文件,XP在打开保存大量图片文件的文件夹的时候,显示速度会明显 ...

  10. 2020-10-27(dex文件解析)

    一张图搞懂dex 大图这里 当然也可以通过下面的图12 DexFile的文件格式,了解更清楚. DEX文件详解 什么是dex文件? 如何生成一个dex文件 dex文件的作用 dex文件格式详解 什么是 ...

最新文章

  1. spring-aop-01
  2. 【Linux系统编程】 Linux系统调用概述
  3. 在python中value是啥意思_【Python】python,字典中如何根据value值取对应的key值
  4. IE无法打开新窗口与U盘不显示故障的解决
  5. mysql8.0.20 64位安装教程_MySQL8.0.20压缩版本安装教程图文详解
  6. SAP License:如何建立应付暂估明细查询
  7. 计算机科学渗透信息论的思想,信息系统思想在高中地理课程教学中的渗透方法分析...
  8. matlab调和均值滤波_MATLAB--数字图像处理 均值滤波
  9. UI自动化测试工具-AirTest
  10. Java完全自学手册,你要悄悄努力,然后惊艳所有人
  11. 用户体验的要素pdf_用户运营思路(35份)
  12. html斜杠单元格,用斜杠拆分左侧单元格的html表
  13. 计算机nls数据丢失损坏无法启动,电脑开机时,显示NLS数据丢失或损坏怎么处理...
  14. HTML中设置td的字体颜色
  15. 【C语言进阶】数组、指针、函数——传参篇
  16. 在MELD数据集上利用BERT得到句向量表示
  17. 看完这篇 教你玩转渗透测试靶机vulnhub——DC9
  18. 软件开发中UI设计需要注意什么?
  19. 我如愿以尝被北交计算机学院录取
  20. BFC到底是什么?IFC、GFC、FFC?

热门文章

  1. jsp来实现 验证码 登录案例 有图 有码
  2. python查询文章中的高频词汇
  3. 【毕业设计】基于单片机的智能鱼缸系统设计与实现 - 嵌入式 物联网 stm32 c51
  4. 与京东物流合作,能不能补全东方甄选的最后一块拼图?
  5. python图片保存jpg、show变成bmp_python bmp转换为jpg 并删除原图的方法
  6. ZKP+图片授权——PhotoProof:proofs of permissible photo edits
  7. 人工智能——文本分类(大作业必备)
  8. FIL最新行情,FIL预测能涨至750U是否过于夸大?会突破新高吗?
  9. Win10搭建(FTP、LLS)
  10. PHP发送邮件类库PHPMailer的简单使用 摘自 现代魔法研究协会