2016-02-15 7 views
-2

Прежде всего, я провел много исследований раньше, но я должен спросить кое-что, что может быть просто ... или нет, но я предпочитаю спросить вас чтобы быть уверенным ...Скрыть что-то вроде ключа или 4CC в скомпилированной программе

У меня есть два типа ключей, один из которых настроен мной, а другой - простой код 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; 

так что я подумал скрыть ключ, используя память (у меня нет примера, но я мог бы его предоставить) или encryp т ключ для того, чтобы скрыть его от программы, но я не знаю (или я не уверен), как зашифровать что-то вроде этого:

000000, 
    11111111, 
    222222222, 
    33333333 

Спасибо, Хорошего дня! :)

+0

Я не вижу *** вопроса ***. – abelenky

+0

Как зашифровать их в скомпилированной программе – Gurgarath

ответ

0

Хорошо, если вы сказали, почему хотите скрыть это. FourCC имеет 4 байта, поэтому его можно рассматривать как int. Вы можете использовать его или зашифровать другим способом. Но очевидно, что это не будет служить против серьезных противников, поскольку ключ будет в коде в любом случае.

Не забывайте, что серьезные хакеры будут сканировать код и данные, когда программа работает в дополнение к программе на диске.

EDIT:

Вот быстрый и грязный кусок кода, чтобы получить Fourcc XOR-е изд. Вы должны применить то же самое во время выполнения, чтобы вернуться к исходному значению. Использование 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) 
+0

Я просто хочу обфускать этот ключ, чтобы добавить немного безопасности в мою программу, нет ничего злонамеренного позади – Gurgarath

+0

Добавляем крошечный бит быстрого и грязного кода в ответ ... – BitWhistler

+0

Большое спасибо! Но вместо того, чтобы делать какие-либо мусор с моей программой (я не мог изменить его atm), я предпочитаю задать вам какой-то вопрос: что мне делать с кодом, пожалуйста? – Gurgarath