NanaZip icon indicating copy to clipboard operation
NanaZip copied to clipboard

关于多文件哈希校验的一些疑问

Open MMMMMoris opened this issue 1 year ago • 1 comments

今天怀疑中了勒索病毒,想用哈希校验做些测试。

有两个不同的文件夹,文件夹下的文件数目是一致的,但是文件名不一致。

我的目的是,分别校验两个文件夹下所有文件的哈希总和,然后对比。

我当时想到了NanaZip,因为之前用NanaZip 对多个文件做校验的时候,很惊奇这出来的结果竟然不是各自的哈希,而是总的哈希!

用来试了一下,校验结果是两个文件夹下各个文件单独校验的哈希值完全不同,所有文件总和的哈希一致

现在有个疑问是,NanaZip 是怎么校验所有选中的文件的哈希总和的?

请问原理是把所有文件的元数据加起来计算一遍总的元数据的哈希,

还是把所有文件分别计算出哈希数值之后,再对这些哈希数值进行哈希运算?

这个过程能用PowerShell 的 get-hash 函数配和其他函数实现吗?

MMMMMoris avatar Dec 09 '23 02:12 MMMMMoris

建议看 https://github.com/M2Team/NanaZip/blob/61723a7eb2472dc1b8fbbc06bba70775eff84ec9/NanaZip.UI.Modern/SevenZip/CPP/7zip/UI/Common/HashCalc.cpp 的实现。看上去是用正常的 EnumerateItems 列文件,然后对每个不是文件夹的东西都整个读入跑 hb.Update,没有把文件名混进去。

大概的调用栈,也是我找到有 HashCalc 这个东西的过程

右键菜单会从这里调用 CalcChecksum,使 arcFileName 为空 https://github.com/M2Team/NanaZip/blob/61723a7eb2472dc1b8fbbc06bba70775eff84ec9/NanaZip.UI.Modern/SevenZip/CPP/7zip/UI/Explorer/ContextMenu.cpp#L1250-L1251

CalcChecksum 会……变成命令行 h -scrc ... -i ...? https://github.com/M2Team/NanaZip/blob/61723a7eb2472dc1b8fbbc06bba70775eff84ec9/NanaZip.UI.Modern/SevenZip/CPP/7zip/UI/Common/CompressCall.cpp#L374

然后进 Main 调 HashCalc... https://github.com/M2Team/NanaZip/blob/61723a7eb2472dc1b8fbbc06bba70775eff84ec9/NanaZip.UI.Modern/SevenZip/CPP/7zip/UI/Console/Main.cpp#L1456

发现有个 hashOptions 没跟上,去看 parser.Parse1 里面设置这玩意的东西…… https://github.com/M2Team/NanaZip/blob/61723a7eb2472dc1b8fbbc06bba70775eff84ec9/NanaZip.UI.Modern/SevenZip/CPP/7zip/UI/Common/ArchiveCommandLine.cpp#L1634 ……看上去只是砍文件名砍到了相对级别,应该不影响我们 NWildcard::k_RelatPath

Artoria2e5 avatar Jan 01 '24 07:01 Artoria2e5