![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать дамп процесса из Delphi... [D5, Win95/98, WinME, WinXP]
TankMan © (2004-02-06 19:01:00)Вот проблема такая возникла... кто-нибудь может поделиться информацией?
Мне нужно-то всего - как найти и исправить EP из дельфи, и как останавливать программу на определенном месте (break Point), допустим на самом EP... или чуть дальше... и править байты уже позже...т.е. добиться такого же еффекта как и в LordPE, только не в SI :)...воот... и вобщем непосредственно сам дамп процесса...
Erazzer (2004-02-09 22:25:00) [21]Копай в сторону структуры PE-файла (exe, dll, wdm и т.д.).
8ung (2004-02-09 21:19:00) [22]
> А как сделать полный дамп программы - это самый главный
> вопрос?
Циклическое выполнение ReadProcessMemory.
TankMan (2004-02-09 20:06:00) [23]А как сделать полный дамп программы - это самый главный вопрос?
Opuhshii (2004-02-08 09:12:00) [24]>break Point
CC - int 3
>EP
указан в заголовке PE файла,..
Игорь Шевченко (2004-02-08 01:06:00) [25]
> и как останавливать программу на определенном месте (break
> Point), допустим на самом EP
Любым отладчиком. С сайта Borland можно скачать td32
TankMan (2004-02-08 01:03:00) [26]Уж не знаю что такое "ВАП" :)... а
EP это - Entry Point, т.е. точка входа в программу.
LordPe - это программа, которая может "остановить" выбранную программу на точке в хода для SoftIce-а...
Вот...
А так вобщем вопрос один возниает ReadProcessMemory - это функция чтения памяти процесса (как видно из названия :) ) но у нее есть следующие "проблемные" для меня параметры - это куда, всетаки копировать таКОЙ объем, и еще то - каКОЙ именно объем... т.е. где узнать, начиная с какого адресса и сколько байт нужно читать?
Digitman (2004-02-07 12:08:00) [27]
> исправить EP
> и в LordPE, только не в SI
уж не знаю что такое EP, LordPE, SI, но дамп ВАП произвольного Win32+процесса реализуется с помощью связки ф-ций OpenProcess + AjustTokenPrivelegies + VirtualQueryEx + VirtualprotectEx + ReadProcessMemory
AKul (2004-01-23 13:18:00) [28]
> TankMan © (11.02.04 17:31) [17]
> Мне нужен вариант 2...
Судя по описанию, которое идет за этой фразой - Вам нужен все-таки вариант 1 (Вам не нужно сохранять стеки, образы всех загруженных DLL).
Для Вашей задачи (преобразование дампа в эекзешник) простым дампом процесса не обойтись.
Допустим, если Вы не хотите пользоваться функцией VirtualQueryEx, то Вы можете просто считать функцией ReadProcessMemory начиная с ImageBase (а для экзешника оно обычно0x400000) определенное количество байт (сами подберете длину этого блока).
Но вот восстановить заголок exe-файла - проблема, так как пакеры, криптеры всю "ненужную" информацию удаляют из него. Так же придется восстановливать импорт.
Лучше будет изучить алгоритм этого пакера/криптера и по его алгоритму восстанавлить оригинал.
> дело в том, что программа при запуске чуть-чуть изменяет
> свой код
Если все же программа только чуть-чуть изменяет свой код, не перемещает его и т.п. (что-то с трудом верится в это!), то заголовок exe-файла у Вас есть (берите не из дампа, а из запущенного файла) и размещение секций файла в памяти Вы знаете на 100% (ну, или узнаете, прочитав документацию по структуре PE-файла). Останавливайте программу где нужно (Вы писали, что знаете где), находите секцию кода и сохраняйте ее из памяти в оригинальный экзешник вместо существующей.
Если Relocation Table применялась (очень маловероятно для екзешника, только если он имел какой-нибудь "странный" ImageBase), то придется восстановить все абсолютные переходы и ссылки на адреса памяти (это не проблема).
Меняйте точку входа в заголовке файла на требуемую.
... и запускайте, наслаждаясь своим творением!