Такой любопытный вопрос: можно ли по дампу памяти какой-то из программ восстановить(загрузить ее в отладчике)? И если можно, то в каком из отладчиков? Каким образом отладчик загрузит необходимые значения в регистры процессора? Как правильно снять дамп памяти программы(т.е как сохранить дамп только, интересующей меня, программы не затрагивая другие)? Какими средствами пользоваться для этого? Какие бывают дампы(форматы сохраняемых дампов) для различных отладчиков? Где можно об этом почитать?
1. Можно автоматически (утилитами) 2. Можно вручную (проще с отладчиком, чтоб не совсем руками) 2а. Если код полностью базонезависим, то он тупо копируется и вставляется в свой исходник 2б. Иначе в первую очередь надо определить к какому imagebase он привязан - сдампленный с одного адреса, а потом загруженный по другому, код без дополнительной правки (читай о релоках) работать не будет - код может обращатся к данным по абсолютным адресам не только других секций, но и модулей (надо проанализировать и обеспечить присутствие этих данных по указанным адресам в своем процессе, иначе поймаете exception) 3. Вручную обычно этим занимаюся, если необходимо перевыдрать пару чужих ф-ций к себе, когда будут нужны их адреса: - то можно поставить метки перед ними путем разбивки дампа на "ф-циональные" куски - или использовать "целый" дамп, тогда в качестве адресов ф-ций использовать константы предварительно прощитанные относительно известных меток (начала дампа например) 4. Чтобы все отлично получилось, необходимо хоть малейшее представление как работает своя собственная программа и почему она отказывается это делать после правки нескольких байт случайным образом
И не только в отладчик. Ты можешь получить совершенно рабочий 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 Ещё Криса Касперски почитай.
Если нужен рабочий дампик то придется снять его в точке старта программы, иначе она или RTL проиницализирует секцию данных и BSS и будет посылать нах.
К тому же прога может выделить динамическую память и записать указатели в глобальные переменные. А последствия обращения по неверному указателю, думаю, обьяснять не надо.