Обход проверки CRC у дистрибутивов NSIS

Тема в разделе "WASM.RESEARCH", создана пользователем her_ich, 17 окт 2009.

  1. her_ich

    her_ich New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2009
    Сообщения:
    8
    Если вдруг кто-то сталкивался с задачей нейтрализации проверки CRC у дистрибутивов собранных Nullsoft'ом, то поделитесь, пожалуйста, способом - как вы это делали.
    Более подробно - проблема заключается в том, что дистрибутивы NSIS при запуске проверяют CRC файла, и если файл был модифицирован, то выводится сообщение об этом и дистрибутив не устанавливается.
    Как я понимаю есть два подхода для решения данной задачи - либо отключить проверку, либо заново посчитать CRC после модификации дистрибутива и вписать это значение куда надо, чтоб проверка при запуске дала положительный ответ.
     
  2. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    и самый простой есть третий способ
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    если это CRC, тогда хватит модификации одного слова.
     
  4. her_ich

    her_ich New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2009
    Сообщения:
    8
    Если не секрет, то какой?
     
  5. her_ich

    her_ich New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2009
    Сообщения:
    8
    Какое именно слово вы имеете ввиду?

    А что там проверяется вопрос открытый.
    Сообщение выдает такое:
    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.
    Что он проверяет на самом деле - х.з.

    Причем использование этого параметра нифига не отключает проверку.
     
  6. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
    Регистр символов имеет значение.

    crc32 всего дистрибутива. Ну, почти всего. ;)
    Исходники открыты, посмотрите самостоятельно.
     
  7. Treant

    Treant Member

    Публикаций:
    0
    Регистрация:
    24 май 2009
    Сообщения:
    248
    Крис Касперски про обход Patch Guard там было что то про перерасчет CRC
    Что то вроде убийство часового или как то так
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    crc разные бывают. и слово - этот тот блок данных с которым оперирует crc, для crc32 - это ULONG.
    Стоит поискать хорошие статьи про crc32, там написано и про то, как сделать данные опять валидными с точки зрения crc.
     
  9. her_ich

    her_ich New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2009
    Сообщения:
    8
    Спасибо за советы, буду разбираться с исходниками.
    Пока сделал так - до передачи управления коду дистрибутива вызываю GetCommandLineA (именно с помощью этой функции в коде дистрибутива проверяется наличие параметра /NCRC) и в конец строки, адрес которой возвращает эта функция вписываю /NCRC. Тем самым отключая проверку CRC. Я, конечно, понимаю, что способ фиговенький. Вписывать что-то в не свою память и надеяться, что она ни кем не используется не самый лучший подход.
    Кстати, никто не знает - размер памяти где хранится строка, возвращаемая GetCommandLineA, фиксирован или память под эту строку выделяется динамически под конкретный размер строки?
     
  10. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    А что брякнутся на MessageBoxA нельзя и полистать код?
     
  11. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    Размер фиксирован но ее можно сменить на другую любого размера в пару движений, реверси kernel32.dll, там все ясно