多少密码学知识对逆向工程很重要?

逆向工程 密码学
2021-06-11 07:38:47

对于逆向工程师来说,了解密码学真的很重要吗?

谢谢。

2个回答

我想说这是一个非常有用的工具,但你对它的使用将取决于你的最终目标。就个人而言,我在二进制应用程序评估中经常使用它,但并非所有人都如此。正如我所说,这在很大程度上取决于你想做什么。

归根结底,如果您最终进行逆向工程工作,您将看到应用程序中使用了密码学。理解和破解密码学可能是也可能不是你工作的一部分,但至少对该领域有基本的了解总是很好的。在你的简历上也总是一个不错的 +1。

在方面有什么你应该学习,我会说避免“经典密码”的东西,直行的香饽饽。一方面,我可以计算在实际产品中我必须破解简单的自定义换位密码或替换密码的次数。它们只是在现实中没有使用,如果客户端使用如此糟糕的“加密”,那么这已经是一个向他们标记的主要问题 - 打破它成为一个有争议的问题。

你想调查:

  • 简单的异或密码(一次一密、二次一密、重复密钥异或)
  • 流密码
  • 使用初始化向量 (IV) 来避免关键重用问题
  • 流密码延展性
  • 分组密码
  • 分组密码填充
  • 分组密码操作模式(尤其是密码分组链接)
  • 电子密码本 (ECB) 模式的问题
  • 分组密码中的 IV
  • CBC 的延展性
  • 填充预言机攻击
  • 压缩预言机攻击(例如 CRIME)
  • 散列函数(MD5、SHA1 等)
  • 哈希冲突和生日悖论
  • 消息认证代码(例如 HMAC 构造)
  • 非对称加密(例如 RSA)
  • 密钥交换机制(例如 Diffie-Hellman)
  • 混合密码系统(即使用非对称发送密钥,使用对称加密)
  • 围绕 SSL/TLS 和 PKI 的常见问题列表:
    • 未正确验证 CA
    • 未正确验证通用名称
    • 不验证到期日或有效日期
    • 允许弱密码(例如 NULL、DES)
    • 允许弱证书签名(例如 MD5)
    • 等等...(更多信息请参见 OWASP)

该列表相当大,但您可以按照自己的节奏从维基百科和其他各种在线位置获取这些内容。如果您在足够强的水平上理解了上述一半的主题以识别薄弱的实现,那么您就大功告成了。我做过的几乎所有使用加密的产品都在该列表中存在问题。

它对于实际逆向工程越来越重要。它现在存在于恶意软件中,Stuxnet、Flame 和其他例子是密码学在这种情况下使用的典型例子。而且,它也存在于大多数保护方案中,因为许多技术使用密码学来保护代码和数据。只需考虑诸如 Skype 或 iTunes 之类的软件,它们依靠加密来保护其协议或隐藏可执行文件中的信息。

所以,事实上,这将是一个真正的问题,如果你明白在倒车时有点密码。而且,所谓理解密码学”,我的意思是至少能够在汇编级别识别经典密码算法的代码,例如 DES、AES、SHA-1、SHA-3 等。并且,还要了解弱密码的经典缺陷和密码分析技术(例如频率分析)。

了解逆向工程所需的密码学的一个好方法是使用经典密码实现(借助网络上现有的代码)您自己的密码库并查看生成的程序集。如果您没有耐心这样做,只需查看OpenSSL的加密库,将其编译并查看代码和程序集。

当然,你对它了解得越多,面对它时你就会更有效率。