跨越手机鉴别采证障碍破解聊天App加密资料库

 更新时间:2016-04-25 09:57:20   作者:佚名   我要评论(0)

手机取证和电脑取证的特性不同,而且还存在着一些瓶颈有等待突破,尤其是当他们商业版的手机鉴别工具力有不逮的时候,就需要鉴别人员发挥经验及技术,在确保手机内资料没有破坏之虞的情况下撷取出重要迹象证明。

本文将以实际案例来加以说明,话说某高科技公司爆发营业秘密外泄案,警方根据所提供的线索锁定一名资历深经理上,怀疑他就是主谋,已敲得包括公务用电脑、个人笔电、智慧型手机和随身碟等相关证据物,送去进行鉴别分析。

初步分析结果发现,上在离职前夕已将笔电和随身碟等进行彻底抹除(Wipe),因此不能在其中查得与案情相关的重要痕迹证据。鉴别团队把焦点锁定在上所使用的Android智慧型手机上,采用现代世界上最顶尖的手机鉴别软体进行鉴别分析,还没有发现任什么可疑迹象证明。

这个结果让见识团队感到困扰迷惑,因此根据警方约谈相关证人的笔录显示,上确实有使用某聊天软体进行通讯,但手机鉴别软身体却没能“看”到上的Android手机里该聊天软体的聊天记录跟踪,让案情陷入胶著。

寻找解决之道 

经过很多次可行性评估的后面,决定采用提权的方式深入手机内部取出该聊天软体的资料库档案,这样才能准确切实掌握相关聊天记录以来原案情真相。

鉴识人员经过一番努力,顺利地提权成功并取出该聊天软体的资料库档案EnMicromsg.db,但没有办法直接开启检查,鉴识人员就对这一资料库档案进行鉴别分析。

研究判是加密的资料库 

取证分析的工作站所采用的作业系统为Ubuntu 14.04.01,而Linux核心是看押位元版本。

通过为智慧型手机上的App所采用的资料库多为SQLite,因此首先要安装SQLite Database Browser以开辟资料库档案。如图1所示,在Software Center输关键字“sqlitebrowser」就可以顺利找到了安装套件。


求图1在Software Center搜寻sqlitebrowser套件。



如图2所示,按下面〔Install〕按钮后,就可以开始安装。


求图2安装SQLite Database Browser。



安装完毕,立即开辟SQLite Database Browser,如图3所示。


求图3 SQLite Database Browser开辟画面。



接著,选取要开启的资料库档案“EnMicromsg.db」,并按下〔Open〕按钮加以开辟,如图4所示。


求图上选取要开启的资料库档案EnMicromsg.db。



却见到如图五所示的错误讯息,没法顺利开启,提示这档案都不是SQLite 3格式的资料库档案。


求图人无法辨认资料库,因此,出现错误讯息。



再以Bless Hex Editor查看该资料库内容,如图6所示发现其内容都是乱码,根据上述研究分析应是资料库存加密所导致。因此,需要先研究出的加密演算法及可能有什么关联的讯息来进行破密。


求图6以Bless Hex Editor开辟后出现乱码。

找出来加密规则 

鉴别人员参考各项资料始终在研究出的加密规则,因此IMEI的十五码加上WeChat UIN的10码所组成的文字串进行MD5 Hash值进行计算,再拿运算结果的前7码,这就是用来开辟加密资料库的Key值。

首先说明什么是“IMEI」,国际行动准备识别码(International Mobile Equipment Identity,IMEI)就是俗称的手机序列号,用於行动电话网路中来识别每一部手机等行动通讯装置,相当于行动通讯装置的“身份证”。

IMEI共有十五位几个字,前6位(TAC)是型号核准号码,代表手机类型。接著二位(FAC)是最后装配号,代表产地。后6位(SNR)是流水号,代表生产序列号。最后一位(SP)一般为0,这是检验码。但什么是“WeChat UIN」,UIN就是User Information的意思,这是WeChat帐户的识别码。

行动通讯装置上的App如果有采用加密机制,用於加密的Key往往会与IMEI或许是该App的帐号有什么关联,或是再加个Salt值进行混淆等,因此诸如此类的讯息是不能轻视的重要线索。

取得IMEI和UIN 

那要如何取得IMEI呢?有以下三种方式,第一个方式是从手机外包盒上可以查看到,第二个就是将手机背盖打开,取出电池后,就可以顺利找到,如图7所示。


求图7手机背后可以找到IMEI。



那第三种方式呢?因此IMEI的保存在手机记忆体中,因此可将手机打开机并输入“* # 06 #」,就可以得到IMEI,如图所示内容。


求图八输入“* # 06 #」也可以找到IMEI。



至于如何取得WeChat UIN呢?其他存放在名为“system_config_prefs.xml」的档案内,它在手机中的存放路径为“/ data / data / com.tencent.mm / shared_prefs /」,如图9所示。


求图9“system_config_prefs.xml」档案在手机中的存放路径。



只要打开打开该档案,搜寻关键字“UIN」,就可以顺利找到它的价值,如图10所示。


求图10搜寻关键字“UIN」,就可以顺利找到它的价值。



能到IMEI和WeChat UIN的后面,就已掌握关键讯息了,接著就可以开始进行破解加密资料库的工作。

计算出加密的Key值 

开辟gedit文字编辑工具,将IMEI和WeChat UIN输入,如图所示储液存在名为“IMEI-and-UIN」的文字档内,以利后续处理。


求图十一将IMEI和UIN存成文字档。



要注意的是,千万不要自作聪明,在IMEI和UIN中间加入连字号或任何符号,那无论怎样都无法计算出正确的Key值。

接著,执行指令“cat IMEI-and-UIN | md5sum | cut一c却是七」,如图所示商。


求图频繁执行的指令Key解出来。



千万别被让这麼长一串指令给吓到了,以下将其拆解成三段来做说明。首先,第一段「cat IMEI-and-UIN」的用意在于读取该文字档中的字串值,同时搭配管线指令(pipe)进行MD5 Hash值的运算;第二段是「| md5sum」,再将执行结果pipe到指令“cut一c却是七」去取得前7码;第三段是「| cut一c却是七」,最后所得到的七个字符就是解开秘密所需要的Key值,如图所示”。


求图》能到Key值。



另一方面,根据他们所使用的加密机制为SQLCipher,这是开源软体,因此可以认为在GitHub等网站顺利取得相关资源。想在取证分析工作站上运行SQLCipher,必须下载sqlcipher_2.1.1-2_amd64.deb和libsqlcipher0_2.1.1-2_amd64.deb这两个套件,如图14所示。


求图14运行SQLCipher所需的两个套件。

然后,执行指令“ar一为什么sqlcipher_2.1.1-2_amd64.deb」,就可以将安装套件解开抽取其内容,如图所示了。


求图帮忙解开抽取sqlcipher_2.1.1-2_amd64.deb套件内容。



其中会产生一个名为“data.tar.gz」的档案,里头有需要的执行档,因此要再进行解压缩。如图所示情况,解除压缩后会产生一个“usr」资料夹,所需的执行档sqlcipher就在里面,其相对路径为“.usr / / bin / sqlcipher」。


求图十六次解压缩才能得到需要的档案。



接著,libsqlcipher0_2.1.1-2_amd64.deb一样是相同的处理方式,如图所示~十七十八,所需的函式库位在相对路径“.usr / / lib / x86_64-linux-gnu」的下。


求图十七解开抽取libsqlcipher0_2.1.1-2_amd64.deb套件内容。



求图或再解压缩才能得到里头的档案。



所有的事情都准备,接著便是重头戏了。开始破解EnMicromsg.db,执行指令如图所示人,先指定LD_LIBRARY_PATH路径,第二次执行sqlcipher,后面所接的档案名称自然是EnMicromsg.db。


求图剖执行SQLCipher。



執行結果如圖20所示,當看到sqlite>提示符號時,就表示已進入SQLCipher 2.2.1的交談模式。 


求图者进入SQLCipher二.2.1的交谈模式。



留意其它有提示SQL指令的末尾需要加上一个部分称为“。”,才能顺利执行不会出差错。首先输入Key值,如图所示来啊。


求图根据输入Key值。



再将cipher_use_hmac的参数值设为“off」,如图所示字,目的只是为了确保能与先前版本相容。


求图她将cipher_use_hmac的参数设置为off。



然后,挂上一个更加严密Key值为空白的资料库,档名为“e600.db」,如图所示连接。留意一下,这里的“e600.db」是可以视需要自行取名字的,并不是一定要叫这个名字不可。


求图连接挂着一个更加严密Key值为空白的资料库,档名为e600.db。



再將EnMicromsg.db的數據利用sqlcipher_export()指令匯入至所掛載的資料庫,經過一段時間之後,當見到如圖24的提示符號sqlite>便表示大功告成了。 


求图一般将EnMicromsg.db的数据汇入到e600.db。



此时,你可以将资料库进行卸载,如图所示执行“DETACH还是DATABASE decrypt_db;」指令。


求图还是将资料库卸载。



最后要退出SQLCipher时,输入指令“.exit」就可以,末尾不需要加“;”,如图所示还多。


求图业退出SQLCipher。



这个时候可以直接用SQLite Database Browser选取“e600.db」进行开启(图二十七),将不会再出现在刚开启EnMicromsg.db时的错误讯息。


求图二十七以SQLite Database Browser开辟e600.db。

拨开云朵看见太阳 

开辟结果如同图中所示,浏览名为“message」的Table就可以看到犯罪嫌疑的聊天讯息记录,例如此和哪些帐号在聊天气、时间点是什么时候、聊天内容是什么等全部一览无遗。


求图中浏览名为message的Table就可以看到犯罪嫌疑的聊天讯息记录。



再仔细看一下“createTime」栏位的时间价值,为了聚会中框架线标示的那一笔聊天记录为例,时间正好是“1429687447000」,这是代表什么意思呢?这是Unix Time的表示法,经过变换计算可以知道当时时间以UTC八表示法为“2015 / 04 /她帮忙:呢」,有兴致的话可自行换算验证一下。


求图聚会时间值为“1429687447000」,这Unix Time表示法。



结语 

鉴别人员让他出浑身解数成功撷取出加密资料库档案并加以破解,最后顺利返回原犯罪嫌疑Android手机中的聊天内容。有人会问道了许:“那WeChat在iOS上的版本的是加密的资料库吗?答案是“并不是这样。”,WeChat在iOS上的资料库就是一个可以直接使用SQLite Database Browser开辟的资料库档案,都没有加秘密保护,其资料库档案名称为MM.sqlite。

至于为什么是这样情况,大概是认为iOS安全性非常高,因此不必为他多费心思考量加秘密保护。随著手机制造业系统的安全性和App的保护机制更加强大稳固,未来在手机取证中所面临的挑战将更形艰难。

相关文章

  • 深入理解nodejs搭建静态服务器(实现命令行)

    深入理解nodejs搭建静态服务器(实现命令行)

    静态服务器 使用node搭建一个可在任何目录下通过命令启动的一个简单http静态服务器 完整代码链接 安装:npm install yg-server -g 启动:yg-server
    2019-02-06
  • 详解webpack编译速度提升之DllPlugin

    详解webpack编译速度提升之DllPlugin

    一、前言 The DllPlugin and DllReferencePlugin provide means to split bundles in a way that can drastically improve build time performance. DllPlu
    2019-02-06
  • Vue从TodoList中学父子组件通信

    Vue从TodoList中学父子组件通信

    简单的 TodoList 实现一个简单的 todolist,当我输入内容后,点击提交自动添加在下面,如下图所示: 用代码实现这个效果: <div id="app"> <input ty
    2019-02-06
  • Tensorflow分类器项目自定义数据读入的实现

    Tensorflow分类器项目自定义数据读入的实现

    在照着Tensorflow官网的demo敲了一遍分类器项目的代码后,运行倒是成功了,结果也不错。但是最终还是要训练自己的数据,所以尝试准备加载自定义的数据,然而d
    2019-02-06
  • ES6 对象的新功能与解构赋值介绍

    ES6 对象的新功能与解构赋值介绍

    ES6 通过字面量语法扩展、新增方法、改进原型等多种方式加强对象的使用,并通过解构简化对象的数据提取过程。 一、字面量语法扩展 在 ES6 模式下使用字
    2019-02-06
  • Redis连接错误的情况总结分析

    Redis连接错误的情况总结分析

    前言 最近由于流量增大,redis 出现了一连串错误,比如: LOADING Redis is loading the dataset in memory use of closed network connection connec
    2019-02-06
  • 使用TensorFlow实现二分类的方法示例

    使用TensorFlow实现二分类的方法示例

    使用TensorFlow构建一个神经网络来实现二分类,主要包括输入数据格式、隐藏层数的定义、损失函数的选择、优化函数的选择、输出层。下面通过numpy来随机生成一
    2019-02-06
  • PHP实现字符串大小写转函数的功能实例

    PHP实现字符串大小写转函数的功能实例

    字符串的大小写转换功能在日常中经常使用。那么如何实现一个简单的大小写转换功能呢&#63; 在php中,最终使用的是c语言的toupper,tolower函数将字符进行大小写
    2019-02-06
  • Nginx代理时header头中带"_"信息丢失问题的解决

    Nginx代理时header头中带"_"信息丢失问题的解决

    前言 开发网关项目时,在请求时往请求头header中放入了签名sign_key信息,在接收请求时再从header中拿出,在本地调试时是可以的,但上线之后通过Nginx代理之后
    2019-02-06
  • Python实现E-Mail收集插件实例教程

    Python实现E-Mail收集插件实例教程

    __import__函数 我们都知道import是导入模块的,但是其实import实际上是使用builtin函数import来工作的。在一些程序中,我们可以动态去调用函数,如果我们
    2019-02-06

最新评论