gpt4 book ai didi

assembly - 混淆的 AES 解密程序集

转载 作者:行者123 更新时间:2023-12-03 17:41:22 26 4
gpt4 key购买 nike

我最近一直在筛选整个程序集,以尝试确定程序如何解密某些数据。到目前为止,我已经确定了 IV 是如何提取的,IV 是 16 字节长,并且解密方法使用密码块链接。因此,我相信所使用的加密方法是 AES-128-CBC。

下一步是尝试识别用于解密的 key ,问题是单个分组密码加密的程序集大小约为 2.5MB。然而,我观察到的是,它都是一个非常相似的形式,例如,一个片段:

add.w      r0, r12, #0x13
str.w r0, [lr, #0x44]
tst.w r0, #0xff
mov r0, r12
it eq
eoreq r0, r12, #0x75

add.w r1, r12, #0x5d
str.w r1, [sp, #0xf00]
tst.w r1, #0xff
it eq
addeq r0, #0x3b
r12 包含加密数据,从传入的参数( r0 )加载,如下所示:
mov        r4, r0
add.w lr, sp, #0x1000
ldrb.w r12, [r4]

子程序中的所有程序集都是示例形式,一些偏移量被添加到加密数据中,存储,针对 0xff 进行测试( 总是 0xff 079204 ADD 或 MOV 影响另一个寄存器(在示例中为 r0 )。

这对您来说是否是 AES-128,您是否同意加密被故意混淆以隐藏 key ?如果是这样,那么它是如何被混淆的,是否有可能找到 key ?

附加信息

Here's a link 到块密码加密子例程的完整 ASM 文件。

this is a link 到使用 CBC 并调用主要问题中引用的上述子程序的子程序。

最佳答案

检查是否正在使用 AES 非常简单。
AES/Rijndael 使用一个大的魔法常数表。
没有这些神奇的数字,AES 就无法工作。
您可以从任何引用实现中轻松收集这些数字;如果需要,请记住补偿大/小端(我总是检查两个变体)。

此外,Rijndael 是 XOR 的重度用户。指令,它不使用 or它不使用加法。

如果您想确认/排除 AES,请寻找神奇的数字。该例程必须从内存(磁盘)某处的表中读取数字。它无法解码程序集中的数字,因为它使用明文/密文来查找数组中的数字并使用它异或数据。

当将数字保存在寄存器中时,您不能这样做。

从我所看到的只是查看程序集,它看起来根本不像 AES。

仅使用代码审查测试 AES
也许对 AES 最好的测试,只看代码,就是将它与 init_key 的引用实现进行比较。 . AES 使用特定代码来初始化 key ,以便算法可以使用它。

您可以在此处找到 AES 引用源代码:https://tls.mbed.org/aes-source-code
(或者,如果您更喜欢另一种语言而不是 C,则可以在互联网上的任何地方)。

关于assembly - 混淆的 AES 解密程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35282364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com