0

    小众即时通讯分析-聊天字段解密

    2023.04.30 | admin | 278次围观

    相信大家在平常的手机取证工作中,会频繁的遇见一个问题,那就是小众的即时通讯工具的解析。这些小众聊天工具一般没有官网,很难被各大厂商智能支持,绝大多数情况下都是需要人工分析。大家采取的最多的方式应该都是拍照或者截图吧。接下来我们一起来了解一下即时通讯分析分析的常见方法和问题技巧。

    首先我们遇到最多的小众即时通讯工具,它们大多都是不加密的,如果遇见,需要做的就是提取这个应用的数据库,然后打开浏览即可。其实我们说的应用解析就是数据库中聊天记录表结构的重构。简单来说就是数据库的重构。本次分享主要有两个例子,一个主要是讲解方法,例子本身比较简单,不涉及加密;另一个比较有意思,它的数据库同样不加密,但是聊天内容在数据库中是加密的密文,需要我们解密。我们先看看第一个例子。

    例子一:

    程序名称:Fincy

    应用程序包名:lxtx.im.app

    实验环境:雷电模拟器3.37

    APK运行环境:安卓5.1

    分析步骤:

    1. 获取实验素材:导出原始APP素材

    2. 简单逆向,查看配置文件

    3. 安装测试,制作数据

    4. 提取数据,查看数据库

    第一个步骤:获取原始素材的方法有很多个,大家可以根据自身情况选择使用

    利用厂商取证软件导出APK文件,这里以盘古石手机取证分析系统为例。

    可以看的出来,它需要你打开需要提取的应用。

    2. 可以使用市面上的手机助手,比如各大手机厂商的官方手机助手,它们在备份的时候都可以选择备份的应用。选择应用的时候通常可以选择APK和数据,如果我们只需要APK包,那就只勾选APK就好,这里就不做演示了。

    3. 可以手工ADB导出,适用于爱动手的小伙伴,这个其实也是软件导出的原理。它和取证厂商导出其实一样的,但是会有一个好处,就是不需要安装一个代理程序,因为大部分公司做这步时,还是会先推送一个代理程序用于提权和数据转发的,其实这里没有必要。接下来我来演示一下:

    3.1 同样确定手机和计算机相连,需要adb环境,如果常用的,可以把adb添加进环境变量,这个大家不了解的可以自行百度。

    3.2 adb devices 这里为了方便展示,以模拟器为例

    3.3 启动软件输入这个命令:adb shell dumpsys activity top 很多大佬喜欢用这个命令来捕获包名

    但是我不喜欢,因为这个命令输出的信息太多了,我喜欢用这个非常简洁准确,输出信息只有一行:adb shell dumpsys window | findstr mCurrentFocus

    这样我们就获取到了包名:lxtx.im.app

    3.4 adb shell pm path lxtx.im.app 查看安装包所在路径

    3.5adb pull /上图的路径 /本地路径 导出安装包

    这样就提取出来了这个APK,这种方法适用所有的安卓手机。其实这上面的这几个命令是可以写成批处理脚本或者Python脚本一键执行的。感兴趣的可以自己编写一下,这里就不过多介绍了。了解原理和方法就行。

    第二个步骤:简单逆向,查看配置文件,这一步的目的其实从分析角度来说主要是观察这个属性allowBackup是否="true“,因为这个属性会决定它是否支持ADB备份。如果这个属性是”true“,那么后面数据提取就可以用adb backup来备份,这样是最快的。否则数据提取就是一个问题。我们可能需要借助各类的手机助手来实现高级备份,如果有的案件中的手机没有官方提供的备份协议,那么数据提取就几乎不可能了。

    当前这个APK它是允许备份的,所以这个APK我们是可以直接利用ADB接口直接备份,无论装在什么型号的手机其实都可以直接备份,而且数据提取还很快。

    不过这个例子我们先用个取巧的方式,下一个例子再用ADB接口获取。

    第三个步骤:我们用模拟器安装这个应用,并初步制作一些聊天记录,以便于我们分析数据库。

    第四个步骤:提取数据,查看数据库

    这里我们利用模拟器的便利性,因为首先模拟器有ROOT权限,所以做实验会非常方便,只要应用正常安装并且正常打开,实验就很方便。

    我们直接利用文件中转来导出数据:首先要知道需要提取的数据存储在什么路径,其实绝大多数应用的数据库都存放在/data/data/包名/databases/。我们先打开文件管理找到它。勾选这个目录,然后打开共享文件,打开电脑文件夹和安卓文件夹,在安卓文件夹中点击菜单,粘贴选择项。之后在电脑文件夹中就可以看到这个文件夹了。

    因为小众的聊天工具数据库一般不会太复杂,所以一一浏览很快发现存储聊天记录的库和表,这里就不详细展开了,接下来我们来看第二个有意思的例子。也是一个真实的案例。

    例子二:

    程序名称:亿般

    应用程序包名:com.example.xunfei

    应用程序图标:

    实验环境:逍遥模拟器7.5.2

    APK运行环境:安卓4.4

    Hook框架:xpoesd

    Hook插件:hook AES算法的自定义插件

    也做过真机实验:谷歌原生安卓10

    同样的实验步骤,但是多一步

    分析步骤:

    1.获取实验素材:导出原始APP素材

    2.简单逆向,查看配置文件

    3安装测试,制作数据

    4.提取数据,查看数据库

    5.解密加密聊天内容

    前三步与上面的例子一样,就不浪费篇幅了介绍了,我们这里直接进行第四步:提取数据

    这次我们用不一样的手法,提取真机的这个应用的聊天数据库。

    同样也是因为配置文件中定义的备份属性是允许,所以我们才能在这个原生安卓系统中提取这个应用的数据,否则它也没有历史的可以降级的版本,而这个安卓10也几乎无法ROOT,那么它的数据就非常难提取出来,这里因为偷懒,我就没有直接用adb命令来提取了,直接使用的盘古石手机取证系统的PanADB来直接降级提取,提取完成,直接右击导出即可。

    这样就得到了这个应用的数据库,当然如果还需要进一步解析附件或者其他,那么我们还需要慢慢实验分析其他数据,这里仅仅只是分析聊天的数据库。

    我们很快找到了数据库,因为库很少,很快就浏览了一遍,但是发现并没有找到和我们制作的聊天记录能对应的表,所以很奇快,又回去分析了其他文件,发现确实没有聊天记录,但是不联网确实还是能看到聊天记录,说明一定缓存在手机里面的。所以我又仔细看了数据库发现有一个表高度可疑,大家来看看:

    聊天记录我制作了7条,数据库中也是对应的7条记录,同时我也验证了时间戳确实也是一致的,这里说明应该聊天内容被加密处理了国内可以用的加密聊天软件,没有存储原文。

    然后在表里后面还有一个字段也很可疑,因为里面有一个code的值是明显的base64编码。我们先开始简单的去HOOK一下标准的加密算法,看看情况。

    这里直接使用的是DDMS配合Xposed来观察hook结果。

    我们还是尝试发送一个:“你好呀“,看看HOOK结果

    我们发现发送“你好呀“ hook到了AES算法加密,并且获取到了密文:6qh5Z5CCn8roGTmWgVkvA==,然后我们发现数据库第一个code也是它。数据库第一个记录应该对应着“你好呀”

    这里我们简单的找个在线加密的网站验证一下是否正确:

    首先我们HOOK到的有:

    算法类型:AES/CBC/PKCS5Padding

    IV:16-Bytes—String

    SecretKeySpec: oWcPk4Ep5lisD8NZ

    我们先验证解密:

    密文:6qh5Z5CCn8roGTmWgVkvA==

    我们在验证第二个聊天内容:

    密文是:wBZI67kILsH+Wsw4G8jpoHwSkroqIeKPzkvxW6qpZkg=

    在线解密:包括换行都是完整还原的,所以分析到这就明白了。

    这个应用数据库不加密,但是聊天内容存储在数据库是加密的,加密用的标准的对称加密算法AES/CBC/PKCS5Padding;IV向量:16-Bytes—String;SecretKeySpec: oWcPk4Ep5lisD8NZ。

    至此我们只要知道原文或者密文其中的一个都可以根据这个加密方式获取另一个值,那么这个应用就可以正常解析了,这个其实也是因为截图有时候工作量太大,可能需要截上千张图。那其实还不如手工解析一下。

    这个时候,我们只需要会python编写一个解密的脚本,然后进行表结构的重构,可以只要发送者国内可以用的加密聊天软件,接收者,发送时间,聊天内容这几个字段。然后最后选择数据入excel表就算是完成了一次最简单的应用解析了。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论