由于工作上所接触到的数据的特殊性 , 公司要求电脑上必须加装"易赛通数据泄露防护客户端" , 导致很多常用格式的文件都被加密了 , 文件拷贝到未装易赛通的电脑上打开就是乱码甚至像.xlsx .docx这样的文件甚至无法打开 . 于是决定编写一个文件解密的工具来实现将被加密的文件还原为未加密的状态 .
分析易赛通的主要程序结构:
主进程模块 : CDGRegedit.exe(64位为CDGRegedit64.exe) 负责程序的GUI , 加密策略更新和用户登录等 位于EsafeNet\Cobra DocGuard Client
辅助进程: EstVPN.exe(64位为EstVPN64.exe) 负责守护主进程模块 , 提供主进程模块的保护和重启 位于EsafeNet\Cobra DocGuard Client
驱动 : Filelock.sys 提供驱动层的数据加密 位于Windows\System32\drivers
研究发现易赛通使用驱动对关键API进行Hook的方式实现了文件的加解密功能 , 加解密过程对应用层完全透明 一般的应用层手段都无能为力了 于是我想硬的不行就来软的 一计借刀杀人就实现了文件解密的 , 下面是具体的实现思路
长期观察发现易赛通只在特定的进程名创建和修改文件时进行加密 , 总结出了如下加密规律 .
加密结果 进程名存在于加密进程列表中 进程名不存在于加密列表中 更改文件存在于扩展名列表中 加密 不加密 更改文件不存在于扩展名列表中 不加密 不加密
具体解释一下 , 易赛通会维护两个列表 , 一个是进程名列表 , 一个是进程名对应的扩展名列表
易赛通只在处于进程名列表内的进程名读写特定的扩展名时进行加解密 举个例子 notepad.exe进程在读写.txt文件时会提供加解密服务 , 但在读写.abc的扩展名文件时就不会提供加解密服务 , abc.exe进程在读写任何扩展名的文件时都不会提供加解密服务 , 因为他不在进程名列表中 .
这样一来就好办了 , 既然是通过进程名判断是否提供加解密服务 , 那么使用以下流程就可以实现文件的解密了
借刀杀人的具体实现流程 :
1. 将自己开发的程序的进程名改为进程列表内的进程名 比如:winrar.exe
2. 使用该程序读取已加密的文件 , 此时易赛通会提供解密服务
3. 程序获取到已解密的数据后将数据保存到文件 并将文件的扩展名指定为不在扩展名列表中的扩展名 比如: .temp
4. 使用另外一个程序修改刚才保存的文件的扩展名为原先的程序扩展名
5. 解密完成
从流程看解密过程在第三部实际上就已经完成了 , 下面是具体DEMO的演示动画(图片比较大 , 加载时间长)