地址
题目地址: buuoj.cn/challenges#…
说明
在这道题里面,最终的一个VOL加密文件,可以通过passphrase和masterkey两种方式进行解密挂载。passphrase解密挂载的方式夏风师傅的博客里面有说,接下来我介绍一下masterkey的挂载方式。
masterkey解密挂载
首先要提取出内存中保留的masterkey文件,根据这个题目的mem.raw文件,我们做了以下尝试: dump cached password truecrypt的进程的内存中可能保留了cached password和masterkey。

故我们先尝试password:
python vol.py -f mem.raw
--profile=Win7SP0x8 truecryptpassphrase
无果 之后尝试masterkey
python vol.py -f mem.raw --profile=Win7SP0x8 truecryptmaster -D .

MKDecrypt.py VOL ./0x837f51a8_master.key
之后可以看到挂载成功的信息


问题来了
那么问题来了,为什么masterkey和pasword解密之后的结果会不一样,按照truecrypt解密的原理,truecrypt先使用pasword解密加密容器的文件头,从文件头中获取这个容器的加密方式和masterkey,之后再使用这两个已知的东西对加密容器进行解密并动态挂载,即把masterkey和pasword暂存在内存中,读取一部分文件解密一部分,并不完全解密。如果这个加密容器只有一个masterkey的话,那么password解密文件头出来的masterkey应该是和之前内存中dump出来的是一致的,解密的结果也一样。那么我们先尝试dump出password解密文件头出来的masterkey。 首先还是一样的步骤,使用password挂载VOL文件,但是环境则是在vmware里面的windows虚拟机里面运行,记得内存设置小一点,挂载成功之后挂起虚拟机之后在虚拟机目录下会出现一个mem文件,使用相同方法在这个文件里面dump出masterkey和password。

发现,这个dump出来的masterkey和之前的不一样,也就是说这个password解锁的文件头里面的不包含之前那个masterkey,而是另一个masterkey,那么为什么会这样呢?这就涉及到truecrypt的隐藏分区机制了。 设想一下如下场景:
一个歹徒拿着刀逼问你加密磁盘的密码,你迫于无奈只能告诉他。或者战争时期敌军严刑拷打我方特务的时候,只有告诉密码才能赢得生机。
我们常见的truecrypt加密磁盘容器如下一图,分为文件头,加密数据区,随机数据区,通过密码解锁文件头里面的加密方式和密钥信息可以获得加密后的数据。

MKDecrypt.py VOL ./0x818471a8_master.key
会提示Masterkey does not decrypt a normal/outer volume. Trying for a hidden volume...

参考
参考了夏风大佬的博客: blog.xiafeng2333.top/ctf-25/ 以及官方文档 www.truecrypt71a.com/documentati… ** 这个PPT挺不错** downloads.volatilityfoundation.org/omfw/2013/O…