Если вдруг кто-то сталкивался с задачей нейтрализации проверки CRC у дистрибутивов собранных Nullsoft'ом, то поделитесь, пожалуйста, способом - как вы это делали. Более подробно - проблема заключается в том, что дистрибутивы NSIS при запуске проверяют CRC файла, и если файл был модифицирован, то выводится сообщение об этом и дистрибутив не устанавливается. Как я понимаю есть два подхода для решения данной задачи - либо отключить проверку, либо заново посчитать CRC после модификации дистрибутива и вписать это значение куда надо, чтоб проверка при запуске дала положительный ответ.
Какое именно слово вы имеете ввиду? А что там проверяется вопрос открытый. Сообщение выдает такое: The installer you are trying to use is corrupted or incomplete. This could be the result of a damaged dusk, a failed download or a virus. You may to contact the autor of this installer to obtain a new copy. It may be possible to skip this cheack using the /NCRC command line switch (NOT RECOMMENDED) И по тому какой он параметр предлагает ввести для отключения проверки я назвал то, что он проверяет CRC. Что он проверяет на самом деле - х.з. Причем использование этого параметра нифига не отключает проверку.
Регистр символов имеет значение. crc32 всего дистрибутива. Ну, почти всего. Исходники открыты, посмотрите самостоятельно.
Крис Касперски про обход Patch Guard там было что то про перерасчет CRC Что то вроде убийство часового или как то так
crc разные бывают. и слово - этот тот блок данных с которым оперирует crc, для crc32 - это ULONG. Стоит поискать хорошие статьи про crc32, там написано и про то, как сделать данные опять валидными с точки зрения crc.
Спасибо за советы, буду разбираться с исходниками. Пока сделал так - до передачи управления коду дистрибутива вызываю GetCommandLineA (именно с помощью этой функции в коде дистрибутива проверяется наличие параметра /NCRC) и в конец строки, адрес которой возвращает эта функция вписываю /NCRC. Тем самым отключая проверку CRC. Я, конечно, понимаю, что способ фиговенький. Вписывать что-то в не свою память и надеяться, что она ни кем не используется не самый лучший подход. Кстати, никто не знает - размер памяти где хранится строка, возвращаемая GetCommandLineA, фиксирован или память под эту строку выделяется динамически под конкретный размер строки?
Размер фиксирован но ее можно сменить на другую любого размера в пару движений, реверси kernel32.dll, там все ясно