|
本帖最后由 330wang 于 2018-7-4 11:44 编辑
由于从word中复制,图片全打不开,大家移步到最后下载pdf格式的。
====================================================
0x00 问题引入
话说一个软件客户把一个Haipainoble手机放在我这,有屏幕锁,说是要恢复什么东西(至于恢复什么忘记了)。
通过baidu搜索,知道这是一个MTK的手机用的是阿里云系统。然后很顺手的得知这个手机的其它资料。
手机关机后,长按音量下+电源进入工厂模式。
查看版本信息。
图1 手机的版本信息
我们得到CPU型号:MT6737M 型号:T861-H820-haipainoble-S3-V2.1
然后从网上下载相关的刷机包。我们得到了回读所需要的文件如下图所示:
图2 刷机包中的DA及auth文件
尝试加载这个DA及auth。
图3 加载出错提示
图4 winhex查看结果发现DA加密了
这样有几个问题需要解决:
1:手机没有开调试且有屏幕密码锁,如何处理?
2:手机是MTK手机,可以用回读工具进行字库回读,但是官方提供的刷机工具并没有回读功能,如何处理?
3:手机有没有备份的功能?
4:手机能拆吗?
0x01 问题思考-常规的方法
对于上面提出的三点问题,我们一一分析可行性:
1:由于手机没有开调试且有屏幕密码,可以考虑进fastboot刷写第三方进行ROOT提权操作。
手机关机后长按音量上+电源开机进入fastboot界面。
图5 手机进入Fastboot模式
在这个模式下输入命令 fastboot devices命令,根本发现不了手机(已排除驱动的问题)。
图6 fastboot识别不了手机
看来此路不通。
0x02 问题思考-官方刷机
手机是MTK处理器,可以用官方的工具刷写固件,我们可不可以尝试一下用官方的刷机工具把第三方固件刷入手机中呢?
先查看一下官方的recovery结构,如下图
图7 官方recovery结构
官方的recovery也是另一种不认识的格式的。如果贸然修改第三方,刷进手机里可能造成不可避免的故障。风险太大,暂时放弃这种做法。因为只有这一台送检手机,不敢贸然尝试。
0x03 问题思考-自带备份
手机进入官方的recovery试试自带的备份功能。
在手机上插入一个大一点的SD卡,执行备份用户数据这一项。
=>
图8 备份用户数据 图9 备份过程
可以看出SD卡空闲空间有15243MB,整个data区有4023MB,等它备份完成再做解析。
这里有另一个问题,如果要备份的用户空间大于4G怎么处理?
只能说要不recovery中支持exfat格式或者recovery分段保存备份结果或者recovery不提供备份用户数据的选项。
图10 备份结束
下面开始处理SD卡上的备份数据。
为了保险同时也为了读取恢复的速度,把SD卡上的数据保存到电脑上。开始对备份的结果进行解析。
图11 SD卡上的备份结果
从上图上看备份是分段保存的,2G一个备份文件。
图12 保存过程
下面打开这两个文件进行分析:
图13 第一个文件扇区结构
图14 第二个文件扇区结构
这两个文件的开头都是乱码,剩下的结构有没有规律呢?
我们接着往下看:
图15 第一个文件标准的ext4分区结构
在第一个文件的0x600位置找到了一个分区的superblock。此时推测,第一个文件前面有一个扇区(512字节)的特别信息记录。真正的分区开始是从0x200开始的,但是这个分区比较大,一个文件放不下,所以就有了第二个,第三个......文件。
这些文件是如何组织起来的呢?
图16 对比两个文件的前512字节
对比一下两个文件开始的512字节,发现文件前8个字节都是一样的,所以我们大胆地推测,每个文件的第一个扇区都不属于这个分区结构,只是记录了这个文件的相关内容。内容上应该是个串联的关系。也就是说第一个文件结束后紧接着就是第二个文件的开始。
但是这种情况如何把这两个文件组合起来呢?
两种方法:
1:把每个文件的前512个字节删除,保存成新文件,再把第二个文件粘贴到第一个文件后面生成一个完整的分区镜像。这种操作麻烦,生成的文件占用空间比较大,时间比较长。
2:利用winhex的RAID功能JBOD来组合两个文件。
先把两个文件解释为磁盘,再进行JBOD的组合操作。
图17 组合两个文件成一个磁盘文件
下图是组合好的镜像文件,我们可以看到微信的数据库。
图18 组合好的镜像
到此我们用备份的方式取得了用户的数据。
这个方案有一个致命点:
如果recovery中不提供备份用户数据这个功能怎么办?
0x04 问题思考-终极解决方案
如果大家对MTK刷机比较熟悉的话,就会知道官方的刷机工具flash_tool是可以回读手机的内存储数据的。刷机和回读用的都是同一套文件,这里所说的文件指DA,scatter,auth等。我们看一下flash_tool对这几个文件的描述:
图19 DA scatter auth的描述
DA:全称为Download-Agent和PC端进行通讯的工具,这也是最关键的一个文件。每款CPU且每款手机的DA都不一定相同。我所理解的这个DA,应该就是和flash驱动有关系,flashtool工具工作时,da理论上只是上传到cpu的interal ram,配置flash及ram的时序,和PC端进行通讯,执行上传和下载工作。
Scatter:全称为Scatter-loading File,这个文件描述手机的CPU型号及字库的分区信息。
Auth:全称为Authentication File,这个文件用来上传DA时做认证用的。
一款手机只要有了这几个文件一般都能刷机成功。
大家注意:手机只要能刷机,就能回读。
因为手机只认识明文的DA,所以在上传手机的时候,DA一定是原始的状态,如果电脑上的DA有加密,但是上传到手机的时候一定会从加密状态还原成其标准格式的。
下面说一下方案:
1:反编译这个刷机工具,看看文件是怎么解密的。(难!难!难!涉及汇编,动态调试,静态调试,解密等涉及的知识点太多了一般人搞不定。)
2:利用协议抓包工具进行跟踪,看看写到手机上的都是什么数据。(烦!烦!烦!得从成千上万的USB协议中抓到相关的包,并且分析哪些包是有用的哪些是没用的,为了防止丢包,可能要操作成百上千次。也不是一般人能搞定的。)
3:及时解密这个刷机工具中的DA文件及auth文件。(简单!易用!330wang首创及时解密技术,一个加密文件只需要简单的几步就能完成提取。)
这个手机的刷机软件,虽然官方给的工具(MDT_V1620_ForUpgrade_A16)中的DA和auth都是加密的,但是实际刷机时,这些文件还是以明文的方式存放在某一个位置。第二个方案就是利用了上传手机时用明文传输的特性,得到的DA及auth文件。
我们只要找到这个位置,就可以把相关的DA及auth提取出来。进而用flash_tool进行回读操作。
下面省去N+1个字,略去M+1个图。
大家看这是回读后的结果:
图20 处理加密文件后的回读结果
确定能正确回读后,确定一下字库的大小,重新回读整个字库。
二次回读完后,看一下回读后的镜像文件:
图21 镜像文件1
图22 镜像中的分区中的微信目录
0x05 拆机恢复
对于要求时间要求效率的情况下,可以通过拆机的方法进行手机数据获取。
把字库吹下来,放到座子上读取相关的镜像,读完镜像后再把字库焊回手机。
弊端:
1:对操作要求特别熟练,尤其是摘字库和焊字库都需要高超的技术,在操作过程中稍有不慎,就会弄坏机器。
2:对于data加密的机器没有作用。
0x06 总结
碰到加密的手机不要慌,要认真的想想办法,从理论的角度进行论证,从实践的角度进行探索。
这里用到的知识点就是从多年的经验中总结出来的,对于MTK手机,刷机和回读用的都是同一套文件。某些刷机工具只提供刷机功能,对于这样的手机我们要从另一方面进行考虑。
只要能刷机就能回读,对刷机工具不提供回读功能的手机我们可以采用官方的刷机工具flash_tool进行回读。
用flash_tool回读时,只要文件正确就能回读成功。
所以关键在于回读文件的正确提取。
0xFF 关于达思
阿里云加密机型数据提取.zip
(9.33 MB, 下载次数: 48)
|
|