0 / 0 / 0
Регистрация: 03.02.2014
Сообщений: 6
1

Как вычисляется CRC32 в exe файле по адресу PE header + 0x8

03.02.2014, 18:28. Показов 3280. Ответов 14
Метки нет (Все метки)

Работаю под Windows 7 64x + Visual Studio 2010

Если считать в бинарном виде exe-файл в массив и посчитать стандартным алгоритмом CRC32 получим CRC32, который мы можем увидеть нажав правой клавишей мышки на exe-файле->свойства->Контрольные суммы.

Дело в том, что я дописываю некоторую информацию в конец exe файла и даже Google Chrome это замечает и начинает ругаться. (информация служебная - не вирусы пишу)

Если что-то дописать в файл, то упомянутый CRC32 меняется(казалось бы ну и пусть). Но есть CRC32 расположенный в самом exe-файле по смещению: адрес PE заголовка + 0x08 остаётся неизменным. И этот CRC32 изначально отличен от CRC32 посчитанного на лету, и после добавления данных в конец exe он само собой остаётся прежним. И как я догадываюсь, по какому-то несовпадению между двумя CRC32 Google Chrome и прочие проверяющие программы находят подвох? Объясните, пожалуйста,

1) как считается тот самый вшитый CRC32, чтобы я мог сам его перегенерировать после вставки информации в exe, чтобы Google не видел подвохов
2) как происходит проверка тем же Google и другим проверяющим софтом.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2014, 18:28
Ответы с готовыми решениями:

Как ускорить получения crc32 о файле? md5 не читает файлы более 512 мегабайт!
Доброго времени суток уважаемые читатели ! столкнулся с очень большой проблемой ! нужно...

Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу
#include <math.h> const double eps = 0.001; ///< желаемая точность /// N - размерность...

Вызвано исключение по адресу 0x003F2357 в Лабораторна 15.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x
Что это такое и как это исправить? Вот фрагмент кода где и есть проблема: ... int size = 9;...

Необработанное исключение по адресу 0x00ED4891 в strings.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC
Программа толком не написан, проверял ранд и возникли проблемы. Ф-ция ранд генерирует одно и тоже...

14
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
03.02.2014, 18:36 2
Цитата Сообщение от Konstantin__ Посмотреть сообщение
Дело в том, что я дописываю некоторую информацию в конец exe файла
Как это в конец файла? по какому праву и почему именно в конец?

Добавлено через 1 минуту
Цитата Сообщение от Konstantin__ Посмотреть сообщение
после добавления данных в конец exe он само собой остаётся прежним
Да в том то и дело что он не остается прежним...
0
0 / 0 / 0
Регистрация: 03.02.2014
Сообщений: 6
03.02.2014, 18:40  [ТС] 3
Извиняюсь, не успел поправить часть предложений в стартовом сообщении топика(оказывается, что даётся лишь 5 минут на правку)...Надеюсь, суть проблемы будет понятной.

Как это в конец файла? по какому праву и почему именно в конец?
Это была одна из моих идей как можно передать данные в exe. Приложение при запуске считывает их и использует для дальнейшей работы.

Да в том то и дело что он не остается прежним...
Я просматривал в HEX editor - данные по этому адресу остаются прежними. Или может я неверно ищу CRC32 в теле exe и то, что я нашёл это другие данные? Адрес PE заголовка можно получить по смещению 0x3C от начала файла. Далее PE addr + 0x08 = CRC32. Или это не так?
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
03.02.2014, 18:45 4
Цитата Сообщение от Konstantin__ Посмотреть сообщение
Это была одна из моих идей как можно передать данные в exe. Приложение при запуске считывает их и использует для дальнейшей работы.
При том чужая программа, а не ваш код... А я стесняюсь спросить а откуда она узнает что с эти мусором делать которую вы дописали?? Пример такой взяли русскую книгу и на полях написали китайские иероглифы, как их читающему понимать?
0
0 / 0 / 0
Регистрация: 03.02.2014
Сообщений: 6
03.02.2014, 18:54  [ТС] 5
При том чужая программа, а не ваш код... А я стесняюсь спросить а откуда она узнает что с эти мусором делать которую вы дописали?? Пример такой взяли русскую книгу и на полях написали китайские иероглифы, как их читающему понимать?
Моя программа. Я делаю вставку данных в Win32 приложение из под *nix сервера, т.к. входные данные постоянно меняются. Целевой платформой является семейство Windows. Такое решение позволяет мне отказаться от кросплатформенной компиляции c помощью скриптов, т.к. есть задача, которая должна быть автоматизирована.
0
Ушел с форума
Эксперт С++
16448 / 7412 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
03.02.2014, 19:10 6
Цитата Сообщение от Konstantin__ Посмотреть сообщение
1) как считается тот самый вшитый CRC32, чтобы я мог сам его перегенерировать после вставки информации в exe, чтобы Google не видел подвохов
А кто сказал, что там именно CRC32 ?
Там довольно простой алгоритм, но он недокументирован.
Реализацию можно найти, к примеру, в исходниках (W2K).

Цитата Сообщение от Konstantin__ Посмотреть сообщение
2) как происходит проверка тем же Google и другим проверяющим софтом.
Например:

CheckSumMappedFile function
http://msdn.microsoft.com/en-u... 85%29.aspx

Но что-то у меня подозрение, что там весь сыр-бор вовсе не из-за контрольной суммы.
Сейчас практически любой exe-файл, скаченный из интернета, имеет цифровую подпись.
При изменении файла подпись становится невалидной, и на этот факт сразу реагируют
антивирусы, система безопасности Windows и другие программы.
2
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
03.02.2014, 19:18 7
Ну кто Вам сказал что эти данные находятся в конце? https://ru.wikipedia.org/wiki/Exe
Они могут по разным адресам находится и надо менять исполняемый код самой программы...Не проще ли сделать так чтоб рядом с вашей программой находился какой-нибудь файл *.dat произвольной структуры, в который бы данные сбрасывались, а ваша программа их бы просто считывала?
0
0 / 0 / 0
Регистрация: 03.02.2014
Сообщений: 6
04.02.2014, 13:06  [ТС] 8
Цитата Сообщение от mustimur Посмотреть сообщение
Ну кто Вам сказал что эти данные находятся в конце? https://ru.wikipedia.org/wiki/Exe
Они могут по разным адресам находится и надо менять исполняемый код самой программы...
Никто не говорил, что CRC32 данные находятся в конце! Записанные мною данные - да, находятся(это факт) Кстати, по той ссылке, которую Вы дали по смещениям 0x12-0x13 находится CRC16. Мне это поле не нужно. Там стоят 0x00.

Цитата Сообщение от mustimur Посмотреть сообщение
Не проще ли сделать так чтоб рядом с вашей программой находился какой-нибудь файл *.dat произвольной структуры, в который бы данные сбрасывались, а ваша программа их бы просто считывала?
Так делать нельзя. Во-первых, есть ТЗ! Во-вторых, клиент попросту не поймёт, что это ещё за .dat файл скачивается вместе с выбранным им файлом для закачки (весь проект описывать не буду).

Цитата Сообщение от Убежденный
А кто сказал, что там именно CRC32 ?
Там довольно простой алгоритм, но он недокументирован.
Реализацию можно найти, к примеру, в исходниках (W2K).
Я опирался на раздел "Как защитить свою программу от взлома" из этой статьи http://www.xakep.ru/post/21788/

Цитата Сообщение от Убежденный
Посмотрю, спасибо. Возможно, пригодится.
Цитата Сообщение от Убежденный
Но что-то у меня подозрение, что там весь сыр-бор вовсе не из-за контрольной суммы.
Сейчас практически любой exe-файл, скаченный из интернета, имеет цифровую подпись.
При изменении файла подпись становится невалидной, и на этот факт сразу реагируют
антивирусы, система безопасности Windows и другие программы.
Воможно, Вы правы.

Добавлено через 16 часов 24 минуты
Может кто-то занимался описанной задачей? Как всё таки корректно перегенерировать CRC32 после внесения изменений в exe? (алгоритм) Или это правда не нужно?
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 865
Записей в блоге: 1
04.02.2014, 13:16 9
Цитата Сообщение от Konstantin__ Посмотреть сообщение
Может кто-то занимался описанной задачей? Как всё таки корректно перегенерировать CRC32 после внесения изменений в exe? (алгоритм) Или это правда не нужно?
Это все таки алгоритм вирусов, посмотрите там
0
Ушел с форума
Эксперт С++
16448 / 7412 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
04.02.2014, 13:38 10
Цитата Сообщение от Konstantin__ Посмотреть сообщение
Может кто-то занимался описанной задачей? Как всё таки корректно перегенерировать CRC32 после внесения изменений в exe? (алгоритм)
MapFileAndCheckSum function
http://msdn.microsoft.com/en-u... 85%29.aspx

Можно и вручную.
Найдите исходники W2K, там есть файл checksum.c с реализацией алгоритма,
который Вы ищете.
0
0 / 0 / 0
Регистрация: 03.02.2014
Сообщений: 6
05.02.2014, 13:02  [ТС] 11
Цитата Сообщение от Убежденный
MapFileAndCheckSum function
Уже пробовал. Выдаёт CRC не схожий ни с одним из описанных. Видимо, там другая реализация.
Цитата Сообщение от Убежденный
Можно и вручную.
Найдите исходники W2K, там есть файл checksum.c с реализацией алгоритма,
который Вы ищете.
Возможно. Хотя уже есть мысль, что мне нужен алгоритм CRC32 генерируемый именно VS2010.
0
Ушел с форума
Эксперт С++
16448 / 7412 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
05.02.2014, 13:11 12
Цитата Сообщение от Konstantin__ Посмотреть сообщение
Уже пробовал. Выдаёт CRC не схожий ни с одним из описанных. Видимо, там другая реализация.
Я делал по-другому: с помощью CheckSumMappedFile вычисляю
контрольную сумму и вручную прописываю ее в нужное место PE-файла.

Цитата Сообщение от Konstantin__ Посмотреть сообщение
Хотя уже есть мысль, что мне нужен алгоритм CRC32 генерируемый именно VS2010.
VS2010 тут не при чем. Алгоритм проверки контрольной суммы "прошит" в Windows, и
если генерировать ее по другому принципу, проверка сразу сфейлится.
1
0 / 0 / 0
Регистрация: 03.02.2014
Сообщений: 6
05.02.2014, 13:28  [ТС] 13
Цитата Сообщение от Убежденный Посмотреть сообщение
Я делал по-другому: с помощью CheckSumMappedFile вычисляю
контрольную сумму и вручную прописываю ее в нужное место PE-файла.
А не помните по какому смещению Вы прописывали?

Цитата Сообщение от Убежденный Посмотреть сообщение
VS2010 тут не при чем. Алгоритм проверки контрольной суммы "прошит" в Windows, и
если генерировать ее по другому принципу, проверка сразу сфейлится.
Понял. Спасибо!
0
Ушел с форума
Эксперт С++
16448 / 7412 / 1186
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
05.02.2014, 13:47 14
Цитата Сообщение от Konstantin__ Посмотреть сообщение
А не помните по какому смещению Вы прописывали?
64 байта от начала Optional Header (началом считается поле Magic).
Смещение одинаково для 32-битных и 64-битных PE-файлов.

Последняя актуальная информация о PE-формате здесь:

Microsoft PE and COFF Specification (v8.3, Updated: February 6, 2013)
http://msdn.microsoft.com/en-u... 63119.aspx
0
3174 / 1933 / 313
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
05.02.2014, 13:48 15
Как только TS перестанет называть контрольную сумму файла CRC (которая здесь вообще ни при чем), жить ему станет проще.

А если данные дописываются как оверлей, то что мешает там же и хранить какую угодно проверочную информацию - от CRC до ECC?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2014, 13:48
Помогаю со студенческими работами здесь

Вызвано исключение по адресу 0x01068781 в 2nd.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCCCCCCCC
Доброго времени суток, кто может помочь по вопросу? Постоянно выбивает ошибку. Мне кажется, там еще...

Необработанное исключение по адресу 0x001B3371 в XXX.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDF
Делал консольную змейку и столкнулся вот с такой проблемой. void stena(char **arr) { int y...

Исключение по адресу 0x01423B40 в ASM1.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу 0x01423B40
Здравствуйте! Очень нужна помощь, не могу понять в чем проблема, вроде правильно все делаю, но...

Как спрятать exe файл в другом exe файле?
Как спрятать exe файл в другом exe файле?А потом его запустить?И не хотелось бы чтобы этот exe файл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru