第十一届 美亚杯中国电子数据取证大赛 个人赛 题解¶
Author
NoahTie @ tratra 什么都会
写在前面¶
这次美亚的个人赛整体题目难度不高, 但检材中出现了 2 个毒点:
- iOS 检材因提取工具原因, 直接使用弘连及美亚的软件挂载会需要密码, 但实际上检材内容已是解密后的文件. 需要弱口令爆破或密码绕过.
- 虚拟货币截图检材的压缩包密码没有给出, 需要猜测或结合已有信息进行爆破.
复盘期间遇到的比较卡的题目有:
- 陈民浩手机部分, 涉及 WiFi 信息部分的题目. 我认为部分题目描述有错.
- 冯子超手机部分, 涉及 AirDrop, 文档, 相册的部分题目. 有些题目的答案依然模糊不清.
另外, 吐槽一下美亚杯的监考软件的问题, 比赛前我和很多其他参赛选手都遇到了很多工具被监考软件杀掉的情况. 软件是用 Go 写的, 我没有时间仔细逆它, 但我会内存取证, 于是我从软件的内存 dump 里面提取出了一个进程清单列表:
wechat.exe,Weixin.exe,WeChatAppEx.exe,crashpad_handler.exe,qq.exe,dingtalk.exe,
WinSCP.exe,baidunetdisk.exe,baidunetdiskhost.exe,FlashFXP.exe,filezilla.exe,
wylogin.exe,lenovodata3.exe,115.exe,360EnterpriseDiskUI.exe,ChinaFTP.exe,ONENOTE.exe,
cuteftp.exe,cuteftppro.exe,Evernote.exe,EvernoteSubprocess.exe,YoudaoNote.exe,
ZoomMeetings.exe,Zoom.exe,wemeetapp.exe,WeLink.exe,WXWork.exe,Feishu.exe,AweSun.exe,
SunloginClient.exe,msedgewebview2.exe,ToDesk.exe,Feige.exe,Skype.exe,YY.exe,yixin.exe,
Ksyunpan.exe,eCloud.exe,aDrive.exe,QuarkCloudDrive.exe,WeiyunApp.exe,QmtChat.exe,
Telegram.exe,Whatsapp.exe,FeiQ.exe,Doubao.exe,yuanbao.exe,YuanbaoCrashHandler.exe,
wpscloudsvr.exe,awesun_guard.exe,AirDroid.exe,aria2c.exe,GameViewer.exe,有道云笔记Beta版.exe,
ToDesk_Service.exe,ToDesk_Session.exe
居然有 crashpad_handler.exe 和 msedgewebview2.exe, FTP 客户端也杀的差不多了, 幸好我们组网连 FTP 一般都是用 Windows 资源管理器自带的 FTP 功能. WebView 杀了, 导致所有需要 WebView 的应用(包括所有使用 NodeJS 编写的 GUI 应用, 使用 C# 编写的部分 GUI 应用, 使用 Windows SDK 的部分 GUI 应用)全部被美亚的监考软件判定为违规应用. 弘连的大部分软件和 Ollama 的 GUI 都使用到了 WebView, 直接导致了这些软件无法正常运行.
我紧急想了一个比较邪乎的招: 用 Windows 的服务起一个启动器, 这样启动器启动的全部应用都会继承服务的权限, 而美亚的监考软件是用管理员权限启动的, 这样监考软件只能检测到违规应用启动, 但无法关闭其进程.
好在这个软件的配置是云控下发的, 比赛前的晚上 9 点多我刚准备往西电校内的参赛群发操作教程的时候, 美亚负责监考软件的工程师紧急拉我开了个在线会议, 才算是把监考软件的问题解决了.
使用到的工具清单¶
info
以下是本文中出现的所有工具的清单(不包括 Windows 11 预装的系统工具), 仅供参考.
工具名称前标注有 * 的项为仅在复盘时使用了的工具, 其余工具为比赛时及复盘时均使用到的工具.
介质取证软件
- 火眼证据分析软件
- X-Ways Forensics
- FTK Imager
- iLEAPP
数据库工具
- DB Browser for SQLite (DB4S)
- Navicat Premium
- Realm Studio
虚拟机软件
- VMWare Workstation Pro
编辑器/IDE
- VS Code (Plist 插件)
- 010 Editor
- Plist Editor Pro
- 福昕高级 PDF 编辑器
其他工具
- Python 3.13
- CyberChef
- * BIP-39 Standalone
- iOS_Local_PL_Photos.sqlite_Queries
- HashMyFiles
- IrfanView
- VeraCrypt
- Utools (二维码插件)
比赛信息¶
容器信息¶
容器密码: FEYn0MJLYy9zTQRFHlXGRkVqXv3IkE8h
SHA-256 哈希: ba7a59bda48932ae5507c4872a0492ee080cd8e6222d9e86fad961038801826e
比赛案情¶
案情
警方接获报案, 前往西贡布袋澳处理一宗"伤人"事件. 经初步调查, 怀疑男子陈民浩以木棍袭击男子冯子超, 导致冯子超头部受伤昏迷. 冯子超已被送往医院救治, 陈民浩则因涉嫌"伤人"罪被警方当场拘捕, 被捕后一直保持缄默, 拒绝交代案情细节.
进一步调查显示, 两人冲突疑因女子梁燕玲而起. 根据现场迹象推断, 梁燕玲曾于事发时在场出现, 经警方多方搜索后, 至今仍未能与她取得联络. 请参赛者根据提供的资料, 深入分析线索, 寻找梁燕玲下落, 并还原事件真相.
背景资料
- Green Technology Supply Co. Ltd.(绿创科技系统有限公司)为本港网络工程公司, 主要业务是为企业客户铺设网络服务及安装各类服务器.
- 男子 FUNG Chi-chiu(冯子超), 英文名为 Duncan, 30 岁, 未婚, 香港出生, 在 Green Technology Supply Co. Ltd. 任职工程师.
- 男子 CHAN Man-ho(陈民浩), 英文名为 Hogan, 35 岁, 未婚, 香港出生, 在 Green Technology Supply Co. Ltd. 任职系统工程师.
- 女子 LEUNG Yin-ling(梁燕玲), 英文名为 Ling, 28 岁, 未婚, 香港出生, 现为自由职业平面设计师.
附加资料
- 梁燕玲与陈民浩为同居情侣关系
- 梁燕玲通过陈民浩认识冯子超
- 三人均为密码学(Crypto)及隐写术(Stego)爱好者
- 陈民浩经常驾车接载三人前往郊区聚餐, 并一同钻研相关技术话题
案情思维导图¶

最近在学 OSINT, 顺便拿 Maltego 画了个图

陈民浩的手机(iOS)¶
案情
香港警方接到报案, 西贡区布袋澳有人持木棍袭击他人, 警方到达现场发现冯子超头部受伤昏迷, 身上只有一部智能手机但没有身份证明文件. 调查后香港警方以伤人罪拘捕了陈民浩. 陈民浩被捕后保持沉默, 拒绝交代案情, 身上搜获一部智能手机, 冯子超则被送往医院救治. 警方检查了两人的智能手机, 并由检验人员进行了检验. 冯子超的智能手机资料储存在 FUNG_CC_mobile.zip 文件中, 而陈民浩的智能手机资料则储存在 CHAN_MH.zip 文件中. 警方希望运用你的电子数据检验知识, 在两个人的智能手机中查找办案线索.
请你使用 CHAN_MH.zip 检材回答以下问题.
对检材文件的处理
由于 iOS 备份一些隐私数据(例如, KeyChain 等)强制要求用户设置备份密码, 因此取证工具在获取备份时往往会设置一个默认的密码或要求用户手动设置一个密码. 这样设置的备份密码通常为 4 位数字, 常见的是 0000 和 1234 之类的 4 位数字弱口令.
本次比赛的所有 iOS 检材均为备份文件, 且设置了备份密码. 大多数检材的密码为 0000 或 1234, 可以通过 Passware 或 HashCat 等密码爆破工具结合弱口令字典或 4 位数字掩码进行爆破. 但仍有 1 个检材的密码无法通过该方法获取.
解压 iOS 检材之后, 可以看到目录中存在一个 iDevice_info.txt 文件, 该文件是 ideviceinfo 工具的输出结果. 该工具被许多 iOS 提取工具使用, 例如 Elcomsoft iOS Forensic Toolkit 就会使用该工具获取待提取设备的基本信息:


在检材中的 /var 目录中存储着 Info.plist Manifest.plist Manifest.db Status.plist 和文件扩展名添加了 _DEC 的 4 个文件:

文件名包含 _DEC 的是提取工具生成的解密后的文件, 因此使用这些解密后的文件覆盖原始加密的文件, 并使用 Plist Editor 将 Manifest.plist 中将备份是否加密的标志改为 false 即可得到未加密的检材文件.

之后即可将该目录作为文件集合挂载在火眼取证中进行分析了.
或者, 也可以不对文件进行覆盖, 而是只删除 Manifest.db 并对 Menifest.plist 中的加密标志进行修改, 也可以达到相同的效果.
若直接删除 Menifest.db 和 Menifest.plist, 也可以挂载检材, 但会缺失部分信息.
01 这个智能手机是什么操作系统¶
选项
- A.iOS 17.1.1
- B.iOS 17.2.1
- C.iOS 17.3.1
- D.iOS 17.0.1
答案
A
在"基本信息"中可以看到:

或者在 iLEAPP 的报告中:

02 在这个手机中, 有多少组国际移动设备识别码(IMEI)号码¶
答案
2
在"基本信息"中可以看到 1 个 IMEI 357328098205226(证据来源是 Info.plist 文件):

在 iDevice_info.txt 中可以看到 2 个 IMEI 357328098205226 及 357328099153748:

03 承上题, 以下哪一个才是正确的国际移动设备识别码(IMEI)号码¶
选项
- A.357328098205226
- B.357328097205226
- C.357328096205226
- D.357328095205226
答案
A
接上题. 根据 Info.plist 文件的内容, 357328098205226 应该是正确的 IMEI.
04 请指出最后使用的使用者身分模组(SIM)的集成电路卡识别码(ICCID)¶
答案
89852122206020998419
在"SIM 卡记录"分析结果中可以看到最后更新信息的 SIM 卡的 ICCID 为 89852122206020998419:

在 iDevice_info.txt 中也可以看到相同的结果(提取数据当时安装在手机内的 SIM 卡的信息):
或者在 iLEAPP 的报告中:

05 请指出最后使用的 Apple ID 是多少¶
答案
whoishogan@gmail.com
在"账号信息"分析结果中可以看到登录的 Apple ID 是 whoishogan@gmail.com:


在 iDevice_info.txt 中也可以看到相同的结果:

或者在 iLEAPP 的报告中:

06 蓝牙模组中的蓝牙地址是多少¶
答案
f8:38:80:bb:f5:28
在 iDevice_info.txt 中可以看到蓝牙的 MAC 地址 f8:38:80:bb:f5:28:

07 这个智能手机曾经启动个人热点分享网络, 请问他的热点名称¶
答案
iPhone
在 iDevice_info.txt 中可以看到热点的密码:

在陈民浩的另外一部安卓手机可以看到连接过 SSID 为 iPhone 的热点:

iPhone 的热点 SSID
iPhone 的热点名称在未越狱修改系统文件的情况下无法自定义, 中文系统下默认的热点名称为 <UserName>的iPhone, 英文系统下默认的热点名称为 <UserName>'s iPhone.
若 iPhone 手机未登录 Apple ID 或未设置用户名, 则热点的 SSID 将为 iPhone.
08 这个智能手机没有连接过以下哪一个服务集标识符(SSID)¶
选项
- A.Hongn Home
- B.CMHK
- C.1010 free wifi
- D.ErrorError
本题存疑
我的答案: AB
在"Wi-Fi 连接记录"分析结果中可以看到 4 个 WiFi 的连接记录:

在 /var/preferences/SystemConfiguration/preferences.plist 中可见用户使用过 "cmhk" APN, 但这是手机无线网络的 APN 而非 WiFi 网络的 SSID.
在 iLEAPP 的分析结果中也可看到相同的结果:

09 请指出首次连接服务集识别码(SSID)名称为"CMHK"的无线区域网络(Wi-Fi)的日期及时间¶
本题存疑
暂无答案
接上题.
CMHK 是 China Mobile Hongkong 的简写, 在 apnsettings 或 China Mobile Hongkong 都可以看到关于 CMHK APN 的信息:

因此, 检材设备连接过 APN 为 CMHK 的蜂窝数据网络, 而非 WiFi 网络.
10 安装了以下即时哪个通讯软件?¶
i) WhatsApp
ii) WeChat
iii) WhatsApp Business
iv) QQ
选项
- A.只有 i) 和 ii)
- B.只有 i), ii) 和 iii)
- C.只有 i), ii) 和 iv)
- D.以上皆是
答案
A
在"应用列表"解析结果中筛选非预装的应用包:

设备上安装了 WhatsApp, Telegram 和微信 3 个即时通信软件.
11 承上题, 请指出即时通讯软件"WhatsApp"的版本¶
答案
731647702.0
在 Manifest.plist 中可以看到:

12 陈民浩的手机中, 总共安装 3 个文件传输软件, 封包名称分别为 com.apple.Sharing.AirDropUI, com.lenovo.anyshare, com.estmob.paprika, 其中有哪一个软件曾经用来传送/接收文件功能¶
选项
- A.com.apple.Sharing.AirDropUI
- B.com.lenovo.anyshare
- C.com.estmob.paprika
答案
C
在 Menifest.plist 中可以看到题目中提及的 3 个软件包的信息:

在 com.estmob.paprika(Send Anywhere) 的数据目录中的 realm 数据库 com.estmob.sendanywhere.sdk.database.realm 中存储着文件传输相关的信息:


13 承上题, 与其有传送/接收过资料装置的装置 ID 是多少¶
答案
5402313593439
接上题. 在 TransferInfoEntity 表中可以看到 2 次传输记录, 其中的 peerDeviceId 列存储的是传输对象的设备 ID:

14 承上题, 这个装置名称是¶
答案
Samsung SM-G930F
接上题.

该设备实际上是陈民浩的另外一部安卓手机:

15 承上题, 本机装置的装置 ID 是多少¶
答案
3836403626142
在数据目录 /var/mobile/Applications/com.estmob.paprika/Library/Preferences/ 中的文件 com.estmob.paprika.properties.plist 中可以看到本机的设备 ID:

在陈民浩的安卓手机中, 在应用数据目录 /data/com.estmob.android.sendanywhere/databases 中的数据库 main.db 中的 devices 表可以看到与该手机连接过的设备 ID 与陈民浩的 iPhone 手机一致:


由此确认 2 个文件的传输发生在陈民浩的两台手机之间.
16 承上题, 陈民浩的手机(CHAN_MH_mobile.zip)是传送方或是接收方¶
选项
- A.传送方
- B.接收方
- C.传送及接收方
答案
B
结合陈民浩的安卓手机内的截图数据, 可以判断这些截图文件是由陈民浩的安卓手机发送给他的 iPhone 手机的:

截图内容为米家 APP 的应用界面, 该截图在陈民浩的 iPhone 手机的 WhatsApp 与梁燕玲(Ling)的聊天记录中可以看到:

17 根据传送档案的名称, 判断是以下哪一类型¶
选项
- A.屏幕截图
- B.手机拍摄影片
- C.PDF 文件
- D.zip 压缩文件
答案
A
文件名中包含 Screenshot 字样, 排除人为修改文件名的情况, 应该是屏幕截图文件.
在陈民浩的安卓手机内的截图文件夹中可以找到这些图片, 可以进一步印证推测.
18 承上题, 接收至哪一个装置¶
选项
- A.CHAN_MH_mobile.zip
- B.blk0_sda.bin
- C.FUNG_CC_mobile.zip
- D.LAM_KH_Mobile.zip
- E.WONG_CW_mobile.zip
答案
A
参考上述分析.
19 承上题, 传送方是通过此文档传输软件的哪个模式作出传送¶
选项
- A.SEND_PARTIALLY
- B.SEND_PAPRIKA
- C.SEND_DIRECTLY
- D.SEND_BYCLOUD
- E.SEND_BLUETOOTH
答案
C
参考本部分第 15 题. 在数据库 main.db 中的 transfer_history 表中可以看到上述文件的传输记录:

传输方式为 SEND_DIRECTLY.
20 从来没有安装以下哪个网络浏览器¶
选项
- A.Safari
- B.Chrome
- C.Firefox
- D.edge
答案
BCD
iOS 设备上会预装 Safari 浏览器:

在"应用授权日志"分析结果和"网络使用详情"分析结果中, 均未能找到 Safari 之外 3 个浏览器的使用记录.
21 承上题, 网络浏览器 Safari 有多少个书签(Bookmark)记录¶
答案
9
在"Safari"的"书签记录"分析结果中可以看到有 9 条书签记录:

22 承上题, 曾经通过 Safari 浏览器用下列哪一个字词进行过搜索¶
选项
- A.非法处理尸体最高刑罚
- B.escape room hong kong
- C.cypto wallet
- D.非法处理尸体
答案
ABC
在"Safari"的"搜索历史"分析结果中, 可以看到选项 A B C 的关键词:

有意思的是, 选项 C 中的"cypto"是一个 typo.
23 有多少个图片文件曾经储存到 iCloud¶
答案
2
在 iLEAPP 的"Files App - Files stored in iCloud Drive"分析报告中可以看到一共上传了 3 个文件, 其中有 2 个是图片文件:

该分析报告的来源是 \var\mobile\Library\Application Support\CloudDocs\session\db\client.db 数据库:

24 相册中有多少张图片是通过屏幕截图功能取得¶
答案
15
在"图片"的"屏幕快照"分析结果中可以看到共有 15 张屏幕截图:

冯子超的手机¶
案情
请参考参赛材料 FUNG_CC_mobile.zip 回答以下问题.
25 这部智能手机连接过多少个 Wi-Fi 网络¶
答案
2
在"Wi-Fi 连接记录"分析结果中可以看到 2 条记录:

26 这部智能手机曾经连接过以下哪个无线网络¶
i) THREE_WIFI
ii) wanchai
iii) iPhone(2)
iv) Router
选项
- A.只有 i)
- B.只有 ii) 和 iii)
- C.只有 ii), iii) 和 iv)
- D.以上皆是
答案
B
接上题.
证据来源是 /var/preferences/SystemConfiguration/com.apple.wifi-private-mac-networks.plist, 该文件中保存了 2 个使用了 iOS 的隐私 WiFi MAC 地址功能的 Wi-Fi 信息, 功能介绍参考 Use private Wi-Fi addresses on Apple devices.
疑点
但在系统配置中的 com.apple.wifi.plist 文件中可见另外 1 个 SSID. 并且根据 IsEapNetwork 的配置项值为 true 可以判断该网络是 EAP 网络; isCarrierBundleBased 的配置项值为 true 可以判断该网络是通过运营商的配置文件添加的网络:


我在网上搜索了一下, 发现 THREE_WIFI 是一家网络运营商 3HK 提供的 WiFi 路由器的默认 SSID. 我认为检材的设备还连接过 SSID 为 THREE_WIFI 的 Wi-Fi 网络.
但根据后续的题目来看, 设备实际上或许没有连接过 THREE_WIFI, 目前还没有找到配置文件中出现该网络信息的原因.
27 这部手提手机最早连接(非热点) Wi-Fi 的时间是什么¶
答案
2025-04-15 19:29:23
在 /var/preferences/SystemConfiguration/com.apple.wifi-private-mac-networks.plist 配置文件中可以看到 Wi-Fi 连接的详细信息.
添加(第一次连接) iPhone(2) 网络的时间为 2025-04-15T09:40:44Z(转换到 UTC+08 为 2025-04-15 17:40:44):

但根据该网络的 SSID 来看, 该网络为 iPhone 手机开启的热点, 根据题目描述应当排除.
添加 wanchai 网络的时间为 2025-04-15T11:29:23Z(转换到 UTC+08 为 2025-04-15 19:29:23):

ISO 8601 标准时间表示
在 ISO 8601 中规定了 2 种标准的时间表示方式:
- 形如 1970-01-01T00:00:00.000Z: 该时间为 UTC 时间.
- 形如 1970-01-01T00:00:00.000+00:00: 该时间格式包含时区信息, 时区前的时间为该时区的当地时间
28 承上题, 请列出这个连接的服务集识别码(SSID)¶
答案
wanchai
见上述分析.
29 承上题, 请列出这个连接的登入金钥¶
答案
hellowanchai
在"钥匙串"分析结果中可以看到 wanchai 网络的密码:

30 相册中有两张 GIF "IMG_0057.GIF"及"IMG_0062.GIF", 请指出由哪一个软件拍摄¶
选项
- A.Infltr
- B.Discreet
- C.Meitu
- D.Prisma
答案
A
我在 iOS_Local_PL_Photos.sqlite_Queries 仓库中的 iOS17_LPL_Phsql_Basic.txt 的基础上做了一些修改(主要是检材中的 photos.db 中的 ZMEDANLYASTATTR 的字段与仓库中提供的脚本略有区别):
SELECT ZASSET.ZSORTTOKEN AS 'ZASSET-SORT TOKEN',
ZASSET.ZPROMOTIONSCORE AS 'ZASSET-PROMOTION SCORE',
CASE ZASSET.ZCOMPLETE
WHEN 1 THEN '1-YES-1'
END AS 'ZASSET COMPLETE',
ZASSET.Z_PK AS 'ZASSET-ZPK',
ZADDASSETATTR.Z_PK AS 'ZADDASSETATTR-ZPK',
ZCLDMAST.Z_PK AS 'ZCLDMAST-ZPK=ZASSET-MASTER',
ZASSET.ZMASTER AS 'ZASSET-MASTER=ZCLDMAST-ZPK',
ZASSET.ZEXTENDEDATTRIBUTES AS 'ZASSET-EXTENDED ATTRIBUTES=ZEXTATTR-ZPK',
ZEXTATTR.Z_PK AS 'ZEXTATTR-ZPK=ZASSET-ZEXTENDEDATTRIBUTES',
CMZCLDMASTMEDDATA.ZCLOUDMASTER AS 'CMZCLDMASTMEDDATA-CLDMAST=ZCLDMAST-ZPK',
ZCLDMAST.ZMEDIAMETADATA AS 'ZCLDMAST-MEDIA METADATA KEY=ZCLDMASTMEDDATA.ZPK',
CMZCLDMASTMEDDATA.Z_PK AS 'CMZCLDMASTMEDDATA-ZPK=ZADDASSETATTR&ZCLDMAST-MEDIAMETADATA KEY',
CMZCLDMASTMEDDATA.Z_ENT AS 'CMZCLDMASTMEDDATA-ZENT',
ZASSET.ZUUID AS 'ZASSET-UUID = STORE.CLOUDPHOTODB',
ZASSET.ZCLOUDASSETGUID AS 'ZASSET-CLOUD_ASSET_GUID = STORE.CLOUDPHOTODB',
ZASSET.ZCLOUDCOLLECTIONGUID AS 'ZASSET.CLOUD COLLECTION GUID',
ZCLDMAST.ZCLOUDMASTERGUID AS 'ZCLDMAST-CLOUD_MASTER_GUID = STORE.CLOUDPHOTODB',
ZGENALBUM.ZCLOUDGUID AS 'ZGENALBUM-CLOUD_GUID = STORE.CLOUDPHOTODB',
ZSHARE.ZSCOPEIDENTIFIER AS 'ZSHARE-SCOPE ID = STORE.CLOUDPHOTODB',
ZADDASSETATTR.ZORIGINALASSETSUUID AS 'ZADDASSETATTR-ORIGINAL ASSETS UUID',
ZADDASSETATTR.ZPUBLICGLOBALUUID AS 'ZADDASSETATTR-PUBLIC GLOBAL UUID',
ZADDASSETATTR.ZMASTERFINGERPRINT AS 'ZADDASSETATTR-MASTER FINGERPRINT',
ZADDASSETATTR.ZORIGINATINGASSETIDENTIFIER AS 'ZADDASSETATTR-ORIGINATING ASSET IDENTIFIER',
ZCLDMAST.ZORIGINATINGASSETIDENTIFIER AS 'ZCLDMAST-ORIGINATING ASSET ID',
ZINTRESOU.ZFINGERPRINT AS 'ZINTRESOU-FINGERPRINT',
ZADDASSETATTR.ZADJUSTEDFINGERPRINT AS 'ZADDASSETATTR.ADJUSTED FINGERPRINT',
ZUNMADJ.ZOTHERADJUSTMENTSFINGERPRINT AS 'ZUNMADJ-OTHER ADJUSTMENTS FINGERPRINT',
ZUNMADJ.ZSIMILARTOORIGINALADJUSTMENTSFINGERPRINT AS 'ZUNMADJ-SIMILAR TO ORIG ADJUSTMENTS FINGERPRINT',
CASE PARENTZGENALBUM.ZCLOUDLOCALSTATE
WHEN 0 THEN '0-ICLDPHOTOS-ON=ASSET_IN_SHARED/OTHER-ALBUM/ICLDPHOTOS-OFF=GENERIC_ALBUM-0'
WHEN 1 THEN '1-ICLDPHOTOS-ON=ASSET_IN_GENERIC ALBUM-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || PARENTZGENALBUM.ZCLOUDLOCALSTATE || ''
END AS 'PARENTZGENALBUM-CLOUD-LOCAL-STATE-4START',
PARENTZGENALBUM.ZTITLE AS 'PARENTZGENALBUM-TITLE-4START',
DATETIME(PARENTZGENALBUM.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'PARENTZGENALBUM-CREATION DATE-4START',
DATETIME(ZGENALBUM.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ZGENALBUM-CREATION DATE-4START',
CASE ZGENALBUM.ZCLOUDLOCALSTATE
WHEN 0 THEN '0-ICLDPHOTOS-ON=ASSET_IN_SHARED/OTHER-ALBUM/ICLDPHOTOS-OFF=GENERIC_ALBUM-0'
WHEN 1 THEN '1-ICLDPHOTOS-ON=ASSET_IN_GENERIC_ ALBUM-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZGENALBUM.ZCLOUDLOCALSTATE || ''
END AS 'ZGENALBUM-CLOUD_LOCAL_STATE-4START',
ZGENALBUM.ZTITLE AS 'ZGENALBUM-TITLE-4START',
CASE ZASSET.ZBUNDLESCOPE
WHEN 0 THEN '0-ICLDPHOTOS-ON=NOT-IN-SHARED-ALBUM_ICLDPHOTOS-OFF=ON-LOCAL-DEVICE-0'
WHEN 1 THEN '1-SWY-SYNDICATION_CMMASSET-1'
WHEN 2 THEN '2-ICLDPHOTOS-ON=ASSET-IN-CLOUD-SHARED-ALBUM-2'
WHEN 3 THEN '3-ICLDPHOTOS-ON=SWY-SYNDICATION-ASSET-3'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZBUNDLESCOPE || ''
END AS 'ZASSET-BUNDLE SCOPE',
CASE ZASSET.ZCLOUDISMYASSET
WHEN 0 THEN '0-NOT_MY_ASSET_IN_SHARED_ALBUM-0'
WHEN 1 THEN '1-MY_ASSET_IN_SHARED_ALBUM-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZCLOUDISMYASSET || ''
END AS 'ZASSET-CLOUD IS MY ASSET',
CASE ZASSET.ZCLOUDISDELETABLE
WHEN 0 THEN '0-NO-0'
WHEN 1 THEN '1-YES-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZCLOUDISDELETABLE || ''
END AS 'ZASSET-CLOUD IS DELETABLE/ASSET',
CASE ZASSET.ZCLOUDLOCALSTATE
WHEN 0 THEN 'ICLDPHOTOS ON=ASSET_IN_SHARED-OR-OTHERALBUM/ICLDPHOTOS_OFF=NOT_SYNCED-0'
WHEN 1 THEN 'ICLDPHOTOS ON=ASSET_CAN-BE-OR-HAS-BEEN_SYNCED_WITH_ICLOUD-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZCLOUDLOCALSTATE || ''
END AS 'ZASSET-CLOUD_LOCAL_STATE',
CASE ZASSET.ZVISIBILITYSTATE
WHEN 0 THEN '0-VISIBLE-PHOTO-LIBRARY-0'
WHEN 2 THEN '2-NOT-VISIBLE-PHOTO-LIBRARY-2'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZVISIBILITYSTATE || ''
END AS 'ZASSET-VISIBILITY STATE',
ZEXTATTR.ZCAMERAMAKE AS 'ZEXTATTR-CAMERA MAKE',
ZEXTATTR.ZCAMERAMODEL AS 'ZEXTATTR-CAMERA MODEL',
ZEXTATTR.ZLENSMODEL AS 'ZEXTATTR-LENS MODEL',
CASE ZEXTATTR.ZFLASHFIRED
WHEN 0 THEN '0-NO FLASH-0'
WHEN 1 THEN '1-FLASH FIRED-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZEXTATTR.ZFLASHFIRED || ''
END AS 'ZEXTATTR-FLASH FIRED',
ZEXTATTR.ZFOCALLENGTH AS 'ZEXTATTR-FOCAL LENGHT',
ZEXTATTR.ZFOCALLENGTHIN35MM AS 'ZEXTATTR-FOCAL LENTH IN 35MM',
ZEXTATTR.ZDIGITALZOOMRATIO AS 'ZEXTATTR-DIGITAL ZOOM RATIO',
CASE ZASSET.ZDERIVEDCAMERACAPTUREDEVICE
WHEN 0 THEN '0-BACK-CAMERA/OTHER-0'
WHEN 1 THEN '1-FRONT-CAMERA-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZDERIVEDCAMERACAPTUREDEVICE || ''
END AS 'ZASSET-DERIVED CAMERA CAPTURE DEVICE',
CASE ZADDASSETATTR.ZCAMERACAPTUREDEVICE
WHEN 0 THEN '0-BACK-CAMERA/OTHER-0'
WHEN 1 THEN '1-FRONT-CAMERA-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZADDASSETATTR.ZCAMERACAPTUREDEVICE || ''
END AS 'ZADDASSETATTR-CAMERA CAPTURED DEVICE',
CASE ZADDASSETATTR.ZIMPORTEDBY
WHEN 0 THEN '0-CLOUD-OTHER-0'
WHEN 1 THEN '1-NATIVE-BACK-CAMERA-1'
WHEN 2 THEN '2-NATIVE-FRONT-CAMERA-2'
WHEN 3 THEN '3-THIRD-PARTY-APP-3'
WHEN 4 THEN '4-STILLTESTING-4'
WHEN 5 THEN '5-PHOTOBOOTH_PL-ASSET-5'
WHEN 6 THEN '6-THIRD-PARTY-APP-6'
WHEN 7 THEN '7-ICLOUD_SHARE_LINK-CMMASSET-7'
WHEN 8 THEN '8-SYSTEM-PACKAGE-APP-8'
WHEN 9 THEN '9-NATIVE-APP-9'
WHEN 10 THEN '10-STILLTESTING-10'
WHEN 11 THEN '11-STILLTESTING-11'
WHEN 12 THEN '12-SWY_SYNDICATION_PL-12'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZADDASSETATTR.ZIMPORTEDBY || ''
END AS 'ZADDASSETATTR-IMPORTED BY',
CASE ZCLDMAST.ZIMPORTEDBY
WHEN 0 THEN '0-CLOUD-OTHER-0'
WHEN 1 THEN '1-NATIVE-BACK-CAMERA-1'
WHEN 2 THEN '2-NATIVE-FRONT-CAMERA-2'
WHEN 3 THEN '3-THIRD-PARTY-APP-3'
WHEN 4 THEN '4-STILLTESTING-4'
WHEN 5 THEN '5-PHOTOBOOTH_PL-ASSET-5'
WHEN 6 THEN '6-THIRD-PARTY-APP-6'
WHEN 7 THEN '7-ICLOUD_SHARE_LINK-CMMASSET-7'
WHEN 8 THEN '8-SYSTEM-PACKAGE-APP-8'
WHEN 9 THEN '9-NATIVE-APP-9'
WHEN 10 THEN '10-STILLTESTING-10'
WHEN 11 THEN '11-STILLTESTING-11'
WHEN 12 THEN '12-SWY_SYNDICATION_PL-12'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZCLDMAST.ZIMPORTEDBY || ''
END AS 'ZCLDMAST-IMPORTED BY',
ZADDASSETATTR.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'ZADDASSETATTR.IMPORTED BY BUNDLE IDENTIFIER',
ZADDASSETATTR.ZIMPORTEDBYDISPLAYNAME AS 'ZADDASSETATTR-IMPORTED BY DISPLAY NAME',
ZCLDMAST.ZIMPORTEDBYBUNDLEIDENTIFIER AS 'ZCLDMAST-IMPORTED BY BUNDLE ID',
ZCLDMAST.ZIMPORTEDBYDISPLAYNAME AS 'ZCLDMAST-IMPORTED BY DISPLAY NAME',
ZASSET.ZIMAGEREQUESTHINTS AS 'ZASSET-IMAGEREQUESTHINTS/HEX-PATH',
CASE ZASSET.ZSAVEDASSETTYPE
WHEN 0 THEN '0-SAVED-VIA-OTHER-SOURCE-0'
WHEN 1 THEN '1-STILLTESTING-1'
WHEN 2 THEN '2-STILLTESTING-2'
WHEN 3 THEN '3-LOCAL-PHOTO-LIBRARY-ASSET-3'
WHEN 4 THEN '4-PHOTO-CLOUD-SHARING-DATA-ASSET-4'
WHEN 5 THEN '5-PHOTOBOOTH_PHOTO-LIBRARY-ASSET-5'
WHEN 6 THEN '6-CLOUD-PHOTO-LIBRARY-ASSET-6'
WHEN 7 THEN '7-STILLTESTING-7'
WHEN 8 THEN '8-ICLOUDLINK_CLOUDMASTERMOMENTASSET-8'
WHEN 12 THEN '12-SWY-SYNDICATION-PL-ASSET/AUTO-DISPLAYED_IN_LPL-12'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZSAVEDASSETTYPE || ''
END AS 'ZASSET-SAVED ASSET TYPE-LPL',
ZASSET.ZDIRECTORY AS 'ZASSET-DIRECTORY/PATH',
ZASSET.ZFILENAME AS 'ZASSET-FILENAME',
ZADDASSETATTR.ZORIGINALFILENAME AS 'ZADDASSETATTR-ORIGINAL FILENAME',
ZCLDMAST.ZORIGINALFILENAME AS 'ZCLDMAST-ORIG FILENAME',
ZADDASSETATTR.ZSYNDICATIONIDENTIFIER AS 'ZADDASSETATTR-SYNDICATION IDENTIFIER',
DATETIME(ZASSET.ZADDEDDATE + 978307200, 'UNIXEPOCH') AS 'ZASSET-ADD DATE',
CASE ZADDASSETATTR.ZDATECREATEDSOURCE
WHEN 0 THEN '0-CLOUD-ASSET-0'
WHEN 1 THEN '1-LOCAL_ASSET_EXIF-1'
WHEN 3 THEN '3-LOCAL_ASSET_NO_EXIF-3'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZADDASSETATTR.ZDATECREATEDSOURCE || ''
END AS 'ZADDASSETATTR-DATE CREATED SOURCE',
DATETIME(ZASSET.ZDATECREATED + 978307200, 'UNIXEPOCH') AS 'ZASSET-DATE CREATED',
DATETIME(ZCLDMAST.ZCREATIONDATE + 978307200, 'UNIXEPOCH') AS 'ZCLDMAST-CREATION DATE',
DATETIME(ZINTRESOU.ZCLOUDMASTERDATECREATED + 978307200, 'UNIXEPOCH') AS 'ZINTRESOU-CLDMST DATE CREATED',
ZADDASSETATTR.ZTIMEZONENAME AS 'ZADDASSETATTR-TIME ZONE NAME',
ZADDASSETATTR.ZTIMEZONEOFFSET AS 'ZADDASSETATTR-TIME ZONE OFFSET',
ZADDASSETATTR.ZINFERREDTIMEZONEOFFSET AS 'ZADDASSETATTR-INFERRED TIME ZONE OFFSET',
ZADDASSETATTR.ZEXIFTIMESTAMPSTRING AS 'ZADDASSETATTR-EXIF-STRING',
DATETIME(ZASSET.ZMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'ZASSET-MODIFICATION DATE',
CASE ZCLDMAST.ZCLOUDLOCALSTATE
WHEN 0 THEN '0-NOT SYNCED WITH CLOUD-0'
WHEN 1 THEN '1-PENDING UPLOAD-1'
WHEN 2 THEN '2-STILLTESTING'
WHEN 3 THEN '3-SYNCED WITH CLOUD-3'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZCLDMAST.ZCLOUDLOCALSTATE || ''
END AS 'ZCLDMAST-CLOUD LOCAL STATE',
DATETIME(ZCLDMAST.ZIMPORTDATE + 978307200, 'UNIXEPOCH') AS 'ZCLDMAST-IMPORT DATE',
ZASSET.ZIMPORTSESSION AS 'ZASSET-IMPORT SESSION',
ZADDASSETATTR.ZIMPORTSESSIONID AS 'ZADDASSETATTR-IMPORT SESSION ID',
DATETIME(ZADDASSETATTR.ZALTERNATEIMPORTIMAGEDATE + 978307200, 'UNIXEPOCH') AS 'ZADDASSETATTR-ALT IMPORT IMAGE DATE',
ZCLDMAST.ZIMPORTSESSIONID AS 'ZCLDMAST-IMPORT SESSION ID',
DATETIME(ZASSET.ZCLOUDBATCHPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'ZASSET-CLOUD BATCH PUBLISH DATE',
DATETIME(ZASSET.ZCLOUDSERVERPUBLISHDATE + 978307200, 'UNIXEPOCH') AS 'ZASSET-CLOUD SERVER PUBLISH DATE',
ZASSET.ZCLOUDDOWNLOADREQUESTS AS 'ZASSET-CLOUD DOWNLOAD REQUESTS',
ZASSET.ZCLOUDBATCHID AS 'ZASSET-CLOUD BATCH ID',
DATETIME(ZADDASSETATTR.ZLASTUPLOADATTEMPTDATE + 978307200, 'UNIXEPOCH') AS 'ZADDASSETATTR-LAST UPLOAD ATTEMPT DATE-SWY',
ZADDASSETATTR.ZUPLOADATTEMPTS AS 'ZADDASSETATTR-UPLOAD ATTEMPTS',
CASE ZASSET.ZLATITUDE
WHEN -180.0 THEN '-180.0'
ELSE ZASSET.ZLATITUDE
END AS 'ZASSET-LATITUDE',
ZEXTATTR.ZLATITUDE AS 'ZEXTATTR-LATITUDE',
CASE ZASSET.ZLONGITUDE
WHEN -180.0 THEN '-180.0'
ELSE ZASSET.ZLONGITUDE
END AS 'ZASSET-LONGITUDE',
ZEXTATTR.ZLONGITUDE AS 'ZEXTATTR-LONGITUDE',
CASE ZADDASSETATTR.ZGPSHORIZONTALACCURACY
WHEN -1.0 THEN '-1.0'
ELSE ZADDASSETATTR.ZGPSHORIZONTALACCURACY
END AS 'ZADDASSETATTR-GPS HORIZONTAL ACCURACY',
ZASSET.ZLOCATIONDATA AS 'ZASSET-LOCATION DATA/HEX',
ZADDASSETATTR.ZREVERSELOCATIONDATA AS 'ZADDASSETATTR-REVERSE LOCATION DATA/ORIG-ASSET/HEX NSKEYED PLIST',
CASE ZADDASSETATTR.ZSHIFTEDLOCATIONISVALID
WHEN 0 THEN '0-SHIFTED LOCATION NOT VALID-0'
WHEN 1 THEN '1-SHIFTED LOCATION VALID-1'
END AS 'ZADDASSETATTR-SHIFTED LOCATION VALID',
ZADDASSETATTR.ZSHIFTEDLOCATIONDATA AS 'ZADDASSETATTR-SHIFTED LOCATION DATA',
ZADDASSETATTR.ZLOCATIONHASH AS 'ZADDASSETATTR-LOCATION HASH',
CASE AAAZCLDMASTMEDDATA.Z_OPT
WHEN 1 THEN '1-STILLTESTING-CLOUD-1'
WHEN 2 THEN '2-STILLTESTING-THIS DEVICE-2'
WHEN 3 THEN '3-STILLTESTING-MUTED-3'
WHEN 4 THEN '4-STILLTESTING-UNKNOWN-4'
WHEN 5 THEN '5-STILLTESTING-UNKNOWN-5'
ELSE 'UNKNOWN-NEW-VALUE!: ' || AAAZCLDMASTMEDDATA.Z_OPT || ''
END AS 'AAAZCLDMASTMEDDATA-ZOPT',
ZADDASSETATTR.ZMEDIAMETADATATYPE AS 'ZADDASSETATTR-MEDIA METADATA TYPE',
AAAZCLDMASTMEDDATA.ZDATA AS 'AAAZCLDMASTMEDDATA-DATA/HEX',
CASE CMZCLDMASTMEDDATA.Z_OPT
WHEN 1 THEN '1-STILLTESTING-HAS_CLDMASTASSET-1'
WHEN 2 THEN '2-STILLTESTING-LOCAL_ASSET-2'
WHEN 3 THEN '3-STILLTESTING-MUTED-3'
WHEN 4 THEN '4-STILLTESTING-UNKNOWN-4'
WHEN 5 THEN '5-STILLTESTING-UNKNOWN-5'
ELSE 'UNKNOWN-NEW-VALUE!: ' || CMZCLDMASTMEDDATA.Z_OPT || ''
END AS 'CLDMASTERZCLDMASTMEDDATA-ZOPT',
ZCLDMAST.ZMEDIAMETADATATYPE AS 'ZCLDMAST-MEDIA METADATA TYPE',
CMZCLDMASTMEDDATA.ZDATA AS 'CMZCLDMASTMEDDATA-DATA/HEX',
CASE ZASSET.ZSEARCHINDEXREBUILDSTATE
WHEN 0 THEN '0-STILLTESTING-0'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZSEARCHINDEXREBUILDSTATE || ''
END AS 'ZASSET-SEARCH INDEX REBUILD STATE',
CASE ZASSET.ZORIENTATION
WHEN 1 THEN '1-VIDEO-DEFAULT/ADJUSTMENT/HORIZONTAL-CAMERA-(LEFT)-1'
WHEN 2 THEN '2-HORIZONTAL-CAMERA-(RIGHT)-2'
WHEN 3 THEN '3-HORIZONTAL-CAMERA-(RIGHT)-3'
WHEN 4 THEN '4-HORIZONTAL-CAMERA-(LEFT)-4'
WHEN 5 THEN '5-VERTICAL-CAMERA-(TOP)-5'
WHEN 6 THEN '6-VERTICAL-CAMERA-(TOP)-6'
WHEN 7 THEN '7-VERTICAL-CAMERA-(BOTTOM)-7'
WHEN 8 THEN '8-VERTICAL-CAMERA-(BOTTOM)-8'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZORIENTATION || ''
END AS 'ZASSET-ORIENTATION',
CASE ZADDASSETATTR.ZORIGINALORIENTATION
WHEN 1 THEN '1-VIDEO-DEFAULT/ADJUSTMENT/HORIZONTAL-CAMERA-(LEFT)-1'
WHEN 2 THEN '2-HORIZONTAL-CAMERA-(RIGHT)-2'
WHEN 3 THEN '3-HORIZONTAL-CAMERA-(RIGHT)-3'
WHEN 4 THEN '4-HORIZONTAL-CAMERA-(LEFT)-4'
WHEN 5 THEN '5-VERTICAL-CAMERA-(TOP)-5'
WHEN 6 THEN '6-VERTICAL-CAMERA-(TOP)-6'
WHEN 7 THEN '7-VERTICAL-CAMERA-(BOTTOM)-7'
WHEN 8 THEN '8-VERTICAL-CAMERA-(BOTTOM)-8'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZORIENTATION || ''
END AS 'ZADDASSETATTR-ORIGINAL ORIENTATION',
CASE ZASSET.ZKIND
WHEN 0 THEN '0-PHOTO-0'
WHEN 1 THEN '1-VIDEO-1'
END AS 'ZASSET-KIND',
CASE ZASSET.ZKINDSUBTYPE
WHEN 0 THEN '0-STILL-PHOTO-0'
WHEN 2 THEN '2-LIVE-PHOTO-2'
WHEN 10 THEN '10-SPRINGBOARD-SCREENSHOT-10'
WHEN 100 THEN '100-VIDEO-100'
WHEN 101 THEN '101-SLOW-MO-VIDEO-101'
WHEN 102 THEN '102-TIME-LAPSE-VIDEO-102'
WHEN 103 THEN '103-REPLAY_SCREEN_RECORDING-103'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZKINDSUBTYPE || ''
END AS 'ZASSET-KIND-SUB-TYPE',
CASE ZADDASSETATTR.ZCLOUDKINDSUBTYPE
WHEN 0 THEN '0-STILL-PHOTO-0'
WHEN 1 THEN '1-STILLTESTING'
WHEN 2 THEN '2-LIVE-PHOTO-2'
WHEN 3 THEN '3-SCREENSHOT-3'
WHEN 10 THEN '10-SPRINGBOARD-SCREENSHOT-10'
WHEN 100 THEN '100-VIDEO-100'
WHEN 101 THEN '101-SLOW-MO-VIDEO-101'
WHEN 102 THEN '102-TIME-LAPSE-VIDEO-102'
WHEN 103 THEN '103-REPLAY_SCREEN_RECORDING-103'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZADDASSETATTR.ZCLOUDKINDSUBTYPE || ''
END AS 'ZADDASSETATTR-CLOUD KIND SUB TYPE',
CASE ZASSET.ZPLAYBACKSTYLE
WHEN 1 THEN '1-IMAGE-1'
WHEN 2 THEN '2-IMAGE-ANIMATED-2'
WHEN 3 THEN '3-LIVE-PHOTO-3'
WHEN 4 THEN '4-VIDEO-4'
WHEN 5 THEN '5-VIDEO-LOOPING-5'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZPLAYBACKSTYLE || ''
END AS 'ZASSET-PLAYBACK STYLE',
ZASSET.ZPLAYBACKVARIATION AS 'ZASSET-PLAYBACK VARIATION',
ZASSET.ZDURATION AS 'ZASSET-VIDEO DURATION',
ZEXTATTR.ZDURATION AS 'ZEXTATTR-DURATION',
ZASSET.ZVIDEOCPDURATIONVALUE AS 'ZASSET-VIDEO CP DURATION',
ZADDASSETATTR.ZVIDEOCPDURATIONTIMESCALE AS 'ZADDASSETATTR-VIDEO CP DURATION TIME SCALE',
ZASSET.ZVIDEOCPVISIBILITYSTATE AS 'ZASSET-VIDEO CP VISIBILITY STATE',
ZADDASSETATTR.ZVIDEOCPDISPLAYVALUE AS 'ZADDASSETATTR-VIDEO CP DISPLAY VALUE',
ZADDASSETATTR.ZVIDEOCPDISPLAYTIMESCALE AS 'ZADDASSETATTR-VIDEO CP DISPLAY TIME SCALE',
ZINTRESOU.ZASSET AS 'ZINTRESOU-ASSET=ZASSET.ZPK',
ZINTRESOU.Z_PK AS 'ZINTRESOU-ZPK',
ZINTRESOU.Z_ENT AS 'ZINTRESOU-ZENT',
ZINTRESOU.Z_OPT AS 'ZINTRESOU-ZOPT',
CASE ZINTRESOU.ZDATASTORECLASSID
WHEN 0 THEN '0-LPL-ASSET_CPL-ASSET-0'
WHEN 1 THEN '1-STILLTESTING-1'
WHEN 2 THEN '2-PHOTO-CLOUD-SHARING-ASSET-2'
WHEN 3 THEN '3-SWY_SYNDICATION_ASSET-3'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZDATASTORECLASSID || ''
END AS 'ZINTRESOU-DATASTORE CLASS ID',
CASE ZASSET.ZCLOUDPLACEHOLDERKIND
WHEN 0 THEN '0-LOCAL&CLOUDMASTER ASSET-0'
WHEN 1 THEN '1-STILLTESTING-1'
WHEN 2 THEN '2-STILLTESTING-2'
WHEN 3 THEN '3-JPG-ASSET_ONLY_PHDA/THUMB/V2-3'
WHEN 4 THEN '4-LPL-JPG-ASSET_CPLASSET-OTHERTYPE-4'
WHEN 5 THEN '5-ASSET_SYNCED_CPL_2_DEVICE-5'
WHEN 6 THEN '6-STILLTESTING-6'
WHEN 7 THEN '7-LPL-POSTER-JPG-ASSET_CPLASSET-MP4-7'
WHEN 8 THEN '8-LPL-JPG_ASSET_CPLASSET-LIVEPHOTO-MOV-8'
WHEN 9 THEN '9-CPL_MP4_ASSET_SAVED_2_LPL-9'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZCLOUDPLACEHOLDERKIND || ''
END AS 'ZASSET-CLOUD PLACEHOLDER KIND',
CASE ZINTRESOU.ZLOCALAVAILABILITY
WHEN -1 THEN '(-1)-IR_ASSET_NOT_AVAIL_LOCALLY(-1)'
WHEN 1 THEN '1-IR_ASSET_AVAIL_LOCALLY-1'
WHEN -32768 THEN '(-32768)_IR_ASSET-SWY-LINKED_ASSET(-32768)'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZLOCALAVAILABILITY || ''
END AS 'ZINTRESOU-LOCAL AVAILABILITY',
CASE ZINTRESOU.ZLOCALAVAILABILITYTARGET
WHEN 0 THEN '0-STILLTESTING-0'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZLOCALAVAILABILITYTARGET || ''
END AS 'ZINTRESOU-LOCAL AVAILABILITY TARGET',
CASE ZINTRESOU.ZCLOUDLOCALSTATE
WHEN 0 THEN '0-IR_ASSET_NOT_SYNCED_NO_IR-CLDMASTDATECREATED-0'
WHEN 1 THEN '1-IR_ASSET_PENING-UPLOAD-1'
WHEN 2 THEN '2-IR_ASSET_PHOTO_CLOUD_SHARE_ASSET_ON-LOCAL-DEVICE-2'
WHEN 3 THEN '3-IR_ASSET_SYNCED_ICLOUD-3'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZCLOUDLOCALSTATE || ''
END AS 'ZINTRESOU-CLOUD LOCAL STATE',
CASE ZINTRESOU.ZREMOTEAVAILABILITY
WHEN 0 THEN '0-IR_ASSET-NOT-AVAIL-REMOTELY-0'
WHEN 1 THEN '1-IR_ASSET_AVAIL-REMOTELY-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZREMOTEAVAILABILITY || ''
END AS 'ZINTRESOU-REMOTE AVAILABILITY',
CASE ZINTRESOU.ZREMOTEAVAILABILITYTARGET
WHEN 0 THEN '0-STILLTESTING-0'
WHEN 1 THEN '1-STILLTESTING-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZREMOTEAVAILABILITYTARGET || ''
END AS 'ZINTRESOU-REMOTE AVAILABILITY TARGET',
ZINTRESOU.ZTRANSIENTCLOUDMASTER AS 'ZINTRESOU-TRANSIENT CLOUD MASTER',
ZINTRESOU.ZSIDECARINDEX AS 'ZINTRESOU-SIDE CAR INDEX',
ZINTRESOU.ZFILEID AS 'ZINTRESOU- FILE ID',
CASE ZINTRESOU.ZVERSION
WHEN 0 THEN '0-IR_ASSET_STANDARD-0'
WHEN 1 THEN '1-STILLTESTING-1'
WHEN 2 THEN '2-IR_ASSET_ADJUSTMENTS-MUTATION-2'
WHEN 3 THEN '3-IR_ASSET_NO_IR-CLDMASTDATECREATED-3'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZVERSION || ''
END AS 'ZINTRESOU-VERSION',
ZADDASSETATTR.ZORIGINALFILESIZE AS 'ZADDASSETATTR- ORIGINAL-FILE-SIZE',
CASE ZINTRESOU.ZRESOURCETYPE
WHEN 0 THEN '0-PHOTO-0'
WHEN 1 THEN '1-VIDEO-1'
WHEN 3 THEN '3-LIVE-PHOTO-3'
WHEN 5 THEN '5-ADJUSTEMENT-DATA-5'
WHEN 6 THEN '6-SCREENSHOT-6'
WHEN 9 THEN '9-ALTERNATEPHOTO-3RDPARTYAPP-STILLTESTING-9'
WHEN 13 THEN '13-MOVIE-13'
WHEN 14 THEN '14-WALLPAPER-14'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZRESOURCETYPE || ''
END AS 'ZINTRESOU-RESOURCE TYPE',
ZINTRESOU.ZDATASTOREKEYDATA AS 'ZINTRESOU-DATASTOREKEYDATA/HEX',
CASE ZINTRESOU.ZDATASTORESUBTYPE
WHEN 0 THEN '0-NO CLOUD INTER RESOURCE-0'
WHEN 1 THEN '1-MAIN-ASSET-ORIG-SIZE-1'
WHEN 2 THEN '2-PHOTO-WITH-ADJUSTMENTS-2'
WHEN 3 THEN '3-JPG-LARGE-THUMB-3'
WHEN 4 THEN '4-JPG-MED-THUMB-4'
WHEN 5 THEN '5-JPG-SMALL-THUMB-5'
WHEN 6 THEN '6-VIDEO-MED-DATA-6'
WHEN 7 THEN '7-VIDEO-SMALL-DATA-7'
WHEN 8 THEN '8-MP4-CLOUD-SHARE-8'
WHEN 9 THEN '9-STILLTESTING'
WHEN 10 THEN '10-3RDPARTYAPP_THUMB-STILLTESTING-10'
WHEN 11 THEN '11-STILLTESTING'
WHEN 12 THEN '12-STILLTESTING'
WHEN 13 THEN '13-PNG-OPTIMIZED_CPLASSET-13'
WHEN 14 THEN '14-WALLPAPER-14'
WHEN 15 THEN '15-HAS-MARKUP-AND-ADJUSTMENTS-15'
WHEN 16 THEN '16-VIDEO-WITH-ADJUSTMENTS-16'
WHEN 17 THEN '17-RAW_PHOTO-17_RT'
WHEN 18 THEN '18-LIVE-PHOTO-VIDEO_OPTIMIZED_CPLASSET-18'
WHEN 19 THEN '19-LIVE-PHOTO-WITH-ADJUSTMENTS-19'
WHEN 20 THEN '20-STILLTESTING'
WHEN 21 THEN '21-MOV-OPTIMIZED_HEVC-4K_VIDEO-21'
WHEN 22 THEN '22-ADJUST-MUTATION_AAE_ASSET-22'
WHEN 23 THEN '23-STILLTESTING'
WHEN 24 THEN '24-STILLTESTING'
WHEN 25 THEN '25-STILLTESTING'
WHEN 26 THEN '26-MOV-OPTIMIZED_CPLASSET-26'
WHEN 27 THEN '27-STILLTESTING'
WHEN 28 THEN '28-MOV-MED-HDR-DATA-28'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZDATASTORESUBTYPE || ''
END AS 'ZINTRESOU-DATASTORE SUB-TYPE',
CASE ZINTRESOU.ZCLOUDSOURCETYPE
WHEN 0 THEN '0-NA-0'
WHEN 1 THEN '1-MAIN-ASSET-ORIG-SIZE-1'
WHEN 2 THEN '2-PHOTO-WITH-ADJUSTMENTS-2'
WHEN 3 THEN '3-JPG-LARGE-THUMB-3'
WHEN 4 THEN '4-JPG-MED-THUMB-4'
WHEN 5 THEN '5-JPG-SMALL-THUMB-5'
WHEN 6 THEN '6-VIDEO-MED-DATA-6'
WHEN 7 THEN '7-VIDEO-SMALL-DATA-7'
WHEN 8 THEN '8-MP4-CLOUD-SHARE-8'
WHEN 9 THEN '9-STILLTESTING'
WHEN 10 THEN '10-3RDPARTYAPP_THUMB-STILLTESTING-10'
WHEN 11 THEN '11-STILLTESTING'
WHEN 12 THEN '12-STILLTESTING'
WHEN 13 THEN '13-PNG-OPTIMIZED_CPLASSET-13'
WHEN 14 THEN '14-WALLPAPER-14'
WHEN 15 THEN '15-HAS-MARKUP-AND-ADJUSTMENTS-15'
WHEN 16 THEN '16-VIDEO-WITH-ADJUSTMENTS-16'
WHEN 17 THEN '17-RAW_PHOTO-17_RT'
WHEN 18 THEN '18-LIVE-PHOTO-VIDEO_OPTIMIZED_CPLASSET-18'
WHEN 19 THEN '19-LIVE-PHOTO-WITH-ADJUSTMENTS-19'
WHEN 20 THEN '20-STILLTESTING'
WHEN 21 THEN '21-MOV-OPTIMIZED_HEVC-4K_VIDEO-21'
WHEN 22 THEN '22-ADJUST-MUTATION_AAE_ASSET-22'
WHEN 23 THEN '23-STILLTESTING'
WHEN 24 THEN '24-STILLTESTING'
WHEN 25 THEN '25-STILLTESTING'
WHEN 26 THEN '26-MOV-OPTIMIZED_CPLASSET-26'
WHEN 27 THEN '27-STILLTESTING'
WHEN 28 THEN '28-MOV-MED-HDR-DATA-28'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZCLOUDSOURCETYPE || ''
END AS 'ZINTRESOU-CLOUD SOURCE TYPE',
ZINTRESOU.ZDATALENGTH AS 'ZINTRESOU-DATA LENGTH',
CASE ZINTRESOU.ZRECIPEID
WHEN 0 THEN '0-ORIGFILESIZE_MATCH_DATALENGTH_OR_OPTIMIZED-0'
WHEN 65737 THEN '65737-FULL-JPG_ORIG-PRORAW_DNG-65737'
WHEN 65739 THEN '65739-JPG_LARGE_THUMB-65739'
WHEN 65741 THEN '65741-VARIOUS_ASSET_TYPES-OR-THUMBS-65741'
WHEN 65743 THEN '65743-RESOUTYPE-PHOTO_5003-OR-5005-JPG_THUMB-65743'
WHEN 65749 THEN '65749-LOCALVIDEOKEYFRAME-JPG_THUMB-65749'
WHEN 65938 THEN '65938-FULLSIZERENDER-PHOTO-OR-PLIST-65938'
WHEN 131072 THEN '131072-FULLSIZERENDER-VIDEO-OR-PLIST-131072'
WHEN 131077 THEN '131077-MEDIUM-MOV_HEVC-4K-131077'
WHEN 131079 THEN '131079-MEDIUM-MP4_ADJ-MUTATION_ASSET-131079'
WHEN 131081 THEN '131081-RESOUTYPE-VIDEO_5003-OR-5005-JPG_THUMB-131081'
WHEN 131272 THEN '131272-FULLSIZERENDER-VIDEO_LIVEPHOTO_ADJ-MUTATION-131272'
WHEN 131275 THEN '131275-MEDIUM-MOV_LIVEPHOTO-131275'
WHEN 131277 THEN '131277-NO-IR-ASSET_LIVEPHOTO-ICLOUD_SYNC_ASSET-131277'
WHEN 131475 THEN '131475-MEDIUM-HDR-MOV-131475'
WHEN 327683 THEN '327683-JPG-THUMB_FOR_3RDPARTY-STILLTESTING-327683'
WHEN 327687 THEN '627687-WALLPAPERCOMPUTERESOURCE-627687'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZRECIPEID || ''
END AS 'ZINTRESOU-RECIPE ID',
CASE ZINTRESOU.ZCLOUDLASTPREFETCHDATE
WHEN 0 THEN '0-NA-0'
ELSE DATETIME(ZINTRESOU.ZCLOUDLASTPREFETCHDATE + 978307200, 'UNIXEPOCH')
END AS 'ZINTRESOU-CLOUD LAST PREFETCH DATE',
ZINTRESOU.ZCLOUDPREFETCHCOUNT AS 'ZINTRESOU-CLOUD PREFETCH COUNT',
DATETIME(ZINTRESOU.ZCLOUDLASTONDEMANDDOWNLOADDATE + 978307200, 'UNIXEPOCH') AS 'ZINTRESOU- CLOUD-LAST-ONDEMAND DOWNLOAD-DATE',
CASE ZINTRESOU.ZUTICONFORMANCEHINT
WHEN 0 THEN '0-NA/DOESNT_CONFORM-0'
WHEN 1 THEN '1-UTTYPEIMAGE-1'
WHEN 2 THEN '2-UTTYPEPRORAWPHOTO-2'
WHEN 3 THEN '3-UTTYPEMOVIE-3'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZUTICONFORMANCEHINT || ''
END AS 'ZINTRESOU-UNIFORMTYPEID_UTI_CONFORMANCE_HINT',
CASE ZINTRESOU.ZCOMPACTUTI
WHEN 1 THEN '1-JPEG/THM-1'
WHEN 3 THEN '3-HEIC-3'
WHEN 6 THEN '6-PNG-6'
WHEN 7 THEN '7-STILLTESTING'
WHEN 9 THEN '9-DNG-9'
WHEN 23 THEN '23-JPEG/HEIC/QUICKTIME-MOV-23'
WHEN 24 THEN '24-MPEG4-24'
WHEN 36 THEN '36-WALLPAPER-36'
WHEN 37 THEN '37-ADJ/MUTATION_DATA-37'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZCOMPACTUTI || ''
END AS 'ZINTRESOU-COMPACT-UTI',
ZASSET.ZUNIFORMTYPEIDENTIFIER AS 'ZASSET-UNIFORM TYPE ID',
ZASSET.ZORIGINALCOLORSPACE AS 'ZASSET-ORIGINAL COLOR SPACE',
ZCLDMAST.ZUNIFORMTYPEIDENTIFIER AS 'ZCLDMAST-UNIFORM_TYPE_ID',
CASE ZCLDMAST.ZFULLSIZEJPEGSOURCE
WHEN 0 THEN '0-CLDMAST-JPEG-SOURCE-VIDEO STILL-TESTING-0'
WHEN 1 THEN '1-CLDMAST-JPEG-SOURCE-OTHER- STILL-TESTING-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZCLDMAST.ZFULLSIZEJPEGSOURCE || ''
END AS 'ZCLDMAST-FULL SIZE JPEG SOURCE',
ZASSET.ZHDRGAIN AS 'ZASSET-HDR GAIN',
CASE ZASSET.ZHDRTYPE
WHEN 0 THEN '0-NO-HDR-0'
WHEN 3 THEN '3-HDR_PHOTO-3_RT'
WHEN 4 THEN '4-NON-HDR_VERSION-4_RT'
WHEN 5 THEN '5-HEVC_MOVIE-5'
WHEN 6 THEN '6-PANORAMA-6_RT'
WHEN 10 THEN '10-HDR-GAIN-10'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZHDRTYPE || ''
END AS 'ZASSET-ZHDR_TYPE',
ZEXTATTR.ZCODEC AS 'ZEXTATTR-CODEC',
ZINTRESOU.ZCODECFOURCHARCODENAME AS 'ZINTRESOU-CODEC FOUR CHAR CODE NAME',
ZCLDMAST.ZCODECNAME AS 'ZCLDMAST-CODEC NAME',
ZCLDMAST.ZVIDEOFRAMERATE AS 'ZCLDMAST-VIDEO FRAME RATE',
ZCLDMAST.ZPLACEHOLDERSTATE AS 'ZCLDMAST-PLACEHOLDER STATE',
CASE ZASSET.ZDEPTHTYPE
WHEN 0 THEN '0-NOT_PORTRAIT-0_RT'
ELSE 'PORTRAIT: ' || ZASSET.ZDEPTHTYPE || ''
END AS 'ZASSET-DEPTH_TYPE',
ZASSET.ZAVALANCHEUUID AS 'ZASSET-AVALANCHE UUID',
CASE ZASSET.ZAVALANCHEPICKTYPE
WHEN 0 THEN '0-NA/SINGLE_ASSET_BURST_UUID-0_RT'
WHEN 2 THEN '2-BURST_ASSET_NOT_SELECTED-2_RT'
WHEN 4 THEN '4-BURST_ASSET_PHOTOSAPP_PICKED_KEYIMAGE-4_RT'
WHEN 8 THEN '8-BURST_ASSET_SELECTED_FOR_LPL-8_RT'
WHEN 16 THEN '16-TOP_BURST_ASSET_INSTACK_KEYIMAGE-16_RT'
WHEN 32 THEN '32-STILLTESTING-32_RT'
WHEN 52 THEN '52-BURST_ASSET_VISIBLE_LPL-52'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZAVALANCHEPICKTYPE || ''
END AS 'ZASSET-AVALANCHE_PICK_TYPE/BURSTASSET',
CASE ZADDASSETATTR.ZCLOUDAVALANCHEPICKTYPE
WHEN 0 THEN '0-NA/SINGLE_ASSET_BURST_UUID-0_RT'
WHEN 2 THEN '2-BURST_ASSET_NOT_SELECTED-2_RT'
WHEN 4 THEN '4-BURST_ASSET_PHOTOSAPP_PICKED_KEYIMAGE-4_RT'
WHEN 8 THEN '8-BURST_ASSET_SELECTED_FOR_LPL-8_RT'
WHEN 16 THEN '16-TOP_BURST_ASSET_INSTACK_KEYIMAGE-16_RT'
WHEN 32 THEN '32-STILLTESTING-32_RT'
WHEN 52 THEN '52-BURST_ASSET_VISIBLE_LPL-52'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZADDASSETATTR.ZCLOUDAVALANCHEPICKTYPE || ''
END AS 'ZADDASSETATTR-CLOUD_AVALANCHE_PICK_TYPE/BURSTASSET',
CASE ZADDASSETATTR.ZCLOUDRECOVERYSTATE
WHEN 0 THEN '0-STILLTESTING'
WHEN 1 THEN '1-STILLTESTING'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZADDASSETATTR.ZCLOUDRECOVERYSTATE || ''
END AS 'ZADDASSETATTR-CLOUD RECOVERY STATE',
ZADDASSETATTR.ZCLOUDSTATERECOVERYATTEMPTSCOUNT AS 'ZADDASSETATTR-CLOUD STATE RECOVERY ATTEMPTS COUNT',
ZASSET.ZDEFERREDPROCESSINGNEEDED AS 'ZASSET-DEFERRED PROCESSING NEEDED',
ZASSET.ZVIDEODEFERREDPROCESSINGNEEDED AS 'ZASSET-VIDEO DEFERRED PROCESSING NEEDED',
ZADDASSETATTR.ZDEFERREDPHOTOIDENTIFIER AS 'ZADDASSETATTR-DEFERRED PHOTO IDENTIFIER',
ZADDASSETATTR.ZDEFERREDPROCESSINGCANDIDATEOPTIONS AS 'ZADDASSETATTR-DEFERRED PROCESSING CANDIDATE OPTIONS',
CASE ZASSET.ZHASADJUSTMENTS
WHEN 0 THEN '0-NO-ADJUSTMENTS-0'
WHEN 1 THEN '1-YES-ADJUSTMENTS-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZHASADJUSTMENTS || ''
END AS 'ZASSET-HAS ADJUSTMENTS/CAMERA-EFFECTS-FILTERS',
ZUNMADJ.ZASSETATTRIBUTES AS 'ZUNMADJ-ASSET ATTRIBUTES=ZADDASSETATTR.ZPK',
ZADDASSETATTR.ZUNMANAGEDADJUSTMENT AS 'ZADDASSETATTR-UNMANADJUST KEY=ZUNMADJ.ZPK',
ZUNMADJ.Z_PK AS 'ZUNMADJ-ZPK=ZADDASSETATTR.ZUNMANADJ KEY',
ZUNMADJ.ZUUID AS 'ZUNMADJ-UUID',
DATETIME(ZASSET.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'ZASSET-ADJUSTMENT TIMESTAMP',
DATETIME(ZUNMADJ.ZADJUSTMENTTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'ZUNMADJ-ADJUSTMENT TIMESTAMP',
ZADDASSETATTR.ZEDITORBUNDLEID AS 'ZADDASSETATTR-EDITOR BUNDLE ID',
ZUNMADJ.ZEDITORLOCALIZEDNAME AS 'ZUNMADJ-EDITOR LOCALIZED NAME',
ZUNMADJ.ZADJUSTMENTFORMATIDENTIFIER AS 'ZUNMADJ-ADJUSTMENT FORMAT ID',
ZADDASSETATTR.ZMONTAGE AS 'ZADDASSETATTR-MONTAGE',
CASE ZUNMADJ.ZADJUSTMENTRENDERTYPES
WHEN 0 THEN '0-STANDARD OR PORTRAIT WITH ERROS-0'
WHEN 1 THEN '1-STILLTESTING'
WHEN 2 THEN '2-PORTRAIT-2'
WHEN 3 THEN '3-STILLTESTING'
WHEN 4 THEN '4-STILLTESTING'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZUNMADJ.ZADJUSTMENTRENDERTYPES || ''
END AS 'ZUNMADJ-ADJUSTMENT RENDER TYPES',
CASE ZUNMADJ.ZADJUSTMENTFORMATVERSION
WHEN 1.0 THEN '1.0-MARKUP-1.0'
WHEN 1.1 THEN '1.1-SLOW-MO-1.1'
WHEN 1.2 THEN '1.2-STILLTESTING'
WHEN 1.3 THEN '1.3-STILLTESTING'
WHEN 1.4 THEN '1.4-FILTER-1.4'
WHEN 1.5 THEN '1.5-ADJUST-1.5'
WHEN 1.6 THEN '1.6-VIDEO-TRIM-1.6'
WHEN 1.7 THEN '1.7-STILLTESTING'
WHEN 1.8 THEN '1.8-STILLTESTING'
WHEN 1.9 THEN '1.9-STILLTESTING'
WHEN 2.0 THEN '2.0-SCREENSHOTSERVICES-2.0'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZUNMADJ.ZADJUSTMENTFORMATVERSION || ''
END AS 'ZUNMADJ-ADJUSTMENT FORMAT VERSION',
ZUNMADJ.ZADJUSTMENTBASEIMAGEFORMAT AS 'ZUNMADJ-ADJUSTMENT BASE IMAGE FORMAT',
CASE ZASSET.ZFAVORITE
WHEN 0 THEN '0-ASSET NOT FAVORITE-0'
WHEN 1 THEN '1-ASSET FAVORITE-1'
END AS 'ZASSET-FAVORITE',
CASE ZASSET.ZHIDDEN
WHEN 0 THEN '0-ASSET NOT HIDDEN-0'
WHEN 1 THEN '1-ASSET HIDDEN-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZHIDDEN || ''
END AS 'ZASSET-HIDDEN',
CASE ZASSET.ZTRASHEDSTATE
WHEN 0 THEN '0-ASSET NOT IN TRASH/RECENTLY DELETED-0'
WHEN 1 THEN '1-ASSET IN TRASH/RECENTLY DELETED-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZTRASHEDSTATE || ''
END AS 'ZASSET-TRASHED STATE/LOCALASSETRECENTLYDELETED',
DATETIME(ZASSET.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ZASSET-TRASHED DATE',
CASE ZASSET.ZDELETEREASON
WHEN 1 THEN '1-STILLTESTING DELETE-REASON-1'
WHEN 2 THEN '2-STILLTESTING DELETE-REASON-2'
WHEN 3 THEN '3-STILLTESTING DELETE-REASON-3'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZDELETEREASON || ''
END AS 'ZASSET-DELETE-REASON',
CASE ZASSET.ZTRASHEDBYPARTICIPANT
WHEN 1 THEN '1-ASSET TRASHED/RECENTLY DELETED BY PARTICIPANT-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZTRASHEDBYPARTICIPANT || ''
END AS 'ZASSET-TRASHED BY PARTICIPANT',
CASE ZINTRESOU.ZTRASHEDSTATE
WHEN 0 THEN '0-ZINTRESOU-NOT IN TRASH/RECENTLY DELETED-0'
WHEN 1 THEN '1-ZINTRESOU-IN TRASH/RECENTLY DELETED-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZTRASHEDSTATE || ''
END AS 'ZINTRESOU-TRASH STATE',
DATETIME(ZINTRESOU.ZTRASHEDDATE + 978307200, 'UNIXEPOCH') AS 'ZINTRESOU-TRASHED DATE',
CASE ZASSET.ZCLOUDDELETESTATE
WHEN 0 THEN '0-CLOUD ASSET NOT DELETED-0'
WHEN 1 THEN '1-CLOUD ASSET DELETED-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZCLOUDDELETESTATE || ''
END AS 'ZASSET-CLOUD DELETE STATE',
CASE ZINTRESOU.ZCLOUDDELETESTATE
WHEN 0 THEN '0-CLOUD INTRESOU NOT DELETED-0'
WHEN 1 THEN '1-CLOUD INTRESOU DELETED-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZCLOUDDELETESTATE || ''
END AS 'ZINTRESOU-CLOUD DELETE STATE',
CASE ZADDASSETATTR.ZPTPTRASHEDSTATE
WHEN 0 THEN '0-PTP NOT IN TRASH-0'
WHEN 1 THEN '1-PTP IN TRASH-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZADDASSETATTR.ZPTPTRASHEDSTATE || ''
END AS 'ZADDASSETATTR-PTP TRASHED STATE',
CASE ZINTRESOU.ZPTPTRASHEDSTATE
WHEN 0 THEN '0-PTP INTRESOU NOT IN TRASH-0'
WHEN 1 THEN '1-PTP INTRESOU IN TRASH-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZINTRESOU.ZPTPTRASHEDSTATE || ''
END AS 'ZINTRESOU-PTP TRASHED STATE',
ZINTRESOU.ZCLOUDDELETEASSETUUIDWITHRESOURCETYPE AS 'ZINTRESOU-CLOUD DELETE ASSET UUID WITH RESOURCE TYPE',
DATETIME(ZMEDANLYASTATTR.ZMEDIAANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'ZMEDANLYASTATTR-MEDIA ANALYSIS TIMESTAMP',
DATETIME(ZASSET.ZANALYSISSTATEMODIFICATIONDATE + 978307200, 'UNIXEPOCH') AS 'ZASSET-ANALYSIS STATE MODIFICAION DATE',
ZADDASSETATTR.ZPENDINGVIEWCOUNT AS 'ZADDASSETATTR-PENDING VIEW COUNT',
ZADDASSETATTR.ZVIEWCOUNT AS 'ZADDASSETATTR-VIEW COUNT',
ZADDASSETATTR.ZPENDINGPLAYCOUNT AS 'ZADDASSETATTR-PENDING PLAY COUNT',
ZADDASSETATTR.ZPLAYCOUNT AS 'ZADDASSETATTR-PLAY COUNT',
ZADDASSETATTR.ZPENDINGSHARECOUNT AS 'ZADDASSETATTR-PENDING SHARE COUNT',
ZADDASSETATTR.ZSHARECOUNT AS 'ZADDASSETATTR-SHARE COUNT',
DATETIME(ZASSET.ZLASTSHAREDDATE + 978307200, 'UNIXEPOCH') AS 'ZASSET-LAST SHARED DATE',
ZADDASSETATTR.ZSHAREORIGINATOR AS 'ZADDASSETATTR-SHARE ORIGINATOR',
CASE ZASSET.ZSYNDICATIONSTATE
WHEN 0 THEN '0-LOCAL-PL_ASSET_SYNDICATION_STATE_NA-0'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZSYNDICATIONSTATE || ''
END AS 'ZASSET-SYNDICATION STATE-LPL',
ZADDASSETATTR.ZSYNDICATIONHISTORY AS 'ZADDASSETATTR-SYNDICATION HISTORY',
ZMEDANLYASTATTR.ZSYNDICATIONPROCESSINGVERSION AS 'ZMEDANLYASTATTR-SYNDICATION PROCESSING VERSION',
CASE ZMEDANLYASTATTR.ZSYNDICATIONPROCESSINGVALUE
WHEN 0 THEN '0-NA-0'
WHEN 1 THEN '1-STILLTESTING_WIDE-CAMERA_JPG-1'
WHEN 2 THEN '2-STILLTESTING_TELEPHOTO_CAMEAR_LENS-2'
WHEN 4 THEN '4-STILLTESTING_SWY_ASSET_ORIGASSETIMPORT_SYSTEMPACKAGEAPP-4'
WHEN 16 THEN '16-STILLTESTING-16'
WHEN 1024 THEN '1024-STILLTESTING_SWY_ASSET_ORIGASSETIMPORT_NATIVECAMERA-1024'
WHEN 2048 THEN '2048-STILLTESTING-2048'
WHEN 4096 THEN '4096-STILLTESTING_SWY_ASSET_MANUALLY_SAVED-4096'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZMEDANLYASTATTR.ZSYNDICATIONPROCESSINGVALUE || ''
END AS 'ZMEDANLYASTATTR-SYNDICATION PROCESSING VALUE',
CASE ZADDASSETATTR.ZALLOWEDFORANALYSIS
WHEN 0 THEN '0-ASSET NOT ALLOWED FOR ANALYSIS-0'
WHEN 1 THEN '1-ASSET ALLOWED FOR ANALYSIS-1'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZADDASSETATTR.ZALLOWEDFORANALYSIS || ''
END AS 'ZADDASSETATTR-ALLOWED FOR ANALYSIS',
ZADDASSETATTR.ZSCENEANALYSISVERSION AS 'ZADDASSETATTR-SCENE ANALYSIS VERSION',
CASE ZADDASSETATTR.ZSCENEANALYSISISFROMPREVIEW
WHEN 0 THEN '0-NO-0'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZADDASSETATTR.ZSCENEANALYSISISFROMPREVIEW || ''
END AS 'ZADDASSETATTR-SCENE ANALYSIS IS FROM PREVIEW',
DATETIME(ZADDASSETATTR.ZSCENEANALYSISTIMESTAMP + 978307200, 'UNIXEPOCH') AS 'ZADDASSETATTR-SCENE ANALYSIS TIMESTAMP',
CASE ZASSET.ZDUPLICATEASSETVISIBILITYSTATE
WHEN 0 THEN 'NO-DUPLICATES-0'
WHEN 1 THEN 'HAS DUPLICATE-1'
WHEN 2 THEN 'IS A DUPLICATE-2'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZASSET.ZDUPLICATEASSETVISIBILITYSTATE || ''
END AS 'ZASSET-DUPLICATION ASSET VISIBILITY STATE',
CASE ZADDASSETATTR.ZDESTINATIONASSETCOPYSTATE
WHEN 0 THEN '0-NO COPY-0'
WHEN 1 THEN '1-HAS A COPY-1'
WHEN 2 THEN '2-HAS A COPY-2'
ELSE 'UNKNOWN-NEW-VALUE!: ' || ZADDASSETATTR.ZDESTINATIONASSETCOPYSTATE || ''
END AS 'ZADDASSETATTR-DESTINATION ASSET COPY STATE',
ZSCENEP.ZDATA AS 'ZSCENEP-DATA/HEX NSKEYED PLIST',
ZSCENEP.ZDUPLICATEMATCHINGDATA AS 'ZSCENEP-DUPLICATE MATCHING DATA/HEX NSKEYED PLIST',
ZSCENEP.ZDUPLICATEMATCHINGALTERNATEDATA AS 'ZSCENEP-DUPLICATE MATCHING ALTERNAT DATA/HEX NSKEYED PLIST',
ZADDASSETATTR.ZSOURCEASSETFORDUPLICATIONSCOPEIDENTIFIER AS 'ZADDASSETATTR-SOURCE ASSET FOR DUPLICATION SCOPE ID',
ZCLDMAST.ZSOURCEMASTERFORDUPLICATIONSCOPEIDENTIFIER AS 'ZCLDMAST-SOURCE MASTER FOR DUPLICATION SCOPE ID',
ZADDASSETATTR.ZSOURCEASSETFORDUPLICATIONIDENTIFIER AS 'ZADDASSETATTR-SOURCE ASSET FOR DUPLICATION ID',
ZCLDMAST.ZSOURCEMASTERFORDUPLICATIONIDENTIFIER AS 'ZCLDMAST-SOURCE MASTER FOR DUPLICATION ID'
FROM ZASSET ZASSET
LEFT JOIN ZADDITIONALASSETATTRIBUTES ZADDASSETATTR ON ZADDASSETATTR.Z_PK = ZASSET.ZADDITIONALATTRIBUTES
LEFT JOIN ZEXTENDEDATTRIBUTES ZEXTATTR ON ZEXTATTR.Z_PK = ZASSET.ZEXTENDEDATTRIBUTES
LEFT JOIN ZINTERNALRESOURCE ZINTRESOU ON ZINTRESOU.ZASSET = ZASSET.Z_PK
LEFT JOIN ZSCENEPRINT ZSCENEP ON ZSCENEP.Z_PK = ZADDASSETATTR.ZSCENEPRINT
LEFT JOIN Z_28ASSETS Z28ASSETS ON Z28ASSETS.Z_3ASSETS = ZASSET.Z_PK
LEFT JOIN ZGENERICALBUM ZGENALBUM ON ZGENALBUM.Z_PK = Z28ASSETS.Z_28ALBUMS
LEFT JOIN ZUNMANAGEDADJUSTMENT ZUNMADJ ON ZADDASSETATTR.ZUNMANAGEDADJUSTMENT = ZUNMADJ.Z_PK
LEFT JOIN Z_27ALBUMLISTS Z27ALBUMLISTS ON Z27ALBUMLISTS.Z_27ALBUMS = ZGENALBUM.Z_PK
LEFT JOIN ZALBUMLIST ZALBUMLIST ON ZALBUMLIST.Z_PK = Z27ALBUMLISTS.Z_2ALBUMLISTS
LEFT JOIN ZGENERICALBUM PARENTZGENALBUM ON PARENTZGENALBUM.Z_PK = ZGENALBUM.ZPARENTFOLDER
LEFT JOIN ZCLOUDMASTER ZCLDMAST ON ZASSET.ZMASTER = ZCLDMAST.Z_PK
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA AAAZCLDMASTMEDDATA ON AAAZCLDMASTMEDDATA.Z_PK = ZADDASSETATTR.ZMEDIAMETADATA
LEFT JOIN ZCLOUDMASTERMEDIAMETADATA CMZCLDMASTMEDDATA ON CMZCLDMASTMEDDATA.Z_PK = ZCLDMAST.ZMEDIAMETADATA
LEFT JOIN ZMEDIAANALYSISASSETATTRIBUTES ZMEDANLYASTATTR ON ZASSET.ZMEDIAANALYSISATTRIBUTES = ZMEDANLYASTATTR.Z_PK
LEFT JOIN ZSHARE ZSHARE ON ZSHARE.Z_PK = ZASSET.ZMOMENTSHARE
ORDER BY ZASSET.ZADDEDDATE
使用 Navicat 连接 /var/mobile/Media/PhotoData/Photos.sqlite 数据库, 并执行上述 sql 查询:

将查询结果存储为新的表 Basic, 以便后续的分析.
在 Basic 表中过滤 ZASSET-FILENAME 字段包含 GIF 的数据, 可以找到题目中提及到的 2 个 GIF 文件. 在其 ZCLDMAST-IMPORTED BY BUNDLE ID 字段可见存储该文件的应用的包名为 com.Yooshr.Infltr, 在其 ZCLDMAST-IMPORTED BY DISPLAY NAME 字段可见存储该文件的应用的显示名称为 Infltr:

或者在"图片"的分析结果中查看应用分类:

31 曾经以空投(AirDrop)方式成功传送了文件到另外一个装置, 以下哪一个陈述是正确的¶
选项
- A.传送了一个图片文件
- B.传送了两个图片文件
- C.传送了一个图片文件及一个文件
- D.传送了一个图片文件及两个文件
答案
C
在火眼的搜索标签页中创建新的全局搜索任务, 搜索本题及之后几题中出现的 APP 的包名:

这些包名从上到下分别是:
- AirDrop 前端
- AirDrop 后端
- 照片
- 文档
在搜索结果中看到以下命中:

一共有 2 条命中(GBK 编码和 UTF8 编码各命中 2 次), 都在 /var/mobile/Library/CoreDuet/People/interactionC.db 数据库中, 导出并查看命中的位置, 是 ZINTERACTIONS 表中的 ZTARGETBUNDLEID 字段, 筛选之后可以看到 2 条传输记录:

根据 ZDIRECTION 字段值及 ZSENDER 字段值, 判断 ZDIRECTION 字段值为 1 代表发送, 为 0 代表接收.
但是在检材中没能在其他位置搜索到这 2 个 UUID, 只能根据使用的应用来推断 2 条传输分别传输了文件和图片.
32 原生 APP "相片"中, 有一个图片文件曾经通过空投"AirDrop"方式成功传送, 指出这个图片文件的文件全名¶
答案
IMG_0083.HEIC
在第 30 题的筛选结果中, 查找分享次数大于 0 的文件, 只有 1 个:

33 承上题, 请写出这个图片文件的开始传送的日期及时间¶
答案
2025-04-17 09:10:03
见上题图. 这个 SQL 语句查询得到的时间是 UTC 时间, 需要转换到 UTC+8.
34 请指出哪一个多媒体文件同时储存在 APP "文件"(套件识别码: com.apple.DocumentsApp)及 APP "照片"(套件识别码: com.apple.mobileslideshow)中¶
答案
IMG_0010.MOV
"文件" APP 的存储目录是 /var/mobile/Applications/group.com.apple.FileProvider.LocalStorage/File Provider Storage/:

"照片" APP 的存储目录是 /var/mobile/Media/DCIM/100APPLE/:

可以看到 2 个同名文件存在于这两个目录中, 分别是 IMG_0008.HEIC 和 IMG_0010.MOV. 将这些文件导出并计算哈希, 发现两个目录中的 IMG_0008.HEIC 并不相同, 而 IMG_0010.MOV 是完全相同的:

35 请指出在 APP "照片"中的图片文件"IMG_0079.JPG"是由哪一个 APP 拍摄¶
答案
Discreet
接第 30 题. 过滤 ZASSET-FILENAME 字段为 IMG_0079.JPG 的记录:

或者在火眼中:

36 承上题, 已知该图片文件是由上述 APP 所拍摄, 并其后储存在 APP "照片"成"IMG_0079.JPG", 请问该图片的原文件名称¶
答案
DiscreetCameraApp_1744790959352.png
在应用的数据目录中可以看到源文件, 可以通过火眼的"其他应用"功能快速找到该文件:

37 承上题, 请指出原文件的建立时间¶
答案
2025-04-16 16:09:19
接上题.
38 请指出在 APP "照片"中, 储存多媒体文件"IMG_0014.MOV"与储存"IMG_0016.MOV"之间有没有其他多媒体文件储存到 APP "照片"中¶
选项
- A.有
- B.没有
- C.有拍摄,但没有储存
- D.无法确认
答案
B
数据库中"IMG_0014.MOV"和"IMG_0016.MOV"的 Z_PK 字段值是连续的, 因此这两个文件之间没有数据写入到数据库中.
39 承上题, 以下哪个陈述是正确描述上一题的答案¶
选项
- A.制作多媒体文件"IMG_0015.MOV", 直接储存到隐藏相册中
- B.制作多媒体文件"IMG_0015.MOV"时, 直接上传到 iCloud
- C.制作多媒体文件"IMG_0014.MOV"时用了缩时摄影
- D.制作多媒体文件"IMG_0015.MOV"时名称被更改为"IMG_0016.MOV"
答案
C
A. 即使存储在隐藏相册中, 也应该在 photos.sqlite 数据库中留下记录.
B. iCloud 中的 WhatsApp 应用数据中只有并没有上传"IMG_0015.MOV"文件.
C. 查看视频文件可以发现, 视频确实使用了延时摄影拍摄.
D. 若修改了文件名, 应该可以在 ZCLOUDMASTER 表的 ZORIGINALFILENAME 字段中看到更改前的文件名.
看题目的意思, 应该是使用了延时摄影导致的上一题中文件名不连续的问题. 不过目前我还没有找到相关的信息.
40 APP "照片"中, "IMG_0027.HEIC"的原地理位置信息(WGS84)是¶
选项
- A.(22.2816569, 114.1756115)
- B.(22.2826366666667, 114.168503333333)
- C.(22.2826216666667, 114.168525)
- D.(22.2826216666667, 114.168503333333)
答案
C
接第 35 题. 过滤文件名之后可看到 2 组地理位置信息, 分别是来自于 ZASSET 表和 ZEXTRATTR 表的信息:

对比拍摄时间相近的几张照片之后, 确认 ZEXTATTR 表中存储的地理位置信息为真实的信息:

查看文件的 EXIF 信息也可以看到相同的结果:

41 曾经通过网络浏览器 Safari 下载了多少个图片文件¶
选项
- A.1
- B.2
- C.3
- D.4
答案
B
接上题. 过滤 ZADDASSETATTR-IMPORTED BY DISPLAY NAME 字段值为 Safari 的数据:

42 多媒体文件"IMG_0004.MOV"曾被修改后再储存成另一个文件, 该文件名称是?¶
选项
- A.IMG_0085.mov
- B.IMG_0086.mov
- C.IMG_0087.mov
- D.IMG_0088.mov
答案
A
接上题. 过滤 ZADDASSETATTR-ORIGINAL FILENAME 字段或 ZCLDMAST-ORIG FILENAME 字段值为 IMG_0004.MOV 的数据, 即可在 ZASSET-FILENAME 字段中看到文件另存后的文件名:

43 曾经通过人工智能聊天 APP "POE"查询一个问题, 请列出这个问题的完整句子¶
答案
What’s that mean
几个包名带 ai 的应用的数据翻完了, 都没找到聊天的记录. 搜了一下 POE ai 在 Apple Store 看到应用的开发商叫 quora 才反应过来哪个是 AI 工具:

也可以通过 Photos.db 中的记录来确定 POE 应用的包名, 并且还能顺便找到用户在 POE 中使用的图片附件:


存储交互记录的数据库是 /var/mobile/Applications/com.quora.app.Experts/Documents/apollo_db.sqlite, 在其中的 key 字段过滤 Message: 即为用户的交互. 可以看到用户与大模型开始对话的问题是 What’s that mean:

并且消息还附带了一个附件:

需要注意的是, key 字段以 PoeMessageShare: 开头的数据应为应用推荐的来自其他用户的问题和响应的回答.
44 承上题, 请指出提问的日期及时间¶
答案
2025-04-16 13:50:06
接上题. 在 record 字段的 JSON 数据中可以看到 creationTime 时间戳:


45 承上题, 当时使用的是哪一个机器人¶
答案
Claude-3-Haiku
接上题. 在上述 JSON 记录中可以看到 $reference 中的 Bot 的值 Qm90OjEwMTc=:

在 key 中过滤可以看到 Bot 的信息, 其中 displayName 为 Claude-3-Haiku:

46 承上题, 当时的使用者名称是¶
答案
Duncan
接上题. 在上述 JSON 记录中可以看到 authorNickName 为 human:

在 key 字段中过滤 JSON 中的 authorUser(UG9lVXNlcjoyOTkzNDM5Mzc1), 可以看到用户的全名为 Duncan:

不确定这道题到底要填用户的昵称还是全名.
47 请指出即时通讯软件 WeChat 的 WeChat ID¶
答案
wxid_c9xyspglub7512
在火眼的"微信"分析结果中可以看到:

48 承上题, 这个 WeChat ID 关注了多少个视频号¶
选项
- A.1
- B.2
- C.3
- D.4
答案
A
在火眼的"微信"分析结果中可以看到微信账号缓存了 120 个视频号的信息:

在任意视频号分析结果上右键"跳转至源文件"即可看到保存视频好信息的数据库 /var/mobile/Applications/com.tencent.xin/Documents/5f1d6cc9474fbbc2fb3dc807008543d5/finder/db/finder_main.db. 在该数据库的 finderContactTable3 表中可以看到视频号的信息, 其中 followState 为 1 代表用户已关注该视频号. 仅 1 条记录为关注的视频号:

49 请指出即时通讯软件 WhatsApp 的 WhatsApp ID¶
答案
85254974406@s.whatsapp.net
在火眼的 WhatsApp 分析结果中可以看到:

50 即时通讯软件 WhatsApp 中, 封存了下列哪个聊天群?¶
选项
- A.凤凰VIP会员心得交流群
- B.币淘 群组1
- C.Sportsmen
- D.Titus Wong Manson Finance
答案
A
封存应该指 Archive 功能, 大陆地区一般常翻译成"存档".
在火眼的分析结果中可以看到群组列表:

WhatsApp 的聊天数据存储在 /var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/ChatStorage.sqlite 数据中, 在任意群组分析结果上右键"跳转到源文件"即可快速定位该文件. 在数据库中的 ZWACHATSESSION 表中可以看到 1 条记录, 其 ARCHIVED 字段的值为 1(已存档):

51 即时通讯软件 WhatsApp 中, 总共追踪了多少个频道¶
答案
19
看到频道列表分析结果中一共有 19 条记录:

52 即时通讯软件 WhatsApp 中, 下列哪个是群组"Investors"的管理员¶
选项
- A.只有 i)
- B.只有 i) 和 ii)
- C.只有 ii) 和 iii)
- D.以上皆是
答案
B
可以看到该群组除群主之外, 还设置了 1 个管理员:

看选项, 出题人应该是认为群主也属于管理员吧.
53 即时通讯软件 WhatsApp 中, 群组"Investors"的群组 ID¶
答案
120363417204753192@g.us
见上题.
54 即时通讯软件 WhatsApp 中, 社群名称是什么¶
答案
We are 3
在社群列表中可以看到:

其实在上题中就可以确认该社群的名称, WhatsApp 的社群可以建立若干个与社群关联的群组, 群组名称形如上题中的 Investors[We are 3]: Investor 是群组名称, We are 3 是关联的社群名称.
55 承上题, 请指出这个社群的群组图案的 SHA256 哈希值¶
选项
- A.B1A3706C574F81A3EE084FB9509997E06349E86D904D1DC10B879D1D5ED83125
- B.B8BA258402925E139CAFBBBBBC809EC160B70BB03DBD4D0F3063F58F69D0B956
- C.E43ADC646295BC5011577D4E733B6289D31A5E11ACB45285BE1FF530260DF383
- D.20E64C78F9926548CEEFB1783991A4AD71A6631F3C86002254342E323A898C6A
答案
A
/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/Media/Profile/1744811344-1744811344.jpg 为该社群的头像:

计算 SHA256 哈希:

哈希与任何一个选项都不匹配. 按照创建时间排序之后, 发现 1 个经过处理的内容相同的图片:

56 即时通讯软件 WhatsApp 中, 找出 WhatsApp ID 85254961408@s.whatsapp.net 曾经是在而现在已经不在的群组, 请指出该群组的名称¶
答案
Sportsmen
在"Sportsmen"群组中可以看到陈民浩被移出群组:

57 即时通讯软件 WhatsApp 中, 总共出现了多少个投票活动¶
答案
16
在"群聊消息"分析结果中搜索"投票"即可看到有 3 个投票活动:

在"频道消息"分析结果中搜索"投票"可看到有 13 个投票活动:

58 承上题, 总共在多少个投票活动中作出了投票¶
答案
3
接上题. 通过 SQL 语句在数据库中筛选上述群组的消息:
SELECT ZMESSAGETYPE, ZMESSAGEINFO, ZTEXT, ZFROMJID, ZTOJID FROM ZWAMESSAGE
WHERE ZTOJID = "120363400622997111@g.us"
OR ZFROMJID = "120363400622997111@g.us";
对比火眼的分析结果和原始数据库中的 ZWAMESSAGE 表中的内容, 可以定位到 1 条投票消息:

可以看到投票消息的 ZMESSAGETYPE 字段的值为 46, 以此进行过滤:

可以看到上述的 3 条投票消息的记录.
ZWAMESSAGEINFO 表中存储着消息的详细信息, 该表的 Z_PK 字段与 ZWAMESSAGE 表的 ZMESSAGEINFO 字段相对应, 该表的 ZRECEIPTINFO 中以 Protobuf 的格式保存着详细的消息信息. 通过 SQL 语句可以找到所有投票消息及其对应的 Protobuf:
SELECT ZWAMESSAGE.ZMESSAGETYPE,
ZWAMESSAGE.ZMESSAGEINFO,
ZWAMESSAGE.ZTEXT,
ZWAMESSAGE.ZFROMJID,
ZWAMESSAGE.ZTOJID,
ZWAMESSAGEINFO.ZRECEIPTINFO
FROM
ZWAMESSAGE
RIGHT JOIN ZWAMESSAGEINFO ON ZWAMESSAGE.ZMESSAGEINFO = ZWAMESSAGEINFO.Z_PK
WHERE ZMESSAGETYPE = 46;

用 CyberChef 解码 Protobuf 的 16 进制字符串, 可以看到其中包含的投票记录:

但只有群组内的投票保留了投票记录, 频道中的投票记录中仅包含选项和 Reaction 信息.
群组中的 3 次投票按发起的先后顺序排序, 分别有 2, 1, 2 次投票记录.
59 即时通讯软件 WhatsApp 中,群组"IQ COIN 💰💰💰💰"对话内容正在策划哪一种犯罪计划?¶
选项
- A.诈骗
- B.抢劫
- C.谋杀
- D.以上都不对
答案
A
根据群组的聊天记录, 正在策划入侵计算机系统和虚拟货币诈骗的犯罪计划:

60 承上题, 该群组建立者的 WhatsApp ID 是什么¶
答案
85254974406@s.whatsapp.net

61 承上题, 该群组的建立时间是什么¶
答案
2025-04-25 16:57:55
这 2 条系统提示是群组创建时的系统提示, 接收到系统提示的时间即为群组的创建时间:

梁燕玲的手机¶
案情
根据你的分析结果. 三人因感情瓜葛内讧因而发生这次袭击事件. 你怀疑梁燕玲曾到袭击现场, 你将你的发现通知警察.
警察扩大现场搜索范围, 终于在案发现场附近, 发现陈民浩名下的小汽车, 车上发现一部智能手机. 请你以参赛材料 LEUNG_YL_Mobile.zip 回答以下问题.
62 该手机中 iCloud 的注册邮箱是¶
选项
- A.
lingleung1502@gmail.com - B.
lingleung1502@yahoo.com.hk - C.
lingleung1503@gmail.com - D.
lingl1502@gmail.com
答案
A

63 拍摄文件 IMG_0021.HEIC 的相机型号是¶
选项
- A.iPhone SE (3rd generation)
- B.iPhone SE (2nd generation)
- C.iPhone 12 mini
- D.iPhone XR
答案
A
找到源文件, 查看 EXIF 信息:

64 拍摄文件 IMG_0005.JPG 时的座标(WGS 84)是多少¶
答案
22.337655, 114.139441
源文件中的 EXIF 信息不包含 GPS 信息, 需要在 Photos.sqlite 中查看:

65 拍摄文件 IMG_0022.JPG 时使用以下哪种方向¶
选项
- A.不旋转
- B.旋转180度
- C.顺时针90度
- D.逆时针90度
答案
D
在照片的 EXIF 信息中可以看到 Orientation(方向) 为 Right top, 即手机的右侧边框在顶部, 逆时针旋转了 90 度:

66 文件 IMG_0022.JPG 的创建时间(GMT+08:00)是¶
答案
2025-05-16 11:33:15
接上题, 在 EXIF 信息中可以看到图片的创建时间为 2025:05:16 11:33:15.
67 在 WhatsApp 与 85254974406@s.whatsapp.net 聊天对话中, 于 2025-05-16 11:33:39 时的信息所传送的座标(WGS 84)是¶
答案
22.278848726819984, 114.29062196271781
在 WhatsApp 的好友中可以看到 85254974406@s.whatsapp.net 是冯子超的 WhatsApp ID:

在好友消息中可以看到冯子超发送给梁燕玲的位置消息:

在位置消息中也可以看到这条位置消息:

在火眼的"位置"功能中可以看到这条消息对应的经纬度坐标:

68 在 WhatsApp 与 85254974406@s.whatsapp.net 聊天对话中, 于 2025-05-16 11:33:39 时的信息所传送的座标(WGS 84)所指的餐厅英文名称是¶
答案
Fai Kee Seafood Restaurant
见上题.
69 在 WhatsApp 中聊天群组 ID 120363401289578356 里, 于 2025-04-29 08:31:02, 机主传送了一个 PDF 文件, 该 PDF 的内容是什么¶
答案
0xe36D4bCf0132B8Dc7317C2Fb9bfa1845629F6638
在群组列表中可以看到群组信息:

在群聊消息中过滤梁燕玲的 WhatsApp ID 可以快速找到题目中提及的 PDF 文件:

或者在文件传输记录中:

结合群聊消息的上下文可以知道, 钱包地址被隐写在这个 PDF 文件中:

使用 PDF 编辑器编辑文本即可看到被设置为白色的文本:

或者打开文档之后直接 Ctrl+A 全选之后复制也可以得到隐写的文本.
70 在 WhatsApp 中聊天群组 ID 120363401289578356 里, 有多少个参加者¶
选项
- A.2
- B.3
- C.4
- D.5
答案
B

71 于 2025-04-25 17:11:37 时使用 WhatsApp 拨打的手机号码是多少¶
选项
- A.85254962307
- B.85254961408
- C.85254974406
- D.85254993306
答案
C
在 WhatsApp 的通话记录中可以看到向冯子超发起了通话:

WhatsApp 的用户 ID @ 前的部分即为带区号的手机号码.
72 总共有多少个 WhatsApp 的通话记录(包括拨打、接收及未接来电)¶
选项
- A.4
- B.5
- C.6
- D.7
答案
D
见上题.
73 WhatsApp 聊天群组 ID 120363400622997111 的群组名称是¶
选项
- A.Investors
- B.Foodies
- C.We are 3
- D.Happy Sharing within 3
答案
D
见第 69 题图.
74 WhatsApp 聊天群组 Happy Sharing within 3 于 2025-04-17 10:12:34 传送的 WGS 84 座标是多少¶
选项
- A.22.323436345441, 113.276894376508
- B.22.326923370361, 114.168403625488
- C.21.239876452236, 115.925422314543
- D.20.124955642236, 114.168403625488
答案
B
答案中没有完全一致的经纬度, 最接近的是 22.326923370361, 114.168403625488:


对比火眼的分析结果和数据库, 可以判断出来数据库中的第 24 条数据为位置消息的记录:

其 ZMEDIAITEM 字段为 504, 在 ZWAMEDIAITEM 表中过滤 Z_PK 为 504 的数据, 可以看到精确的经纬度信息:

目前还不确定为什么火眼分析出的 GPS 信息会与数据库中存储的值不同.
75 Instagram 的版本是¶
选项
- A.375.2.0.15.82 (722575504)
- B.376.1.0.14.56 (722575504)
- C.376.1.0.27.82 (722575504)
- D.376.0.0.17.23 (722575504)
答案
C
火眼获取到的应用版本号为应用的 CFBundleVersion:

在应用的数据目录中, 存放翻译文件的文件夹 /var/mobile/Applications/com.burbn.instagram/Documents/locales/376.1.0.27.82_722575504 中可以看到应用的详细版本:

在 /var/mobile/Applications/com.burbn.instagram/Library/Preferences/com.burbn.instagram.plist 中也可以看到版本号信息:

76 社交媒体软件 Instagram 的安装时间¶
答案
2025-04-26 11:50:47
接上题. 安装时间为 2025-04-26T03:50:47Z, 转换为 UTC+8 为 2025-04-26 11:50:47:

梁燕玲的 U 盘¶
案情
跟据你的分析, 警察在香港西贡蕉坑找到一个行李箱, 内藏一名女子尸体, 身上没有任何身份证明文件, 裤袋内搜获一个 U 盘. 根据法医初步检验, 死者头部及颈部有明显瘀伤, 相信曾发生激烈争执, 死因为气管受压导致窒息, 死亡时间相信是在 2025-05-16 09:00 至 10:00. 调查人员初步检查这个U盘, 没有发现可疑资料, 现在交由你进行电子数据鉴定工作.
请参考参赛材料 AP3_LEUNG_YL_USB.E01, 答以下问题.
启动 WinPE 的方法
该 U 盘是一个 EFI 格式的可启动盘.
使用 FTK Imager 挂载镜像, 使用 BlockDevice/Writable 方式.
使用管理员权限运行 VMWare, 新建一个虚拟机, 选择稍后安装系统.
编辑虚拟机设置, 删除原本配置的磁盘. 添加物理磁盘(FTK Imager 挂载的磁盘).
启动虚拟机即可启动 Win PE.

77 这个 U 盘里有多少个分区¶
答案
2
在"案件"标签页中查看检材的分区详情:

但是在 FTK Imager 和 XWF 中只能看到 2 个分区:

看后面的题目, 出题人应该是以 2 个分区的结果为准的.
78 这个 U 盘里的分区类型是什么¶
答案
MBR
在火眼中可以看到每个分区中都有虚拟出来的 $MBR 文件:

或者在 X-Ways Forensics 中查看检材的技术细节报告:

79 以下哪项描述是正确的?¶
i) U 盘的总容量是 16 GB
ii) 文件系统包括 FAT32, exFAT 和 NTFS
iii) exFAT 分区的容量是 16 GB
iv) 分区标签名是"SanDisk"
选项
- A.只有 i) 和 ii)
- B.只有 i) 和 iii)
- C.只有 ii) 和 iv)
- D.以上皆非
答案
D
i) 在检材信息中可以看到源盘大小为 29.25 GB, 应为标称大小 32 GB 的 U 盘:

ii) 参考第 77 题图. 分区格式包括 fat12, exfat 及 fat16.
iii) 参考第 77 题图. exfat 分区的大小为 27.65 GB.
iv) 参考第 77 题图. 用户自定义了 exfat 格式分区的卷标, 卷标为 TIM.
综上, 没有任何一项正确.
80 以下哪项描述是正确的?¶
i) 此 U 盘曾连接到一台名为"PC"的电脑
ii) U 盘内存有一个已加密的压缩文件
iii) 已加密的压缩文件的创建日期是 2025-05-15
选项
- A.只有 ii)
- B.只有 iii)
- C.只有 ii) 和 iii)
- D.以上皆是
答案
C
i) 未找到相关日志.
ii) 在卷标 TIM 的分区根目录中看到 Sunny.zip 压缩文件, 为加密文件:

iii) 见上图, 压缩包的创建时间为 2025-05-15.
81 𠄘上题, 该压缩文件的解压密码是多少¶
答案
54d#e(nm
在 /WEPE/WALLPAPER.JPG 图片中看到密码为 54d#e(nm:

启动 WinPE 之后, 该图片会被设置为系统桌面.
压缩包的内容为 VeraCrypt, TorBrowser 及 1 个容器文件.
82 以下哪项描述是正确的¶
i) 这是一个可引导U盘
ii) 有一个分区标签名为"EFI"
iii) 卷标日期为 2025-05-15 (UTC +8)
iv) 有一个分区的总容量小于 500 MB
选项
- A.只有 i)
- B.只有 i) 和 ii)
- C.只有 i), iii) 和 iv)
- D.以上皆是
答案
D
i) EFI 分区中有 BOOT.
ii) 存在卷标为 EFI 分区.
iii) 在 EFI 分区中看到火眼虚拟出来的卷标项, 其修改时间为 2025-05-15 21:38:48.

iv) EFI 分区的大小为 349.99 MB.
83 "tammy.txt"文件的内容是什么¶
答案
due_diligence
在 EFI 分区的 WEPE 目录中可以看到存储的分区映像文件 WEPE64.WIM:

导出该文件并解压, 将文件作为文件集合挂载, 可以在 WEPE64/Program Files/tammy.txt 找到题目中提及到的文件:

启动 WinPE 之后桌面上的 gogo1x.txt.LNK 即可发现其为指向 tammy.txt 的链接:


84 文件"xcontainer"的加密算法是什么¶
答案
AES(Twofish)
在 TIM 分区的根目录中有 1 个被删除的 vera_key 文件, 导出后将其作为密钥文件挂载找到的加密容器:

挂载容器后查看其属性:

85 分析文档"xcontainer"的属性. 关于此磁盘镜像, 以下哪项描述是正确的¶
i) 大小为 4943872 字节
ii) 文件系统是 FAT
iii) 没有嵌入式备份头
iv) 块大小为 128 位
选项
- A.只有 i) 和 ii)
- B.只有 ii) 和 iv)
- C.只有 ii), iii) 和 iv)
- D.以上皆是
答案
B
i) 参考上题图. 容器的大小为 4980736 bytes.
ii) 文件系统为 FAT:

iii) 参考上题图. Embedded Backup Header 属性为 Yes.
iv) 参考上题图. 块大小为 128 bits.
86 WinPE 启动后, 系统会自动将核心映像挂载在哪个盘符¶
答案
X
启动 WinPE 之后可以看到系统映像被挂载在 X 盘符:

数据目录则会使用下一个空闲的盘符.
87 下列哪些 Windows PE 指令在预设环境下无法执行¶
i) Powershell
ii) Eventvwr
iii) Hostname
iV) Diskpart
选项
- A.只有 i) 和 ii)
- B.只有 iii) 和 iv)
- C.只有 i), ii) 和 iii)
- D.以上皆是
答案
C
启动 WinPE 之后尝试运行题目中的指令即可验证:

88 必须包含哪个文件, 才能启动 Windows PE环境¶
选项
- A.WEPE64.wim
- B.install.wim
- C.WinPE.log
- D.hiberfil.sys
答案
A
根据上述分析, WEPE64.WIM 为系统的核心映像文件.
89 若要判断一个 U 盘是否为可开机的 Windows PE, 以下哪些文件必须存在¶
i) WEPE64.wim 或 boot.wim
ii) bootmgr
iii) EFI\Boot\bootx64.efi
iv) hiberfil.sys
选项
- A.只有 ii) 和 iv)
- B.只有 i), ii) 和 iii)
- C.只有 i) 和 iv)
- D.以上皆是
答案
B
i) WEPE64.wim 或 boot.wim 是 WinPE 的核心映像文件, 必须存在.
ii) bootmgr 是 Windows 启动管理器, 对于传统 BIOS 启动是必须的.
iii) EFI\Boot\bootx64.efi 是 UEFI 启动文件, 对于 UEFI 启动是必须的.
iv) hiberfil.sys 是 Windows 系统的休眠文件, 与 WinPE 没有直接关系.
90 这个 WinPE U 盘的操作系统基于哪一个 Windows 版本¶
选项
- A.Windows 7
- B.Windows 8.1
- C.Windows 10 PE
- D.Windows 11 PE
答案
C
启动 WinPE 之后在控制面板中可以看到 Windows 版本信息:

91 该 U 盘有一个加密的文件, 该文件所用的加密软件名称是¶
答案
VeraCrypt
应该是指加密容器吧, 加密软件名称就是 VeraCrypt.
92 请列出与 IQ Coin 有关的虚拟钱包的地址¶
答案
0x548dafDe4B17d7d3C9485E79B3B5018801C7855E
加载容器之后可以在容器中看到 IQ_1.jpg 文件:

其中的二维码扫描之后可以得到 1 个钱包地址 0x548dafDe4B17d7d3C9485E79B3B5018801C7855E.
这也是稍后的加密货币截图检材的压缩包解压密码.
98 根据你的信息警察查知这个加密钱包涉及近期一宗巨额诈骗案, 请你查出这个钱包余额额度, 警察将会进行冻结程序. 请指出包含有疑似助记词的文件的 MD5 哈希值¶
答案
183b8e0c6365fee834479269141a3f91
在容器中还有一个 tmp.txt 文件, 其内容疑似钱包助记词:


虚拟货币截图¶
案情
根据你综合多项通讯软件的对话记录, 浏览记录及资料分析, 发现冯子超、陈民浩伙同女子梁燕玲共同做了一宗涉及加密货币投资的诈骗案件, 因东窗事发打算携赃而逃. 女子梁燕玲负责处理有关清洗黑钱事项, 警察相信梁燕玲携带同相关材料逃跑, 请你运用电子数据鉴定技巧寻找与加密货币相关的材料, 尽快启动冻结程序.
本部分使用的检材文件是 IQ_Coin_Type_Transactions.zip, 是有加密的 zip 压缩包. 密码为第 92 题中找到的钱包地址 0x548dafDe4B17d7d3C9485E79B3B5018801C7855E.
我在做题的时候的习惯是将所有的密码, 明显提及到的重要信息(生日, 纪念日, 钱包地址)等存储在一个 txt 文件中, 当需要爆破时我会使用这个 txt 文件作为字典, 配合弱口令字典及 6 位以下数字掩码进行爆破. 我通过这一方法爆破出了压缩包的密码.
不过感觉出题人安排的题目顺序也算提示吧, 临近的题目中出现的有可能是密码的信息也就是钱包地址和第 83 题 txt 文件中的字符串了.
检材中的图片 IQ_Coin_Transcations_1.jpg 是来自于 BscScan 的网页截图, 原网页BscScan. 部分题解还会展示在线环境下进行分析的思路.
这个截图非常恶心, 上面的水印会直接导致 OCR 识别出来很多脏信息, 调了很久识别效果都比较差.
93 承上题, 这个钱包属于哪一种加密货币¶
答案
BNB
在截图中可以看到智能合约在 BNB 链上:

钱包地址 0x548dafDe4B17d7d3C9485E79B3B5018801C7855E 也出现在了交易记录中:

94 承上题, 这个钱包总共有多少次存入记录¶
答案
1
在 To 列中共有 1 次转入.
在网页上筛选一下会比较明显:

95 承上题, 存入款项的支账地址是什么¶
答案
0x6144ACfdf84bbEC6bccB310516A89D4b3ee48c1A
接上题.
在图片上只能看到一部分 0x6144ACfd...b3ee48c1A.
在 BscScan 中可以看到完整的地址: 0x6144ACfdf84bbEC6bccB310516A89D4b3ee48c1A
96 承上题, 这项交易传送了多少 BEP-20 IQ Coin¶
答案
1000000000
接上题. 发送了 1,000,000,000 IQ Coin.
97 助记词是由加密货币钱包生成的一系列单词, 帮助用户恢复其私钥. 助记词通常由 12 到 24 个单词组成¶
选项
- A.正确
- B.错误
答案
A
BIP-39 助记词可以由 3 - 24 个单词组成, 但小于 12 个单词的助记词熵低且易被爆破攻击. 在 BIP-39 Standalone 中如果试图生成小于 12 个单词的助记词, 则会受到警告: Mnemonics with less than 12 words have low entropy and may be guessed by an attacker.