【问题标题】:Hide something like a key or a fourCC in the compiled program在编译的程序中隐藏诸如密钥或fourCC之类的东西
【发布时间】:2016-05-26 19:45:03
【问题描述】:

首先,我之前做过很多研究,但我必须问一些可能很简单的事情......或者不是,但我更愿意问你以便确定......

我有两种密钥,一种是我设置的,另一种是简单的 FourCC 代码。但是,例如使用 HxD 在 .exe 的代码中找到它们非常简单。 所以我想隐藏.exe中的密钥,但不改变它,这是我的密钥示例:

BYTE * pbData = new BYTE[dwDataSize];
file.Read(pbData, dwDataSize);

CLZObject zObj;

static DWORD mykey[4] =
{
    000000,
    11111111,
    222222222,
    33333333
};

if (!CLZO::Instance().Decompress(zObj, pbData, mykey))
{
    delete[] pbData;
    return false;
}

如您所见,我使用 LZO,但仍然很容易找到钥匙,因为我们通常知道她在哪里......

然后,这里是 FourCC(它非常容易找到,因为我们只需要输入字母,例如:DXT1。

    case MAKEFOURCC('D','X','T','1'):
    strncpy_s(strPixelFormat, 512, "DXT1", 31);
    m_CompFormat = PF_DXT1;
    break;

所以我想通过使用内存来隐藏密钥(我没有示例,但我可以提供一个)或加密密钥以便将其隐藏在程序中,但我不知道(或者我'我不确定)如何加密这样的东西:

    000000,
    11111111,
    222222222,
    33333333

谢谢,祝你有美好的一天! :)

【问题讨论】:

  • 我没有看到问题
  • 编译后的程序如何加密

标签: c++ encryption obfuscation lzo fourcc


【解决方案1】:

如果你能说出你为什么要隐藏它就很好了。 FourCC 是 4 个字节,因此可以看作是 int。您可以对其进行异或运算,或以其他方式对其进行加密。但显然这不会对抗严重的对手,因为无论如何关键都在代码中。

别忘了,除了磁盘上的程序之外,严重的黑客还会在程序运行时扫描代码和数据。

编辑:

这里有一段快速而肮脏的代码来让你的fourcc xor-ed。您将在运行时应用相同的值以恢复原始值。使用 0x55555555 很方便,因为可打印字符仍然可打印,因此您可以使用输出字符串而不是数字:

int main( int argc, char* argv[] ) {
  char s[5];
  *(unsigned int*)s = *(unsigned int*)argv[1] ^ 0x55555555u;
  s[4] = '\0';
  printf("\"%s\"  ==>  \"%s\" (0x%08xu)\n", argv[1], s, *(unsigned int*)s);
  return 0;
}

$ ./a.exe xvid
"xvid"  ==>  "-#<1" (0x313c232du)
$ ./a.exe mpeg
"mpeg"  ==>  "8%02" (0x32302538u)
$ ./a.exe avc1
"avc1"  ==>  "4#6d" (0x64362334u)

【讨论】:

  • 我只是想对这种密钥进行模糊处理,以便为我的程序添加一些安全性,背后没有恶意
  • 非常感谢!但与其对我的程序做任何垃圾(我无法修改它 atm),我更愿意问你一些问题,请问我应该如何处理代码?
猜你喜欢
  • 2015-11-04
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2015-05-03
  • 2011-03-21
  • 2020-10-12
相关资源
最近更新 更多