数据加密原理分析及解密工具开发在一起案件中的应用
任风凯, 巩方志
山东省滨海公安局刑事科学技术研究所,山东 滨海 257100

第一作者简介:任风凯,男,山东德州人,学士,高级工程师,研究方向为电子物证检验。E-mail:renfengkai@163.com

摘要

由于违法犯罪嫌疑人反侦查意识的增强,涉案的TF卡、U盘等存储介质内往往含有加密文件。在这些加密数据中往往包含着对侦查、起诉更有价值的信息。在这种情况下,对其中的数据进行解密成为数据能否成功提取的关键。本文针对一起涉及邪教案件中的加密解密原理进行研究,详细分析了基于异或运算的加密原理、解密原理及其方法,从而根据原理设计可以快速获取密钥的解密软件。在本案中,检验人员从检材中提取出加密程序,进行加密实验,通过对比加密前和加密后的数据,分析加密原理,研究解密方法。为了提高解密效率,检验人员通过C#语言开发Windows窗体应用程序,设计出了解密工具TFCrack。通过TFCrack可以方便快速获取密码,通过获取的密码可以快速解析出隐藏的数据。

关键词: 电子证据; 移动加密; 异或运算
中图分类号:DF793.2 文献标志码:B 文章编号:1008-3650(2012)02-0188-05
Tool Development from Analysis into the Principle of Data En-/De-crypting through a Case Solving
REN Fengkai, GONG Fangzhi
Institute of Criminal Science and Technology, Shandong Provincial Direct-governed Binhai Public Security Bureau, Dongying 257000, Shandong, China
Abstract

With the aggravation of anti-investigation awareness of criminal suspects, the encrypted files are often found in the case-involving TF cards, U disks and other storage media. These encrypted data ordinarily contain valuable information for investigation and prosecution so that decrypting the data becomes crucial for the data to extract successfully. Here, the principle of data encryption and decryption was explored into a cult-involving case based on XOR operation, thereby making it designed of the decryption software that can acquire the relevant passwords rapidly. Accordingly, the investigators extracted the encryption program from the tested materials, reversely conducting the encryption verification through analyzing both the principle and method into the encrypting/decrypting data before and after ciphering. In order to improve the efficiency of decryption, the investigators further developed one Windows-performing application through C# language, having devised a decryption tool, TFCrack. Therefore, the passwords can be easily and quickly obtained, and the hidden data resolved swiftly.

Keyword: electronic evidence; mobile encryption; XOR operation

在电子物证检验工作中, 难免会遇见含有加密数据的检材, 尤其是涉及邪教组织的案件, 数据加密现象更普遍。如何对数据进行解密, 成为电子物证检验分析人员十分关注的一个重要课题。通过解密, 可以获取大量与案件相关的电子数据, 对此出具检验报告后可以为案件提请逮捕、移送起诉提供重要的证据支撑。解密出的数据也对案件拓展侦查线索起到重要作用。笔者在检验一起涉及邪教组织的案件过程当中, 就遇见一种移动加密软件, 通过对其进行分析, 了解其加密原理, 自行开发设计解密软件, 在几十张TF卡内成功解密出多达200 GB的涉案数据, 其中含有邪教组织人员名单等重要数据。

1 案例

2017年12月, 山东省滨海公安局刑事科学技术研究所受理一起利用邪教组织破坏法律实施案的电子物证检验。在受理的案件检材中, 大量的TF卡内含有加密程序及文件。如果不能有效破解, 认定案件事实就有一定困难, 也不能有效地惩治犯罪嫌疑人。

2 对加密检材的分析
2.1 初步分析

将送检的TF卡通过只读接口插到取证设备上后, 通过资源管理器可以看到卡内存有大量数据, 但双击打开TF卡后, 在卡内却只发现了一个406 KB大小的“ 时间.mkv.exe” 程序, 通过文件夹选项勾选“ 显示隐藏的文件、文件夹和驱动器” 后, 没有变化, 将 “ 隐藏受保护的操作系统文件(推荐)” 选项取消后, 发现多了文件夹“ Thumbs.dn” 和一个“ desktop.ini” 文件, 此时发现文件夹“ Thumbs.dn” 的大小和卡内数据的大小基本上一致, 所以该文件夹就是解密的关键, 双击该文件夹却只能进入添加打印机窗口, 无法查看数据。通过Xways-Forensic 19.2导出“ Thumbs.dn” 文件夹, 双击后仍然只能进入添加打印机窗口, 无法正常查看数据[1]。在TF卡根目录下双击“ 时间.mkv.exe” 程序, 发现窗口标题为“ 移动解密” , 提示输入“ 解密密码” 。而将该程序导出到本地文件夹内再运行时, 弹出窗口的标题变为“ 移动加密” , 提示输入“ 加密密码” 和“ 重输密码” 。由此可以进行初步推断, 该“ 时间.mkv.exe” 程序可能就是TF卡内数据的加密程序。

2.2 加密实验

为进一步确定推断, 以及分析加密方法和原理, 进行相应的加密实验:

1)取一实验用的TF卡, 编号为TestTF, 格式化后, 在卡内拷入文件若干个, 大小合计2.55 GB(根据TF卡的容量确定拷入文件的大小)。

2)将送检检材内的“ 时间.mkv.exe” 程序拷贝到TestTF卡的根目录下。

3)双击运行“ 时间.mkv.exe” , 此时程序要求设置加密密码, 并进行重输验证, 为方便实验, 设置密码为“ 1111111” , 点击“ 加密” 。

4)此时发现TestTF卡内只剩下“ 时间.mkv.exe” 程序, 其他文件都消失, 通过资源管理器查看TestTF卡属性, 发现已用空间为2.55 GB。

5)通过文件夹选项勾选“ 显示隐藏的文件、文件夹和驱动器” , 将文件夹选项中“ 隐藏受保护的操作系统文件(推荐)” 前面的勾去掉, 发现多了文件夹“ Thumbs.dn” 和一个“ desktop.ini” 文件, 且发现T“ Thumbs.dn” 文件夹的大小为2.55 GB。

通过进行以上实验, 印证了之前的推断, 该“ 时间.mkv.exe” 程序可能就是TF卡内数据的加密程序。

2.3 分析加密结果

通过以上实验发现, 该加密软件将TestTF卡内原始文件生成“ Thumbs.dn” “ 时间.mkv.exe” “ desktop.ini” 三个文件。其中“ Thumbs.dn” 文件夹内就是加密前文件夹内文件的存放位置, 通过增加系统扩展名来改变双击后的效果, 显示的是控制面板里的打印机图标(双击如同打开控制面板的打印机)。通过使用Xways-Forensic 19.2打开进行了移动加密的文件夹, 进入“ Thumbs.dn” 文件夹目录, 可以发现该文件夹内文件与加密前TestTF卡内文件机构、大小基本是一致的, 只是文件名称被更改, 但是文件整体或者单独导出后, 都无法直接点开查看文件内容。同时我们发现文件夹内含有一个无扩展名的名为“ 117789687” 的文件, 用文本文档查看其内容为“ 34353435343534” 。猜想该文件字符串可能与我们之前设置的密码有关。为了印证这一猜想, 用同样的加密实验进行分析, 对比设置的密码和“ 117789687” 文件内的字符串, 加密试验统计情况见表1

表1 加密试验统计表 Table 1 Encryption tested

通过进行大量类似的实验, 对比前后数据, 分析加密特点[2], 总结规律后发现, 该“ 117789687” 文件内存储的即是进行加密后的密码密文。

2.4 加密软件的加密原理

分析表1中的数据, 两两对比加密的结果, 可以总结出加密过程的以下规律:

1)每个字符加密后, 在密文中体现为两位字符;

2)奇数位或偶数位的相同字符, 对应的密文是固定的;

3)同一个字符, 分别位于明文的奇数位和偶数位时, 对应的密文不同;

表1中的数据, 我们不难梳理出部分字符的密文对照表(表2)。

表2 UTF-8编码和密文对照表 Table 2 UTF-8 ciphering and the numerals from encrypting

在上表中, 字符8的16进制编码为38, 而对应的密文为“ 3D” 或“ 3C” , 字符9的16进制编码为39, 而对应的密文为“ 3C” 或“ 3D” , 再结合其他字符的密文, 我们可以推断密文的表示形式也是16进制[3]。由明文到密文到底经过了怎样的转换呢?先以字符4举例分析, 4的16进制编码为34, 奇数位密文为31, 为了便于发现加密的规律, 我们先将其转换为二进制:

34的二进制形式:0011 0100

31的二进制形式:0011 0001

观察二进制的后四位, 我们很容易发现, 0100只需与0101进行异或运算就可得到0001。关于异或运算, 其运算符为⊕, 简单说就是“ 同0异1” , 即1⊕1=0, 0⊕0=0, 0⊕1=1, 1⊕0=1。异或运算是一种常见的简单的位运算。关于异或运算, 下文有详细介绍。因为34和31的二进制前四位是一样的, 所以00110100⊕00000101=00110001, 即34⊕5=31。按照该思路继续分析2的偶数位密文, 发现00110100⊕00000100=00110000, 即34⊕4=30。

我们继续分析其他字符的, 同样存在这样的规律, 总结如下:

1)加密软件对密钥加密时, 先进行编码转换, 将字符逐个转换成16进制UTF-8编码格式。例如, 数字1对应的编码为31, 数字2对应的编码为32, 等。

2)对密钥进行编码后, 加密软件通过异或运算得到密码的密文。具体运算规则如下:先将编码转换为二进制格式; 对于奇数位的密钥字符, 二进制编码与数字“ 5” 的二进制形式进行异或运算, 而对于偶数位的密钥字符, 二进制编码与数字“ 4” 的二进制形式进行异或运算。将二进制形式结果按16进制转换为字符, 按顺序进行拼接即是加密密码的密文。

将密文字符串存储在“ 117789687” 文件内, 并对数据文件的扩展名全部更改为“ mem” 后进行隐藏。所以该加密软件并没有直接对数据进行加密, 而是对输入的密码进行加密, 并对数据文件进行隐藏。运行该软件, 输入正确的密码后, 所有的文件会很快出现在加密程序所在的目录下。若不进行解密, 只能看到添加打印机界面。

3 使用替换法进行解密

在密码未知的情况下, 可先通过替换法进行解密。首先新建空文件夹test, 将卡内自带的加密程序拷贝到test内并运行, 自己可以随意设置简单的密码, 如11, 点击“ 加密” 后, test文件夹内会生成“ Thumbs.dn” 文件夹, 将其拷贝到需要解密的文件夹内, 提示“ 117789687” 文件重复, 选择进行替换。此时运行加密文件夹内解密程序, 输入自己预先设置的密码, 会发现隐藏的文件出现了。不过该方法会丢失掉部分文件的文件名称和扩展名。对于加密文件比较少的TF卡可以替换法来解密, 但是对于卡容量较大, 如32、64 GB的TF卡, 加密文件比较多, 文件类型又不好获取的情况下就需要先获取原始的密码。使用替换法解密后, 加密前和解密后文件夹内文件对比见图1。

图1 加密前(左)和替换法解密后(右)文件夹内的文件Fig.1 Files in the folder before encryption (left) and after decryption (right) with substitution approach

4 使用计算机编程法进行解密

该案送检检材中, 仅TF卡就有200余张, 而且相当一部分卡内都含有加密的程序和加密电子数据。在限定的期限内, 逐个使用替换法进行解密是不可行的, 一是无法保证检验效率, 二是无法保证数据的完整性, 会丢失部分文件信息。于是笔者使用Visual Studio 2013编写了Window窗体应用程序, 可以直接获取密钥, 并且可以保证数据的完整性。

4.1 解密的原理

在了解解密原理前, 首先需要了解异或运算。异或(xor)是一个数学运算符, 它应用于逻辑运算。异或的数学符号为“ ⊕” , 计算机符号为“ xor” 。其运算法则为:

a⊕b = (¬ a ∧ b) ∨ (a ∧ ¬ b)

即如果a、b两个值不相同, 则异或结果为1; 如果a、b两个值相同, 异或结果为0, 即“ 同0异1” 。如进行3⊕8时, 需要先进行二进制的转换(因为异或是位运算), 3的二进制是“ 0011” , 8的二进制是“ 1000” 那么在进行3⊕8时:

0 0 1 1(3的二进制)

⊕ 1 0 0 0(8的二进制)

__________________________________

1 0 1 1(11的二进制)

即1011 为十进制 11, 所以3⊕8=11。异或运算满足一定的法则, 其中的两条是:

1)A⊕B=B⊕A

2)A⊕B⊕A=B

所以我们可以得出这样的结论, 在密码明文P进行异或运算得到的密码密文X后, 只需对X进行相同的运算就可以再次得到P。这就是进行编程解密的核心原理。异或运算在计算机中普遍运用, 性质上属于位运算。位运算是非常迅速的, 因为它直接对内存中的二进制数据进行操作。

4.2 设计解密工具的窗口界面

在本案中, 笔者选用C#作为编程语言, 选择Microsoft Visual Studio作为开发工具。Visual Studio可以很方便地进行窗口应用程序的开发, 其特点是运行速度快, 具有可视化的界面编辑器, 并且与Windows的兼容性比其他开发工具要好。解密工具命名为TFCrack。

4.3 获取加密文件夹路径

使用窗口程序的Textbox控件可以直接获取加密文件夹的路径。只有先获取了路径才能对存储密码的文件和需要获取的数据进行准确的定位。

4.4 获取加密后的密码

C#语言中的FileStream类表示在磁盘或网络路径上指向文件的流, 其可以对文件系统上的文件进行读取、写入、打开和关闭操作, 其所属的命名空间为System.IO[4]。使用FileStream类可方便地将“ 117789687” 文件中加密后的密文字符串读取到程序中。FileStream对象支持使用Seek方法对文件进行随机访问。Seek允许将读取/写入位置移动到文件中的任意位置。这是通过字节偏移参考点参数完成的。字节偏移量是相对于查找参考点而言的, 该参考点可以是基础文件的开始、当前位置或结尾, 分别由 SeekOrigin 类的三个属性表示。

4.5 编写基于异或运算的解密方法

异或运算进行加密是可逆的, 所以, 在进行解密时, 对加密后的密码进行相同的运算即可解密出原密码。首先使用C#中的String.Substring方法对获取的密文字符串进行截取, 截取的长度为2。截取后的字符想要进行异或运算, 就要先转码, 这里使用Convert.ToInt32方法, 把截取后的string类型变量value转为int类型变量number, 再对number进行异或运算。根据对加密软件的实验结果, 进行相应的逆向运算:如果截取的字符对应的是奇数位的密码字符, 则把number与“ 5” 进行异或运算; 如果截取的字符对应的是偶数位的密码字符, 则把number与“ 4” 进行异或运算。需要注意的是, 异或运算是位运算, 所以在运算前, 都是先转为二进制形式, 再按位进行异或。把运算的结果转换成整数型, 通过C#语言自带的Encoding.UTF8.GetString方法, 可以直接将运算结果转换为UTF-8字符编码对应的字符, 所以这里直接调用即可。最后所有转换好的字符连在一起就是原始密码了。UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码, 又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。因为在加密时使用了该编码, 所以解密是就进行相应的逆运算。

4.6 生成解决方案

将代码进行编译, 生成可执行程序TFCrack.exe。经过试验发现, 使用该程序解密出的数据与加密前的数据没有差别, 经过使用Xways Forensic19.2对加密前和解密后的文件计算哈希值(MD5), 发现哈希值是完全一致的。所以该程序可以保证数据的完整性[5]

4.7 TFCrack使用方法

第一步, 首先在本地磁盘下面新建名为recovery(文件夹名字可以随意起)的文件夹;

第二步, 使用Xways-Forensic、Total Commander等工具软件从加密的TF卡中拷贝出“ 时间.mkv.exe” “ Thumbs.dn” 两个文件到recovery文件夹下面;

第三步, 运行TFCrack.exe解密程序, 点击“ 选择加密文件夹路径” 并选中recovery文件夹;

第四步, 点击“ 获取密码” 即可获取密钥;

第五步, 运行“ 时间.mkv.exe” , 输入密钥, 选中完全解密, 点击“ 解密” 按钮, 加密的文件就会全部出现在recovery文件夹下面。

加密前和解密后文件夹内的文件对比图见图2。

图2 加密前(左)和TFCrack.exe解密后(右)文件夹内的文件Fig.2 Files in the folder before encryption (left) and after decryption (right) by TFCrack.exe

5 注意事项

1)有些存储介质, 如TF卡、SD卡、移动硬盘等, 在资源管理器中看是空的, 用Xways Forensic进行签名恢复也只能恢复出有限数据。这种情况是因为“ Thumbs.dn” 文件夹被删除, 只需要用Xways Forensic打开存储介质, 进行人工恢复导出即可。

2)在该案中, 有些加密程序的扩展名被涉案人员更改, 如“ 时间.mkv.exe” 被更改为“ 时间.mkv.mp3” “ 可惜没有如果.mp3” 等形式, 但是大小都是406 KB。在解密时, 只需将扩展名手动更改为“ exe” 即可。

3)在进行检验时, 一定要将“ Thumbs.dn” 文件夹及“ 时间.mkv.exe” 文件导出到本地同一目录下, 才能获取密码。

6 结论

随着存储介质的不断发展和涉案人员反侦查意识的不断增强, 移动加密方法还会不断更新, 但是只要掌握了其加密的原理, 就可以科学地制定应对之策, 根据其原理开发相应的解密工具。基于异或原理的加密方法加密速度快, 能很好地保证数据原始性, 目前使用比较普遍。在本案中, 通过计算机编程方法开发设计出专用的解密工具, 大大提高工作效率, 使大量加密检材在案件提请批准逮捕期限内检验完毕, 为相关犯罪嫌疑人的成功批捕提供了重要证据。

参考文献
[1] 罗洁, 张国臣. 谨防电子物证提取和检验中的“污染”[J]. 刑事技术, 2007(2): 43.
(LUO Jie, ZHANG Guocheng. Beware of electronic evidence “polluted” when distilling and extraction[J]. Forensic Science and Technology, 2007(2): 43. ) [本文引用:1]
[2] 曹雪虹, 张宗橙. 信息论与编码[M]. 北京: 清华大学出版社, 2016: 92-121.
(CAO Xuehong, ZHANG Zongcheng. Information theory and coding [M]. Beijing: Tsinghua University Press, 2016: 92-121. ) [本文引用:1]
[3] 李莹. Windows程序开发—基于Visual Studio 2013[M]. 北京: 清华大学出版社, 2015: 15-65.
(LI Ying. Windows program development - basing on Visual Studio 2013 [M]. Beijing: Tsinghua University Press, 2015: 15-65. ) [本文引用:1]
[4] 高志鹏, 张志伟, 孙云峰. 识数寻踪-WinHex应用与数据恢复开发秘籍[M]. 北京: 人民邮电出版社, 2013: 51-75.
(GAO Zhipeng, ZHANG Zhiwei, SUN Yunfeng. Identifying data for tracing - the application of WinHex for data recovery and development [M]. Beijing: Posts & Telecom Press, 2013: 51-75. ) [本文引用:1]
[5] 张焕国. 信息安全工程师教程[M]. 北京: 清华大学出版社, 2016: 25-69.
(ZHANG Huanguo. Course for information security engineer [M]. Beijing: Tsinghua University Press, 2016: 25-69. ) [本文引用:1]