目标(总体)
我的最终(长期)目标是编写一个将二进制文件导入到另一个应用程序中的导入器。
问题背景
- 我对二进制文件格式中的两个领域感兴趣。其中一个是加密的,另一个是压缩的,可能也是加密的(请参见我如何得出这个结论 here)。
- 我有一个查看器程序(我将其称为viewer.exe),可以打开这些文件进行查看。我希望这能提供一些线索。
- 我很快就会有相关的解密输出进行比较,并有要搜索的值。
- 这是我找到的最相关的stackoverflow Q/A
具体问题
在我拥有的资源下,识别使用的算法的最佳策略是什么?
当前想法
我意识到如果没有密钥,仅从数据中识别算法几乎是不可能的。
拥有一个文件和一个viewer.exe,我必须在某个地方有密钥。无论它是公共的,私有的,对称的等等......弄清楚这一点将是不错的。
我想使用OllyDbg和findcrypt插件来反汇编viewer.exe作为第一步。我只是不熟练处理这种事情,无法完成。
资源
完整示例文件
我感兴趣的领域中提取的二进制文件
解密数据在此zip归档中,有一个表示x,y,z的浮点数的二进制列表(model2.vertices),以及一个二进制的整数列表(model2.faces)。我还包括了一个“stl”文件,您可以使用许多免费程序查看,但由于数据存储在STL的奇怪方式,这不是我们期望从原始文件中导出的内容。
进展
1. 我使用Olly进行了程序反汇编,然后在程序导入文件之前暂停后,做了我唯一知道的事情,“搜索所有引用文本”。然后,我搜索了像“crypt,hash,AES,encrypt,SHA”等单词字符串。我找到了很多东西,最明显的是“Blowfish64”,它似乎与我的数据偶尔多4个字节很搭配(而且由于保证mod 12 = 0),这对我来说看起来像是填充64位块大小(奇数数量的定点会导致非mod 8数量的字节)。我还发现了错误消息,如...
“Invalid data size, (Size-4) mod 8 must be 0"
在阅读Igor以下回复后,这是signsrch的输出。我已经更新了这张图片,并用绿点标出,当用int3替换时不会出现问题,如果程序无法启动,则为红色,如果在加载感兴趣的文件时失败,则为橙色。没有点意味着我尚未测试它。
附属信息
- 我使用的是Windows 7 64位操作系统
- viewer.exe是Win32 x86应用程序
- 数据已经进行了base64编码和加密
- 解密后的数据是一组12个字节,代表3个浮点数(x、y、z坐标)
- 我使用的是带有findcrypt插件的OllyDb v1.1,但我的用法仅限于跟随这个家伙的YouTube视频