eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: SaNX, CDK1234 (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› SuspendThread на EP
Посл.ответ Сообщение

Ранг: 42.9 (посетитель)
Статус: Участник

Создано: 27 марта 2014 23:47 New!
Цитата · Личное сообщение · #1

подскажите можно ли как-то в Делфи остановить процесс на EP, ну или накрайняк после полной загрузки процесса или на других каких этапах загрузки процесса чтобы быть полностью уверенным что все нужные dll подгрузились?

Ранг: 2.3 (гость)
Статус: Участник

Создано: 28 марта 2014 05:10 New!
Цитата · Личное сообщение · #2

Самое ближнее место, на котором можно остановиться, немного за EntryPoint. Первым модулем в *.dpr файле (uses) прописать этот модуль:
Code:
  1. unit Suspend;
  2.  
  3. interface
  4.  
  5. implementation
  6.  
  7. initialization
  8.   asm int 3 end;
  9.  
  10. end.

Выполнение остановится ещё до выполнения Begin-кода в недрах CALL @InitExe

| Сообщение посчитали полезным: zds



Ранг: 328.1 (мудрец)
Статус: Участник
born to be evil

Создано: 28 марта 2014 08:54 New!
Цитата · Личное сообщение · #3

CreateProcess(..., ... or CREATE_SUSPENDED,...)

Ранг: 239.5 (наставник)
Статус: Участник

Создано: 28 марта 2014 09:43 New!
Цитата · Личное сообщение · #4

zds пишет:
чтобы быть полностью уверенным что все нужные dll подгрузились

Поскольку динамическую "подгрузку" длл никто не отменял, то остановка на ЕР не даст полную уверенность, так же как и остановка в любом другом месте, потому что сразу за этим местом может быть LoadLibraryA. Поэтому думаю нужно руками сначала определить где стопиться.

Если же ты свой процесс хочешь остановить после загрузки статично прописанных библиотек, то примерно так.
Code:
  1. program Project1;
  2.  
  3. uses
  4.   Forms,
  5.   Unit1 in 'Unit1.pas' {Form1};
  6.  
  7. {$*.res}
  8.  
  9. begin
  10.   asm
  11.   db $EB, $FE
  12.   end;
  13.   Application.Initialize;
  14.   Application.CreateForm(TForm1, Form1);
  15.   Application.Run;
  16. end.

Не совсем ясно, для чего это нужно, если честно

| Сообщение посчитали полезным: zds


Ранг: 17.7 (новичок)
Статус: Участник

Создано: 28 марта 2014 10:49 New!
Цитата · Личное сообщение · #5

ajax, флаг CREATE_SUSPENDED не приводит к загрузке зависимых DLL'ок. Размер образа в памяти будет килобайт 100

Ранг: 53.9 (постоянный)
Статус: Участник

Создано: 28 марта 2014 11:38 · Поправил: deniskore New!
Цитата · Личное сообщение · #6

Если хотите остановить чужое приложение на EP или TLS, то необходимо:
1) замэпить исполняемый файл, вытащить смещение TLS или адрес EP (OptionalHeader.AddressOfEntryPoint)
2) создать процесс с DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS
3) получить базовый адрес процесса (адрес по которому он загрузился) и прописать бп в памяти на ЕP или TLS в соответствии со смещениями которые вы получили ранее.
4) использовать WaitForDebugEvent и отловить свой брейкпоинт, далее делать необходимые действия и убрать брейкпоинт восстановив оригинальный байт.

Если приложение свое, то вставить бряк(int3) и обработать исключение так как вам это нужно.

| Сообщение посчитали полезным: Artem_N, zds


Ранг: 42.9 (посетитель)
Статус: Участник

Создано: 28 марта 2014 13:47 · Поправил: zds New!
Цитата · Личное сообщение · #7

вчера поздно писал, поэтому не полностью описал суть проблемы...
нужно остановить именно чужой процесс. делаю универсальный лоадер для комплекта программ - примерно 50 штук. сначала в памяти в секциях .data ищу адрес текста по шаблону. затем в секции .code ищу упоминание найденного адреса, где происходит загрузка в регистр этого текста. затем ищу ближайший условный переход JA, который идет перед загрузкой текста. занупливаю переход и собственно все.
сначала использовал CreateProcess - CREATE_SUSPENDED - все работало, пока не обнаружил, что в части программ этот код вынесен в подгружаемые dll. при этом CreateProcess - CREATE_SUSPENDED останавливает процесс до подрузки dll. на EP же в 100% случаях с моими прогами уже все нужные dll подгружены. соответственно встал вопрос как остановить чужой процесс на EP ну или где-нибудь после EP, пусть даже после полной загрузки...
sleep использовать не хочется, т.к. остановка в данном случае будет рандомная, в зависимости от загруженности, мощности ПК...а делать большой sleep тоже не хочется, т.к. визуально может быть вообще не понятно что сейчас происходит...
сейчас конечно обошел данный момент добавлением еще одной кнопки при нажатии которой после загрузки программы уже происходит поиск в памяти, но хотелось бы для общего развития решить для себя данный момент
спасибо, deniskore. буду пробовать. конечно пока большая часть не понятна, но буду разбираться


Ранг: 328.1 (мудрец)
Статус: Участник
born to be evil

Создано: 28 марта 2014 13:55 New!
Цитата · Личное сообщение · #8

Artem_N
"вы просто не умеете их готовить" я не говорил, что флаг - это единственное, что нужно сделать
zds
сырки не даю намеренно. писалось минут за 15 --> Link <--

| Сообщение посчитали полезным: zds


Ранг: 239.5 (наставник)
Статус: Участник

Создано: 28 марта 2014 14:21 · Поправил: TryAga1n New!
Цитата · Личное сообщение · #9

zds пишет:
EP же в 100% случаях с моими прогами уже все нужные dll подгружены. соответственно встал вопрос как остановить чужой процесс на EP

Именно это нужно было написать в первом посте
1) Получаем адрес EP (надеюсь не возникнет вопросов как)
2) Считываем 2 байта на ЕР(если делфипроги, то 99,9% что будет 55 8B)
3) Пишем по адресу EP предложенные мной выше EB FE, тем самым зацикливая прогу на ЕР при запуске.
4) Запускаем процесс
5) Делаем свое черное дело
6) Возвращаем нужные 2 байта из пункта 2 на EP(например через WriteProcessMemory)

Алгоритм очень простой и не сложный в реализации

| Сообщение посчитали полезным: ajax, zds

 eXeL@B —› Вопросы новичков —› SuspendThread на EP

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS