win10自带输入法取证的tips

请注意,本文编写于 1210 天前,最后修改于 1210 天前,其中某些信息可能已经过时。

前言

因为前两天打ctf时候遇到了一个题,挺有意思的。win10默认输入法会记录下词频和一些语句信息。
详细可以参考文章: 输入法取证:一种Windows8/10中文用户输入痕迹信息
文章地址很容易失效,我就提供标题了。
总之就是在
C:\Users\username\AppData\Roaming\Microsoft\InputMethod\Chs 下有两个ChsPinyinUDL.datChsPinyinIH.dat文件里面有记录词频信息。

依据上述基于数据流的逆向测试策略,对两个DAT用户词库文件进行结构分析,发现ChsPinyinlH和ChsPinyinUDL两个DAT文件存储的输入记录信息数据起始位置分别是在文件偏移地址0x1400处和0x2400处,每条用户输入记录信息的存储长度都是固定的,占用60个字节。

结构如下

chsPinyinIH结构.jpg
chsPinyinIH结构.jpg

ChsPinyinUDL结构.jpg
ChsPinyinUDL结构.jpg

最后附上代码

f = open("ChsPinyinUDL.dat","rb")
data = f.read()
data = data[9216:]
f.close()
i = 60
n=1
while True:
    chunk = n*i
    chunk_len = data[chunk+12:chunk+12+48]
    hex_chunk_len = ['%02x' % b for b in chunk_len]
    print(chunk_len.decode("utf-16"))
    n+=1
    if chunk>=len(data):
        break
f = open("ChsPinyinIH.dat","rb")
data = f.read()
data = data[5120:]
f.close()
i = 60
n=1
while True:
    chunk = n*i
    chunk_len = data[chunk:chunk+4]
    hex_chunk_len = ['%02x' % b for b in chunk_len]
    print(hex_chunk_len[::-1])
    unicode_chunk = data[chunk+12:chunk+12+data[chunk]*2]
    hex_unicode = ['%02x' % b for b in unicode_chunk]
    print(hex_unicode[::-1])
    print(unicode_chunk.decode("utf-16"))
    n+=1
    if chunk>=len(data):
        break

效果图

QQ图片20210405001434.jpg
QQ图片20210405001434.jpg

添加新评论

评论列表