Сейчас на форуме: asfa (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Как поставить заглушку на завершение работы программы
Посл.ответ Сообщение

Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 мая 2010 01:01
· Личное сообщение · #1

Пытаюсь написать пакер.
Выстраиваю внешнюю программу в памяти, запускаю. Всё идёт нормально.
А вот после завершения работы программы управление назад пакеру не передаётся. Пакер просто закрывается.

Что-то читал о заглушке на exit.
Расскажите, как её реализовать.

P.S. пишу на С.



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

Создано: 23 мая 2010 04:44
· Личное сообщение · #2

e53 пишет:
заглушке на exit.

Как понять?

Есть другая идея или алгоритм.
- Распаковываем;
- Записываем куда-нибудь, также изменяем указатель на точку входа (если нужно);
- Запускаем (CreateProcess);
- Потом ждем пока программа выполняется (кажется WaitForSingleObject (hProccess, INFINITE);
- Делаем все остальное;

В инете уже был какой-то криптер, который делает тоже самое (но не ждет завершения). По примеру распаковки думаю будет понятно как оно работает.
www.4shared.com/file/18076073/efbc883d/UnpackingCelsiusCrypt2English.html




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 23 мая 2010 08:20
· Личное сообщение · #3

В общем случае изнутри процесса ты не узнаешь о том, что он подыхает.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 23 мая 2010 10:22
· Личное сообщение · #4

Archer
> В общем случае изнутри процесса ты не узнаешь о том, что он подыхает.
Для этого есть специальная переменная - LdrpShutdownInProgress.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 23 мая 2010 10:29
· Личное сообщение · #5

На счёт заглушки - использовать нотификаторы, например шим(g_pfnSE_ProcessDying), нотификацию загрузчика(DLL_PROCESS_DETACH), собщения логгера ("LDR: PID: 0x%x finished - '%wZ'",LF,""), запросы на сервер(Csr), либо более сложные способы, например IDP, ожидание захвата кс + бактрейс и пр.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 23 мая 2010 11:33
· Личное сообщение · #6

Если поток тупо сделает mov esp,0, то он будет прибит обработчиком из ядра, и никакие длл детач и ничего этого не придёт. Я не вижу возможности отследить это из ринг3 из прибиваемого процесса, так что в общем случае завершение он не отследит.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 23 мая 2010 12:22
· Личное сообщение · #7

Archer
Разрушение стека это фатальная ошибка. А ошибки тут не учитываются. Темболее отследить это можно - на отладочный порт придёт уведамление.



Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 мая 2010 01:35
· Личное сообщение · #8

Всё, нашел, как это делается.

Во время обработки таблицы импорта нужно для ф-ций типа ExitProcess, exit и пр.
подставить адрес своей функции, которая будет это отрабатывать.

Я просто ещё немного не в теме, поэтому сразу не догадался.



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

Создано: 24 мая 2010 03:23
· Личное сообщение · #9

e53 пишет:
Во время обработки таблицы импорта нужно для ф-ций типа ExitProcess, exit и пр.
подставить адрес своей функции, которая будет это отрабатывать.

Решение не универсальное. Например для этого крякми www.crackmes.de/users/little_brother/key4lilbro_1/ (написан на VB). Там я не нашел ничего про ExitProcess.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 мая 2010 18:03
· Личное сообщение · #10

Ну раз автора такой костыль устраивает и проблема решена, то закрывай топик. Хотя, походу, он не читает то, что писали выше. И клерк, походу, не читает, ибо я ясно указал, что процесс 1 и ринг3, откуда в 1 процессе дебаг порт на самого себя, я не знаю.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 мая 2010 19:36
· Личное сообщение · #11

Archer
Слух. Вы явно не понимаете. Что клерк не читает или не то пишет вы заблуждаетесь. Вы слишком грубы, даже я так не пишу. Это можно было написать комуто иному, но не мне. То что вы сейчас пытаетесь понять и то что вам предстоит узнать из области ядра и далее я знаю досконально, незачем мне чтото упоминать про юзермод, вы так скажем есчо не доросли чтобы спорить со мной и подобными. Про разрушение стека, дебугпорты и пр. - незачем мне меняже цитировать и обьяснять примитивные вещи. Ктото может вас рассматривать как весьма шарящего, для меняже вы не особо продвинуты в подобных вопросах. Это в качестве демотиватора вам. Сосредоточтесь и почитайте вопрос есчо раз. Автору не нужно обрабатывать всякие крэши для изоляции своих потоков.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 мая 2010 20:06
· Личное сообщение · #12

Прочитал вопрос ещё раз: автор пишет пакер. Поскольку 99% пакеров с 1 процессом, делаю предположение, что процесс один. Поскольку 99% пакеров без дрова и юзаются юзермодные апи, делаю предположение, что это чисто юзермод. Автору надо получить управление после отработки упакованного приложения, что не исключает возможности получения управления при фолтах (например, удалять временные файлы надо в этом случае тоже). Я утверждаю, что в общем случае этого не получится и привёл примеры таких случаев. Что я прочитал не так, я хз. Остальное пропущу, ибо вырос из того возраста, когда меряются достоин-не достоин.
З.Ы. Что интересно, автор почему-то молчит на эту тему, что конкретно ему надо и зачем.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 мая 2010 20:21 · Поправил: Clerk
· Личное сообщение · #13

Archer
> не исключает возможности получения управления при фолтах
ну так мб нужно есчо багчеки в ядре отслеживать
Фоллты могут возникать везде в любой момент при необычных ситуациях, например изза косяков в нижележащем софте. Это никто не учитывает.
> Я утверждаю, что в общем случае этого не получится и привёл примеры таких случаев.
Вы пишите бред, согласитесь.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 мая 2010 20:27
· Личное сообщение · #14

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



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 мая 2010 20:30 · Поправил: Clerk
· Личное сообщение · #15

Archer
Имеет смысл. Не рассматриваю патч кодосекций как жизнеспособное решение. Нормальное решение я описал в #5.
Касательно ошибок - не зависимо от задачи, фолты софт не учитывает. Всякие ошибки ловятся через VEH, подобные разрушению стека - это фолты и по определению они не могут быть обработаны(ут. задача должна быть прибита вот).



Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 25 мая 2010 15:55
· Личное сообщение · #16

Наверное, мне сразу нужно было написать, что я хочу, что бы не было таких споров.
Работаю с юзермоде исключительно.

Я хотел просто получить управление после того, как программа отработает и вывести в лог, что программа отработала нормально.

Но, судя по комментариям, возможна масса вариантов, за разруливание которых мне браться пока рано.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 25 мая 2010 19:51
· Личное сообщение · #17

e53
Понятно сразу было, просто Archer решил повыёбываться. Решение описал, оно тривиально.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 25 мая 2010 21:26
· Личное сообщение · #18

Если задача поставлена так, то да, фолты обрабатывать смысла нет, я был не прав. Я не боюсь признать свои ошибки, особенно, если это потешит чьё-то самолюбие, мне не жалко.
На этом топик закрою.


 eXeL@B —› Вопросы новичков —› Как поставить заглушку на завершение работы программы
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати