Хочу восстановить программу по снятому дампу

Тема в разделе "WASM.RESEARCH", создана пользователем SaNTa_RnD, 31 янв 2006.

  1. SaNTa_RnD

    SaNTa_RnD New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2005
    Сообщения:
    21
    Адрес:
    Russia
    Такой любопытный вопрос: можно ли по дампу памяти какой-то из программ восстановить(загрузить ее в отладчике)? И если можно, то в каком из отладчиков? Каким образом отладчик загрузит необходимые значения в регистры процессора? Как правильно снять дамп памяти программы(т.е как сохранить дамп только, интересующей меня, программы не затрагивая другие)? Какими средствами пользоваться для этого? Какие бывают дампы(форматы сохраняемых дампов) для различных отладчиков? Где можно об этом почитать?
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    1. Можно автоматически (утилитами)

    2. Можно вручную (проще с отладчиком, чтоб не совсем руками)

    2а. Если код полностью базонезависим, то он тупо копируется и вставляется в свой исходник

    2б. Иначе в первую очередь надо определить к какому imagebase он привязан

    - сдампленный с одного адреса, а потом загруженный по другому, код без дополнительной правки (читай о релоках) работать не будет

    - код может обращатся к данным по абсолютным адресам не только других секций, но и модулей (надо проанализировать и обеспечить присутствие этих данных по указанным адресам в своем процессе, иначе поймаете exception)

    3. Вручную обычно этим занимаюся, если необходимо перевыдрать пару чужих ф-ций к себе, когда будут нужны их адреса:

    - то можно поставить метки перед ними путем разбивки дампа на "ф-циональные" куски

    - или использовать "целый" дамп, тогда в качестве адресов ф-ций использовать константы предварительно прощитанные относительно известных меток (начала дампа например)

    4. Чтобы все отлично получилось, необходимо хоть малейшее представление как работает своя собственная программа и почему она отказывается это делать после правки нескольких байт случайным образом
     
  3. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
  4. Bitfry

    Bitfry New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2004
    Сообщения:
    54
    Адрес:
    Россия, Санкт-Петербург


    И не только в отладчик. Ты можешь получить совершенно рабочий exe или dll.

    Таким образом обычно выполняют распаковку и дешифровку файлов.





    В любом отладчике есть возможность снять дамп.





    Довольно просто, если речь о Форточных прогах, нужно только прочитать несколько раз доки по PE поковырять несколько реальных PE-файлов. Ты узнаешь, что такое образ файла в памяти (image) и чем он отличается от файла на диске (не так уж сильно) всё станет понятно само собой (импорт, ресурсы, заголовок =).





    Поиском. По слову dump на соответствующих сайтах ;)

    PE Tools, IceExt для SoftIce, для Ollydbg плагинов навалом...

    Думаю сразу нужно брать ImpRec, PEiD самый новый, несколько всяких утилит по ресурсам и т.п.





    Чистый дамп обычно не зависит от отладчика, это просто последовательность байт из памяти.

    В случае с форматом PE от начала образа (ImageBase) до его конца (ImageBase+Size of Image-1).

    В Windows 99.9% программ оформлены в виде PE файла.





    Тема: Распаковка файлов (ручная).

    Читать здесь и на cracklab.ru (в эти дни чего-то серверы колбасит).



    Рекомендую следующие статьи:

    "Распаковка: от самого простого к чуть более сложному" by MozgC (доходчиво)

    "Об упаковщиках в последний раз" by Volodya & NEOx (информативно)

    "Формат исполняемых файлов PortableExecutables (PE)" (криво, но прочесть нужно)

    "Теоретические основы крэкинга" by CyberManiac

    Ещё Криса Касперски почитай.
     
  5. MrHammer

    MrHammer New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2003
    Сообщения:
    197
    Если нужен рабочий дампик то придется снять его в точке старта программы, иначе она или RTL проиницализирует секцию данных и BSS и будет посылать нах.
     
  6. MrHammer

    MrHammer New Member

    Публикаций:
    0
    Регистрация:
    9 июл 2003
    Сообщения:
    197
    К тому же прога может выделить динамическую память и записать указатели в глобальные переменные. А последствия обращения по неверному указателю, думаю, обьяснять не надо.