C语言文件解密:深入解析 freadEx 函数

本文分析 C 语言中 freadEx 函数的代码,重点解析其解密操作步骤。

代码分析

int __fastcall freadEx(int a1, int a2, int a3, FILE *a4)
{
  // ... (省略部分代码) ...

  if ( v9 )
  {
    v10 = (int)*(v8 - 1);
    size = a3 * a2;
    v11 = (char *)malloc(a3 * a2 + 6);          // 利用malloc函数开辟内存空间    a2是sizeof(参数类型)a3 是要读取的个数
    if ( v11 )
    {
      v20 = (v10 & 3) + v6 * v4;
      _aeabi_memclr(v11, v6 * v4 + 6);
      fseek(v5, v10 + v9 - (v10 & 3), 0);
      fread(v11, v10 & 3, 1u, v5);
      fseek(v5, v10 + v9, 0);
      v21 = (int)&v11[v10 & 3];
      fread(&v11[v10 & 3], size, 1u, v5);
      fseek(v5, v10 + v9 + size, 0);
      v12 = (4 - v20 % 4) % 4;
      fread(&v11[v20], v12, 1u, v5);
      if ( v12 + v20 >= 4 )
      {
        // ... (省略部分代码) ...

        do
        {
          v15 = &v11[4 * v13];
          v17 = _byteswap_ulong(*(_DWORD *)&v11[4 * v13]);
          if ( v17 + 1 >= 2 )
          {
            v16 = ((unsigned __int8)v11[4 * v13 + 1] << 16) | ((unsigned __int8)v11[4 * v13] << 24) | ((unsigned __int8)v11[4 * v13 + 2] << 8);
            v18 = *(unsigned int *)((char *)v8 + (((unsigned __int8)*(v8 - 1) + (_BYTE)v14) & 0x1C)) ^ ((((v17 << 23) | (v16 >> 9)) >> 13) | (v16 >> 9 << 19));
            v11[4 * v13] = HIBYTE(v18);
            v15[1] = BYTE2(v18);
            v15[2] = BYTE1(v18);
            v15[3] = v18;
          }
          ++v13;
          LOBYTE(v14) = v14 + 4;
        }
        while ( v13 < (v12 + v20) / 4 );
      }
      _aeabi_memcpy(v23, v21, size);
      free(v11);
      return v6;
    }
    return 0;
  }
  // ... (省略部分代码) ...
}

解密操作步骤解析

  1. 分配内存: 使用 malloc 函数动态分配内存空间,大小为 a3 * a2 + 6 个字节,用于存储解密后的数据。
  2. 清零内存: 使用 _aeabi_memclr 函数将分配的内存空间清零。
  3. 读取数据: 使用 fseekfread 函数从文件中读取数据,分段读取并存储到分配的内存空间中。
  4. 字节交换: 对于每个 4 字节的数据,使用 _byteswap_ulong 函数进行字节交换,改变字节顺序。
  5. 异或解密: 将交换后的数据与特定值进行异或运算,该值由 v8 中的特定位置的值计算得出。
  6. 数据复制: 使用 _aeabi_memcpy 函数将解密后的数据复制到目标内存空间 v23 中。
  7. 释放内存: 使用 free 函数释放之前动态分配的内存空间。

总结

freadEx 函数实现了一个文件解密的过程,使用了字节交换和异或运算等方式进行解密。具体的解密算法需要根据代码中的其他部分和上下文信息来确定。

C语言文件解密:深入解析 freadEx 函数

原文地址: https://www.cveoy.top/t/topic/geb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录