2015-11-16 3 views
0

Мне нужно мнение от кого-то, у кого есть опыт, с гарантией целостности файла. Я пытаюсь защитить целостность моего файла с помощью контрольной суммы crc. Моя основная цель - сделать более сложным обход проверки файла лицензии (который заключается в разборке исполняемого файла и удалении условного перехода).Контрольная сумма CRC файла ELF

я придумал следующую мысль:

unsigned long crc_stored = 4294967295; 
char* text_begin = (char*)0xffffffffffffffff; 
char* text_end = (char*)0xffffffffffffffff; 

int main(){ 
    unsigned long crc = calc_checksum(text_begin, text_end); 
    if (crc == crc_stored) 
     //file is ok 
} 

Я редактировать .data раздел эльфа двоичном следующим образом: text_begin и text_end будет содержать начальный и конечный адрес раздела .text и crc_stored контрольная сумма crc раздела .text.

Я хотел бы знать, подходит ли это для этого, или есть лучшие методы?

Редактировать: Karoly Horvath имеет право. Предположим, я использую проверку crc для расшифровки некоторого кода. Я хотел бы знать, какой из лучших способов контрольной суммы ro защитить исполняемый файл. Олаф также имеет право. Я могу использовать алгоритм ша. Вопрос один и тот же.

Редактировать2: прекратите говорить, что любая защита может быть обойдена. Я знаю, и я просто хочу сделать это сложнее. Пожалуйста, ответьте на вопрос, можете ли вы.

+4

Итак, теперь злоумышленник должен удалить не один, а два условных перехода ('crc == crc_stored') .... –

+1

CRC не является сигнатурой/хэшем. – Olaf

+1

Если вы не можете контролировать среду, в которой выполняется исполняемый файл, нет способа остановить определенный хакер. Независимо от того, сколько контрольных сумм, хэшей или шифров вы положите поверх нее. Таким образом остается только вопрос; сколько времени и денег вы готовы потратить, чтобы сделать свою задачу немного сложнее? – user694733

ответ

1

Позвольте мне видеть. У вас есть код, который делает это:

int main() { 
    if (!license_ok()) { exit(1); } 
    // do something useful 
} 

Вы обеспокоены тем, что кто-то будет разбирать ваш код и исправляет из условного перехода, так что вы предлагаете, чтобы изменить код таким образом, вместо того, чтобы:

int main() { 
    if (calc_checksum() != stored_crc) { exit(1); } 
    if (!license_ok()) { exit(1); } 
    // do something useful 
} 

Надеюсь, вы видите, что это «решение» на самом деле не является решением (если кто-то способен исправлять один условный переход, наверняка он так же способен исправлять два таких прыжка).

Вы можете найти идеи для более правдоподобного/надежного решения в one из manybooks по этому вопросу.

+0

это уже указывал Karoly Horvath, поэтому я отредактировал вопрос, сказав, что я использую проверку crc в качестве пароля для дешифрования некоторой части кода. Это не отвечает на мой вопрос. Вторая книга не входит в детали, которые мне нужны, другой - 13 лет, и она фокусируется только на Windows. Но я проверю это. – robert

+0

@ franz1 Если ваш вопрос: «Как я могу контролировать свою исполняемую программу» (как бы бессмысленно это не было), ответ таков: любым способом. –

+0

мой вопрос: каков стандартный способ сделать это. – robert