Encryption 反汇编识别加密算法

Encryption 反汇编识别加密算法,encryption,reverse-engineering,disassembly,Encryption,Reverse Engineering,Disassembly,目标(一般) 我的最终(长期)目标是将二进制文件的导入器写入另一个应用程序 问题背景 我对二进制文件格式中的两个字段感兴趣。一是 加密,另一个是压缩的,可能也是加密的 (看看我是如何得出这个结论的) 我有一个查看器程序(我叫它viewer.exe),可以打开这些文件进行查看。我希望这能提供一些线索 我将(很快)有一个相关的解密输出进行比较,并有值搜索 这是我发现的最相关的 特定问题 考虑到识别所用算法的资源,最佳策略是什么 当前想法 我意识到没有钥匙,仅仅从数据中识别算法几乎是不可能的 有

目标(一般) 我的最终(长期)目标是将二进制文件的导入器写入另一个应用程序

问题背景

  • 我对二进制文件格式中的两个字段感兴趣。一是 加密,另一个是压缩的,可能也是加密的 (看看我是如何得出这个结论的)
  • 我有一个查看器程序(我叫它viewer.exe),可以打开这些文件进行查看。我希望这能提供一些线索
  • 我将(很快)有一个相关的解密输出进行比较,并有值搜索
  • 这是我发现的最相关的
特定问题
考虑到识别所用算法的资源,最佳策略是什么

当前想法

  • 我意识到没有钥匙,仅仅从数据中识别算法几乎是不可能的

  • 有一个文件和一个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字节量)

无效的数据大小,(大小-4)mod 8必须为0

在阅读了下面Igor的回复后,这里是signsrch的输出。我已经用绿点更新了这张图片,当用int3替换时不会出现问题,如果程序无法启动,则为红色,如果加载感兴趣的文件失败,则为橙色。没有点表示我还没有测试它

附件信息

  • 即时通讯使用Windows7 64位
  • viewer.exe是win32 x86应用程序
  • 数据采用base64编码和加密
  • 解密数据为12字节组,代表3个浮点(x、y、z坐标)
  • 我有带findcrypt插件的OllyDb v1.1,但我的使用范围仅限于以下这些家伙

您无法区分好的加密(例如使用XTS模式的AES)和随机数据。这是不可能的。请尝试使用ent来比较/dev/uradom数据和TrueCrypt卷。无法将它们彼此区分开来


编辑:重新阅读您的问题。确定使用哪种对称算法、哈希和模式的最佳方法(当您有解密密钥时)就是全部尝试。强制使用可能的组合,并进行一些测试以确定您是否成功解密。这就是TrueCrypt装载卷的方式。它事先不知道算法,因此它尝试所有可能的方法,并测试前几个字节解密为真。

许多加密算法使用非常特定的常数来初始化加密状态。您可以使用类似的程序检查二进制文件是否具有这些属性。如果您得到任何可能的命中,请在IDA中打开该文件并搜索常量(Alt-B(二进制搜索)在这里会有所帮助),然后按照交叉引用尝试识别密钥使用。

为什么你不在超级用户上问这个问题?IDA有一种叫做调情的技术,可以识别已知的函数。如果他们使用标准的加密库,它可能会识别算法。@GregS,因为我不知道这是一个更好的问法。我会尽快检查。我不相信超级用户比StackOverflow更好这个问题。你也可以考虑一下。我不确定它是否比这更好。“我有免费的IDA,是FLRET构建器还是插件?我也会检查的。你是对的,但是你没有读过OP.。”我意识到如果没有密钥,从数据中识别ALGO实际上是不可能的。"这就是为什么他想用反汇编程序来计算算法。谢谢。选项1:一旦我找到钥匙,用所有合理的方法进行暴力。哇,这太棒了。请看signsrch输出的照片。下面的交叉引用部分对我来说很难,因为我对Olly、IDA等仍然是新手。好的,我理解signsrch哈s已识别常量,但如何搜索它们?例如,Blowfish bfp表.00856893是实际常量还是该常量在程序中的位置?我为天真的响应表示歉意它似乎获得了实际常量,您可以使用-L选项。但是,如果这些数字是文件偏移量,您可以使用“跳转到文件偏移”来导航到那里。