Название: Контрольная сумма файла Отправлено: OKTA от Июнь 05, 2014, 17:55 Товарищи, дайте идею :)
Есть задача внедрить в приложение вычисление контрольной суммы от самого себя. Какие могут быть варианты, кроме добавления к концу исполняемого файла какой-то последовательности, которую сам исполняемый файл сможет посчитать и сравнить? Название: Re: Контрольная сумма файла Отправлено: kambala от Июнь 05, 2014, 18:07 можно разбить напополам и добавить кусок в начало и кусок в конец :)
Название: Re: Контрольная сумма файла Отправлено: Figaro от Июнь 05, 2014, 18:07 ЭЦП
Название: Re: Контрольная сумма файла Отправлено: Bepec от Июнь 05, 2014, 18:24 Ну я разберу для себя
1) Нужно сосчитать CRC себя. 2) Куда то сохранить более ранний CRC. 3) ну и там уже сравнение и прочее. 1) Не проблема, читается. 2) а вот тут засада. Изменение самого себя приведёт к невозможности запуска... Точнее добавление записи к концу приводит (у меня) к ошибке. Я пока вижу только как вариант вынести CRC за пределы программы. В какой нить файл настроек или ещё чего. Название: Re: Контрольная сумма файла Отправлено: Igors от Июнь 05, 2014, 18:55 Не понял причем тут "дописать", что это решает? Я делал для Вындоуз dll, года 2-3 назад. Пытался здесь обсуждать но все уже смутно, помню Витек советовал типа "дык почитай статьи" :) В общем сделал так
- нашел модуль и его образ в памяти ф-циями API - в отладчике посмотрел какая область соответствует коду - написал утилитку - дамп кода, сделал неск дампов с разными раскладами памяти - написал еще утилитку - сравнение дампов. В рез-те получил массив областей вида Код: const int offset[] = { Название: Re: Контрольная сумма файла Отправлено: OKTA от Июнь 06, 2014, 09:21 Насчет добавить CRC в конце файла, сосчитав его дополнительной утилитой - не проблема. Потестировал на паре приложений - брал экзешники и запихивал им в конец мильён байт - все нормально, запускается. Странно, почему у тебя Верес вылетало ???
По поводу добавления в начало файла - придется делать утилиту, которая будет выковыривать из файла суммы, проверять их, а потом запускать exe-шник, очищенный от этих сумм? Или можно как-то хитрее? По поводу дампа памяти идея самая интересная, но как быть уверенным, что эти дампы будут всегда одинаковыми? К тому же приложение у меня должно быть кроссплатформенным и с API тут будет тяжковато :-\ И сам образ в памяти ищет сторонняя утилита или само приложение в себе копается? Название: Re: Контрольная сумма файла Отправлено: Igors от Июнь 06, 2014, 10:24 По поводу дампа памяти идея самая интересная, но как быть уверенным, что эти дампы будут всегда одинаковыми? К тому же приложение у меня должно быть кроссплатформенным и с API тут будет тяжковато :-\ И сам образ в памяти ищет сторонняя утилита или само приложение в себе копается? Само. Дампы одинаковыми не будут, надо еще выпасти отличия.Если же "проверить файл на диске" (не в памяти) - то просто определить глобальную переменную, напр Код: const char theCRC[] = { Название: Re: Контрольная сумма файла Отправлено: OKTA от Июнь 06, 2014, 10:45 А..вот какой дамп.. т.е. защищает программу от изменений в процессе работы грубо говоря, а не проверяет целостность при старте, да?
А как вычислять CRC, если само поле для CRC в итоге изменится после записи туда этого CRC?))) Название: Re: Контрольная сумма файла Отправлено: Figaro от Июнь 06, 2014, 11:11 При расчете CRC просто не учитывать
Название: Re: Контрольная сумма файла Отправлено: OKTA от Июнь 06, 2014, 11:15 Ну точно ;D спасибо)))
|