![]() |
eXeL@B —› Вопросы новичков —› Дамп процесса и PE Tools (после дампа Exe не запускается!) |
Посл.ответ | Сообщение |
|
Создано: 04 ноября 2009 18:45 · Личное сообщение · #1 Здавствуйте! Занимаюсь сделующим - хочу сделать дамп процесса в exe, так чтобы он потом запускался. для тренировки взял calc.exe. Запускаю calc.exe, запускаю PE Tools (v 1.5 RC7, вроде последний), выбираю calc.exe и жму Dump Full... Дамп не запускается, с ошибкой "Only part of a ReadProcessMemory or WriteProcessMemory request was completed. Cannot execute". Если сделать dump partial примерно та же история. (Rebuild PE не помогает) Теперь возмем ProcDump (v 1.4). Проделаем тоже самое. Dump Full пишет почемуто: This process can't be dumped !! . Зато Dump Partial делает вполне рабочий Exe. Подскажите, почему так получается? Ожидаемая ли это ситуация? Еще вопрос - если в иде дебажить процесс остановить на брейкпоинте можно ли в этот момент сделать дамп процесса? ![]() |
|
Создано: 04 ноября 2009 19:48 · Личное сообщение · #2 Прилагаю маленький файл HTML. Там Крис Касперски несколько строк пишет о дампе. Возможно найдете ответ там на свой вопрос. ![]() ![]() |
|
Создано: 04 ноября 2009 20:02 · Личное сообщение · #3 |
|
Создано: 04 ноября 2009 20:06 · Личное сообщение · #4 |
|
Создано: 04 ноября 2009 21:09 · Поправил: tempread · Личное сообщение · #5 Про восстановление импорта не забываете? Если дампить прогу, в которой установлены программные брекпоинты, то она дампится с ними. Программный брекпоинт делается установкой специального байта - 0xССh на команду, вот с ними и сдампится. Отладчик установленные СС байты прячет от пользователя, поэтому этих байт не видно. Почитайте, как происходит трасировка приложений. ![]() |
|
Создано: 04 ноября 2009 21:26 · Личное сообщение · #6 Провел следующее исследование, которое меня повергло в шок! вот два программы: #include "stdafx.h" #include "windows.h" int dumped = 0; int WinMain(HINSTANCE a, HINSTANCE b, LPSTR c, int d) { bool bdumped = (bool)dumped; dumped = 1; MessageBox(NULL, bdumped ? L"Dumped" : L"Not dumped", L"Test", 0); return 0; } и #include "stdafx.h" #include "windows.h" static int dumped = 0; int WinMain(HINSTANCE a, HINSTANCE b, LPSTR c, int d) { bool bdumped = (bool)dumped; dumped = 1; MessageBox(NULL, bdumped ? L"Dumped" : L"Not dumped", L"Test", 0); return 0; } Бинарники отличаются 5ю байтами - timestamp и номер версии в дебажной секции. Я пытался ее сдампить в ProcDump(PD) и PE Tools(PE): Сделаны были след дампы Full в PD и PE, Partial в PE. Итого 6 дампов. 1я, Full в PD: Not dumped. 2я, Full в PD: Unhandled exception. 1я, Full в PE: Dumped. 2я, Full в PE: Dumped. 1я, Partial в PE: Unhandled exception. 2я, Partial в PE: Unhandled exception. итого работает тока PE Tools. ![]() |
|
Создано: 05 ноября 2009 00:59 · Личное сообщение · #7 |
|
Создано: 05 ноября 2009 01:20 · Поправил: zeppe1in · Личное сообщение · #8 |
|
Создано: 05 ноября 2009 17:41 · Личное сообщение · #9 coolangel Вопрос вот в чем - почему дамперы работаю не корректно или я что-то не так делаю? Статей по технике дампига не нашел. Дампил я простейшую программу, которая никак не противостоит дампингу, лишь проверяет сий факт. zeppe1in а если не upx? ![]() ![]() |
|
Создано: 05 ноября 2009 18:18 · Поправил: tempread · Личное сообщение · #10 IEatBrain пишет: или я что-то не так делаю? Статью приводил во вложении deepred. Техника следующая: стартуешь программу в отладчике,останавливаешь ее на EP, убираешь все программные прерывания, дампишь чем хочешь. Потом запускаешь ImpRec, указываешь EP, получаешь таблицу импорта,нажав кнопку(если программа не защищена, то это сработает),прописываешь импорт в дамп. Вот и все. ![]() |
|
Создано: 05 ноября 2009 19:41 · Личное сообщение · #11 |
![]() |
eXeL@B —› Вопросы новичков —› Дамп процесса и PE Tools (после дампа Exe не запускается!) |