试图识别生成 256 位密钥的代码块

逆向工程 艾达 拆卸 C++
2021-06-21 06:03:21

我正在使用 IDA PRO 逆向 C++ 程序,以检查某些数据是如何存储、加密和解密的。

我设法确定数据是用 AES CBC 16 块和 256 位密钥加密的。我已经对此进行了测试,因为我在程序中找到了生成的密钥,并设法使用在线工具解密了数据。

我遇到的问题是如何生成 AES 256 位密钥。我已经确定了代码,但是有好几行。我“认为”它是 OpenSSL 中的一个散列函数的一个副本,因为我在代码的其他区域看到了对它的引用,但我不能 100% 确定。

除了一些像 0x2AAAAAAB 这样的幻数和在调用 sub 之前将 3 个 DWORDS 推送到堆栈之外,代码中没有什么可做的。

我已经下载了 OpenSSL 代码,但还没有找到任何东西。我还使用了诸如 Detect it Easy 和 IDA 插件之类的工具,它可以找到一些我 BP 的加密签名,但是在跳过密钥生成函数时它们永远不会被击中。

任何人都可以推荐任何可以帮助的东西吗?我的 ASM 技能远不足以单步执行数百条指令。

编辑:我对特定的函数使用了 Hex Rays 反编译器,它只生成了几行代码!?!

我已经把它放在粘贴箱上:

https://pastebin.com/y6Zu42Ux

谁能解释一下它的作用?但是,我什至不确定这是正确的代码,因为无论我在哪里按 F5 生成伪代码,它都会给我相同的输出。

编辑:这是完整代码的粘贴

https://pastebin.com/x0pjyuZD

0个回答
没有发现任何回复~