反向加密算法,基于AES

逆向工程 解密 加密 密码学
2021-06-18 05:40:07

你好!

我正在反转为 ARM 架构编写的一个库(共享对象)。它被混淆或挤满了一些非常强大的东西,这使得在“长距离”上调试变得更加困难和几乎不可能。

有一个函数提供了一些奇怪算法的加密(至少对我来说)。

我现在研究的内容:

  • 输入输出大小相同;
  • 算法适用于4 个内存区域,这会影响结果(已测试):
    1. 大小 - 256 字节。这是 SBOX,但具有自定义值(值与 AES SBox 不同)
    2. 大小 - 256 字节。这是倒置的SBOX;
    3. 大小 - 16 字节。可能是初始化向量,但我不确定;
    4. 大小 - 128 字节。未知区域。
  • 解密功能也适用于相同的内存区域。

现在我只知道算法中数据的第一个操作:

  1. 反转每个字节中的位 ( 0x30 (00110000b) => 0xC (00001100b));
  2. 反转字节 ( 01 02 03 04 05 06 07 08 => 08 07 06 05 04 03 02 01)

一些附加信息:

  • 如果输入长度 < 15,它只是反转位和字节。

    示例(十六进制字节)

    01 01 01 01 01 01 01 01 => 80 80 80 80 80 80 80 80 80

  • 如果输入长度为 15,则它反转除第 4 个字节以外的所有字节中的位。然后反转字节。

    示例(十六进制字节)

    01 01 01 02 01 01 01 01 01 01 01 01 01 01 01 =>

    80 80 80 80 80 80 80 80 80 80 80 80 02 80 80 80

  • 如果输入长度为 16,则反转位和字节,使用这种“未知”算法加密数据;

  • 如果输入长度为 17-32,它将反转前 16 个字节中的位和字节,使用此算法加密前 16 个字节,并仅反转其余数据中的位和字节。

    示例:(十六进制字节,粗体字节包含加密结果)

    01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 02 03 04 05 =>

    50 D4 51 BD 59 42 30 A1 B3 5F 77 BD B3 BF A1 9A A0 20 C0 40

我有机会对任何数据进行加密并更改所有变量。我也有机会启动内置的解密功能。

也许有人知道它可以是什么,或者可以向我推荐一些额外的步骤来澄清这个算法的名称。

PS抱歉我的英语不好,希望我已经描述清楚了。

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