胡壮 发布的文章

手机取证在电子取证中的所占的比重一天比一天大。三五年前,大部分涉及到电子数据的案件,检材基本都是硬盘,而现在,基本每个案件都会涉及到手机检材。人们的生活已经完全离不开手机,衣食住行、与人沟通,很多行为都是在手机上进行,手机类的检材中往往有更多有价值的线索。

平时工作中,每周接触到的手机检材基本都有十余部,积累一些手机取证相关的经验和思考,挑选一些分享给大家,希望能抛砖引玉。

1. SIM卡ICCID?

ICCID(Integrate circuit card identity),即SIM卡的“身份证”,可查的资料中解释说ICCID号是一串20位的数字,用来唯一标识一张SIM卡。ICCID可用读卡器从SIM卡中读取到,一些手机在设置选项中也可以查看到(iPhone手机可以在“设置”→“通用”→“关于本机”中查看)。在潜意识,这串数字就是印刷在SIM卡卡身上,下面文字摘自维基百科“Subscriber identity module”词条

ICCIDs are stored in the SIM cards and are also engraved or printed on the SIM card body during a process called personalisation. …… the GSM Phase 1 defined the ICCID length as 10 octets (20 digits) with operator-specific structure.

根据个人经验,比较老的SIM卡,卡身上印刷的数字确实就是ICCID号码,且就是20位的数字。但是这几年以来的新卡,并不一定是这样的。

首先,现在的ICCID并不一定是20位的数字,有可能中间混有字母。去年我刚开始发现这一点的时候我还以为是我用的手机取证软件提取错了,又用UFED提取了一边,结果UFED提取的结果直接把字母及字母之后的部分丢掉了。后来用相关工具直接查看SIM卡中的原始信息,发现原始数据中保存的就有字母。

图1图2

另一方面,现在的新卡卡身上印的一串字符,基本已经不是ICCID了。接触手机多了,我们可以会发现,国内SIM卡的ICCID好基本都是以“89860”开头,但现在很多SIM卡上印刷的字符会以“01”或“13”开头,很明显与ICCID号不一致。所以在记录SIM卡的ICCID好的时候,千万不能直接看卡身印刷的字符,一定要从SIM卡中提取。

2.需不需要单独提取SIM卡数据?

如果SIM卡一直就在手机中,是不是直接连接手机取证,就顺便提取了SIM卡中的数据呢?也有人觉得,现在智能机基本不会将数据存储在SIM卡中,所以没有必要对SIM卡进行单独提取。。

根据经验,直接连接手机进行数据提取,大部分手机是提取不到SIM卡中的数据的,但是,也会有少数手机可以直接提取到SIM卡中的数据。

虽然大部分时智能手机确实默认不会将联系人、短信存储在SIM卡中,但凡事没有绝对,我也遇到过从SIM卡中提取甚至恢复出大量数据的情况。

另外,SIM卡除了可以保存联系人、短信、通话记录等信息,还会记录其他重要信息,比如IMSI号,使用这个号码,通过运营商可以查到这张SIM卡对应的手机号。极少数情况下,SIM卡中也会直接存储手机本机号码(平时工作中遇到这种情况不是特别多)。
所以,单独对SIM卡进行数据提取是很有必要的。

3.你看到的就是你想看到的?

我们看到的,有时候仅仅是我们被希望看到的,手机取证中也有这样的情况。举个例子,小米手机中有个电话加油包的功能,充值后,可以以远低于运营商的价格拨打电话,整个通话流程也与正常的拨打电话没有区别,通话记录显示的也是用户拨打的号码,看起来有没有什么异常,但是如果在运营商那里调出通话详单,问题就来了,详单中的通话记录与手机中的通话记录根本对不上。

原因就在于MIUI系统开启电话加油包后拨打出去的电话,实际上是网络电话,是回拨的,只是巧妙地隐藏了回拨的过程,没有响铃且自动接听,手机上显示的正常的拨出去的电话,运营商那边显示的却是接听的一个奇怪的号码。

4.iTunes备份加密了就提取不到任何信息?

手机取证过程中如果遇到了遇到iTunes备份加密,绝对让人崩溃。一方面市面上的iTunes密码破解工具效率比较低下,另一方面这个密码和手机锁屏密码、iCloud密码都没有直接关系,很多人一时好奇设置了这个密码,不久就彻底忘了。
但是是不是如果记住设置了iTunes密码,真的就什么都提取不了呢?非也。

首先,info.plist、manifest.plist、status.plist、manifest.mbdb等文件并没有加密,这意味着可以从iTunes备份中获取到一些基本信息,例如手机号、手机系统版本、手机序列号、IMEI号。

可能有人会说,上面这些东西并没有什么用啊,能对手机进行备份,上面这些信息也能直接从手机中看到。这点倒也不假。
但是加密的iTunes备份中,加密的仅仅是文件部分,文件夹名称、文件属性信息并没有加密,这意味着我们可以从这些未加密的部分获取到不少信息,比如手机中安装了哪些APP、基于文件属性的时间线、登录的APP帐号等信息。

图3

上图是使用iBackupbot加载的一个加密的iTunes备份,从截图中可以看到手机中登录过“9961**4”的QQ号。其他一些APP帐号信息也可以用类似的方法推测出来。假设这部iOS设备上登录过多个QQ号,我们可以得到这些帐号信息,根据相关的创建时间和修改时间,可以得知什么使用时间,再根据各个帐号对应数据库文件的大小,可以知道机主经常使用的QQ号信息。

今天就先分享这么多,后续有空在继续分享手机取证的其他一些小思考。


本文最早发布于微信公众号“取证杂谈”及取证中国论坛,发布日期为2016年8月14日,其他网站及平台均为未授权转载。

电子取证中,为了防止检材污染,工作时中进行写保护是非常必要的。司法部《关于印发<司法鉴定机构仪器设备配置标准>的通知》(司发通[2011]323号)规定电子数据鉴定中只读接口是必备设备,录音资料鉴定中只读接口是选配设备。

不过在紧急情况下,“软只读”可以发挥一定的作用。软只读指的是通过软件的方式禁止向目标设备写入数据。从Windows XP SP2开始,通过修改注册表中的键值达到禁止向USB设备写入数据的目的。具体起作用的为注册表“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies”的“WriteProtect”的键值,键值为“0”则USB设备为读写状态,键值为“1”则USB设备为只读状态。网上的一些USB写保护小工具(例如USB WriteProtector),基本都是基于这一原理。

下图是使用Process Monitor检测USB写保护工具USB WriteProtector设置写保护这一过程的所有操作,由于篇幅所限,这里只截取了具体的操作详情。

图1

但同时,我发现这工具运行的时候貌似有些“不老实”,过一段时间就多C盘中某个文件进行操作。暂时不知其原因。

图2

其实,我们完全可以自己设置。下面是具体方法。

设置只读:在记事本中粘贴下列内容,保存为“DisableUSBWrite.reg”(注意不要保存成了“DisableUSBWrite.txt”),其实文件名无所谓,但后缀一定要为“reg”。双击保存的文件,即可导入注册表。

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies]
"WriteProtect"=dword:00000001

同理,取消只读只需在记事本中粘贴下列内容并保存成“EnableUSBWrite.reg”并双击导入即可。

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies]
"WriteProtect"=dword:00000000

上面两段内容保存后图标如下,如果不是,很可能格式保存错了

图3

双击导入的时候会出现下图所示的提示,直接点“是”就可以了。

图4

设置完后,接上优盘,在优盘中空白处右击,会发现熟悉的“新建”菜单不见了。

图5

当试图从其他位置复制文件到优盘中时,会有写保护提示。

图6

就连对优盘进行重命名都会报错。

图7

演示完了,说几点需要注意的地方。

1.注册表设置后,仅对之后接入的设备有效,例如之前是只读状态,连接着一个优盘,设置读写后,此优盘依然只只读的,重新拔插一次才能恢复对此设备的读写。

2.除了对优盘、移动硬盘等“移动设备”有效,对SATA转USB的硬盘依然有效。

3.一般情况下,设置USB只读或USB读写后,重启后之前的设定依然有效,但是偶尔遇到“不一般的情况”,之前的设定有可能有效可能无效。

下面来解释一下上面的第三条。注册表“HKEY_LOCAL_MACHINE\SYSTEM\”下面一般会有名为“CurrentControlSet”、“ControlSet001”、“ControlSet002”的子目录,这些地方保存着一些系统配置信息。其中“CurrentControlSet”是当前的配置信息,一般与“ControlSet001”内容一致,“ControlSet002”是每次成功启动电脑后从“ControlSet001”中复制的备份,也就是Windows系统启动时按F8进入安全模式看到的“最后一次正确配置”。一般情况下,开机后“CurrentControlSet”都是从“ControlSet001”复制数据,由于某种原因,如果系统启动的时候不是从“CurrentControlSet”数据不是从“ControlSet001”复制的,就有可能造成上次设置失效。

注册表“HKEY_LOCAL_MACHINE\SYSTEM\Select”中记录了当前(Current)、下次(Default)、最后一次正确(LastKnowGood)的配置。

图8

我想不少人看了以上内容一定惊喜不已——以后花几十块钱买个SATA转USB的线材,就可以和只读锁说拜拜了?淘宝上只读锁老贵老贵呢。

图9

这种方法可不可行呢?我们接下来继续看。

我在有个优盘中新建了一个名为“TEST.txt”的文件,内容为“www.cnforensics.com取证中国”。

![图10[10]

将优盘拔出,设置后USB只读后,重新接入优盘,打开重新编辑后按Ctrl+S保存,报错。

图11

使用WinHex打开优盘,编辑“TEST.txt”,将第一个字母“w”改成“A”并保存。

图12

点击“确定”

图13

点击“是”,居然没有报错提示,赶紧从资源管理器中打开优盘看看——内容已修改……

图14

显然,我们修改注册表后的“只读”并没有阻止住WinHex对优盘的写入操作。对于一些使用较低层的方式对磁盘进行的操作,软只读无法无能为力,所以,购买物理只读设备还是很有必要的。当然,特殊情况下,软只读总比直接读写好。


本文最早发布于微信公众号“取证杂谈”及取证中国论坛,发布日期为2016年1月3日,其他网站及平台均为未授权转载。

本文通过实验说明物理镜像的获取及数据分析在手机取证中的重要性。实验用的手机为红米 2 加强版(型号为2014813),2 GB RAM,16 GB ROM,Android 4.4.4,MIUI 版本为MIUI 5.7.31开发版,手机已Root。

第1步:前期准备

首先,从百度下载一张“.jpg”格式的图片复制到手机内置存储空间根目录下,文件名为“meiya.jpg”,如图1所示。

在手机中向“1234567890”这个号码(当然了,这个号码并不存在)发送一条短信,内容是“Mobile Forensics”,如图2所示。

图1至图3

第2步:删除相关信息

在手机文件管理器中删除图1中所示的图片“meiya.jpg”;在手机中删除刚才发送的短信,如图3所示。

第3步:使用手机助手获取短信

将手机连接电脑,分别使用小米手机助手和91手机助手查看、导出短信,没有发现刚才删除的那条短信。

第4步:使用ADB Shell查看文件

在电脑上安装adb.exe(“adb”是“Android Debug Bridge”的缩写,大部分手机助手都自带且安装了adb.exe),在命令提示符中将工作目录切换到adb.exe所在目录,输入“adb shell”进入ADB Shell 模式,接着输入“su”获取Root权限,输入“cd /mnt/sdcard”切换当前工作路径到手机内置存储空间根目录下,输入“ls -l”查看详细文件/文件夹列表,没有发现刚才删除的图片“meiya.jpg”。如图4所示。

图4

第5步:获取手机镜像

使用DC-4500手机取证系统“工具箱”中的“Android镜像下载”工具获取手机“/data”分区的dd镜像,如图5所示。

图5

第6步:分析镜像

使用WinHex打开刚才创建的dd镜像,在其偏移02BE522FB附近找到了如图6所示内容,我们可以看到刚才发送的短信内容“Mobile Forensics”,并在附近发现了发送的号码1234567890,同时还在附近发现了一串数字“11*39”,这是这部手机登录的小米帐号。

图6

接下来,还在镜像文件偏移005CCFFF0附件中找到了如图7所示的内容,根据经验判断,这里有“.jpg”格式图片的文件头,继续往下看,还找到了一个“.jpg”格式文件的结束标识。将这之间的内容另存为一个文件“未命名”,使用“Windows照片查看器”顺利打开,如图8所示。

图7
图8

结果分析

第3步代表逻辑提取,各种手机助手都可以进行基本的逻辑提取,这种逻辑提取使用的是Android系统读取短信的API,但系统并没有获取已删除短信的API,所以逻辑提取无法获取到已删除的短信。其实逻辑提取还可以通过备份的方式将相关数据备份出来然后解析,例如美亚柏科的手机取证产品DC4501、FL-900等就能从Android手机的备份文件中提取一些删除的短信等内容。

第4步代表逻辑浏览。在ADB Shell中无法看到“meiya.jpg”也很好理解,因为图片已经删除了,ADB Shell中只能显示文件系统认为存在的文件,文件删除后,文件系统就认为此文件已经不存在了。

第5步和第6步代表物理获取。上述例子在运行的系统中获取的镜像其实还不是真正的“物理镜像”,更彻底的物理镜像是通过Chip Off(拆取芯片)等离线方式获取镜像。通过物理镜像这种方式最全面,在取证中效果最好。之所以在手机上删除了还能恢复,是因为原内容并没有被覆写,只要原始数据还在,就可以恢复。这就好比一本书的目录中涂掉了一些章节,如果只看目录,就会以为这些章节不存在了,但是只要这些章节的具体内容还没有涂抹掉,一页一页地去寻找,就一定能够找到。

目前Android系统并没有对存储设备进行全盘加密,只要获取到了物理镜像,然后使用十六进制编辑器查看,可以发现很多线索。当然了,这样查看需要了解常见文件签名、编码等众多知识和丰富的经验,而且效率往往不高。当遇到一些文件已经部分损坏的情况,可能还需要文件雕刻知识。可以使用一些自动化的工具,比如开源的scalpel。

Android系统中的分区一般是Ext4文件系统,使用对应的数据恢复软件也可以很方便地进行数据恢复。例如在此例中,使用取证大师电子数据分析系统加载此dd镜像,使用签名恢复恢复出了25177个图片,其中就包括例子中删除的那张。如图9、图10所示。

图9
图10

目前,大部分手机连接电脑查看、管理手机中的文件都是通过MTP模式而不是优盘模式,这样做的好处是不需要考虑手机中文件系统格式,也不会因为电脑独占手机存储空间而导致手机中一些依赖sdcard分区的程序运行异常。而MTP模式是在文件系统层之上的,MTP连接模式下无法进行数据恢复。制作物理镜像则没有这一担忧。

另外,手机在运行过程中,系统运行、程序运行、用户操作都会都对手机中的数据造成持续的改变。从尽量保持检材数据原始性的角度,制作手机镜像是最好的选择。

结论

对于手机取证人员来说,在不破坏手机硬件的情况下,应尽可能地获取手机内存(Flash)的物理镜像,通过物理镜像通常获得完整的文件系统,并恢复已删除的文件(如照片、视频等)。此外物理镜像还可通过十六进制编辑器搜索并分析文件系统中的未分配空间中的残留数据,从而可能提取到有价值的相关数据。


本文最早发布于微信公众号“美亚柏科”,发布日期为2015年9月2日
微信公众号“cnforensics”于2015年9月14日授权发布
本文同时收录到美亚柏科官网技术分享栏目
其他平台为非授权转载。

最近在处理的一个案件,需要统计用户上传的图片数量和网站帖子数量。拿到服务器硬盘,镜像后将MySQL数据库及网站代码全部复制到了分析机。网站使用的“织梦CMS”内容管理系统,使用WAMP(Apache+Mysql+php)将网站充搭建起来。在浏览器中输入“http://127.0.0.1/phpmyadmin”查看对应数据库,将“dede_archives”表导了出来,这个表里面有所有帖子信息,包括帖子名,上传时间、发布时间,附件位置等等,我接下来大部分工作就在这个表上进行。

“dede_archives”表中所有时间都形如“1400890656”,初步判断是Unix时间格式,百度“Unix时间转换”,将此值转换得“2014-5-24 0:17:36”,结合其他因素判断,果然没错。由于数据量比较大,一个一个转换肯定不行,经过考虑,准备用Excel批量转换。经过一番折腾,找到了转换方法。

假设A1单元格为Unix时间值,我们要在B1单元格显示可视化时间,则只需要在B1单元格中输入“=A1/86400+25569”即可,然后将单元格格式设置为时间格式,如果嫌麻烦,也可以直接在B1单元格中输入“=TEXT(A1/86400+25569,"yyyy-m-d h:mm:ss")”,这样B1单元格便会以“2014-5-24 0:17:36”的格式显示。前面的操作并没有考虑时区,如果原Unix时间为UTC时间,而我们要转换成北京时间(东8时区),则B1单元格中只需输入“=TEXT(A1/86400+25569+8/24,"yyyy-m-d h:mm:ss"”,同理,如果要转换成西7时区,B1单元格输入的内容为“=TEXT(A1/86400+25569-7/24,"yyyy-m-d h:mm:ss"”。

下面来解释一原理。Unix时间格式记录的是距离1970年1月1日0:00:00流逝的秒数,86400=606024,正好是一天的秒数,A1/86400即为Unix时间值代表的距离1970年1月1日0:00:00流逝的天数。25569又是什么东西呢?25569=70*365+19,是从1900年1月1日到1970年1月1日的天数,+19是因为1990年到1970年之间闰年数目。那么,1900年1月1日0:00:00又是怎么来的?这个,是我试出来的。当我们在Excel表格中输入一个时间,然后将单元格设置成常规类型,就会发现单元格内容变成了一个数值,所以说Excel表格中记录时间的方式类似Unix时间格式,当我在单元格中输入“0”,然后装换成日期格式时,显示的是“1900年1月1日 0:00:00”。TEXT(数值,"yyyy-m-d h:mm:ss")函数的意思是将“数值”按照“年-月-日 时:分:秒”的时间格式显示。

现在来分析一下“A1/86400+25569”,假设A1值为1400890656,

则A1/86400表示1400890656距离1970年1月1日0:00:00的天数 ①

25569代表1970年1月1日0:00:00距离1900年1月1日 0:00:00的天数 ②

由①、②得A1/86400+25569表示1400890656距离1900年1月1日 0:00:00的天数,正好就是Excel记录日期的格式。

下面是操作方法,是不是很简单?

Excel中转换Unix时间的方法


本文2015年5月6日发布于本博客