在编译的程序中隐藏类似键或fourCC的内容

时间:2016-02-15 19:04:16

标签: c++ encryption obfuscation lzo fourcc

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

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

alias drrm='docker ps --no-trunc --all --quiet --filter="status=exited" | xargs --no-run-if-empty docker rm'
alias drrmi='docker images --no-trunc --all --quiet --filter="dangling=true" | xargs --no-run-if-empty docker rmi'

正如你所看到的,我使用LZO,但我们通常知道她在哪里仍然很容易找到钥匙...

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

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;
}

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

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

谢谢,祝你有愉快的一天! :)

1 个答案:

答案 0 :(得分:0)

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

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

修改

这是一个快速而肮脏的代码来获得你的四分之一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)