首先,我之前做了很多研究,但我不得不问一些可能很简单的事情......或者不是,但我更愿意问你,以确保......
我有两种键,一种由我设置,另一种是简单的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;
谢谢,祝你有愉快的一天! :)
答案 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)