Скрыть что-то вроде ключа или fourCC в скомпилированной программе
Прежде всего, я провел много исследований раньше, но я должен спросить кое-что, что может быть простым... или нет, но я предпочитаю спросить вас, чтобы быть уверенным...
У меня есть два вида ключей, один из которых создан мной, а другой - простой код FourCC. Тем не менее, довольно просто найти их в коде.exe, используя, например, HxD. Поэтому я хотел бы спрятать ключ в.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
Спасибо хорошего дня!:)
1 ответ
Было бы хорошо, если бы вы сказали, почему хотите это скрыть. FourCC составляет 4 байта, поэтому его можно рассматривать как int. Вы можете переписать его или зашифровать другим способом. Но очевидно, что это не послужит серьезным противникам, так как ключ все равно будет в коде.
Не забывайте, что серьезные хакеры будут сканировать код и данные при запуске программы в дополнение к программе на диске.
РЕДАКТИРОВАТЬ:
Вот быстрый и грязный фрагмент кода, чтобы получить ваш четвертый текст. Вы примените то же самое во время выполнения, чтобы вернуться к исходному значению. Использование 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)