Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Глупый Explorer, или перехват CreateProcess. 2-я серия. :)

1 view
Skip to first unread message

Anton Krivoshejev

unread,
Nov 5, 2000, 3:00:00 AM11/5/00
to
"Arthur Vartanov" <ar...@penza.net> сообщил/сообщила в новостях следующее:
news:8u1f67$ann$1...@ddt.demos.su...
>
> Hello, Anton Krivoshejev <magi...@atom.ru>! You wrote:
> > > Достаточно просто проконтролировать _открытие_ файла - можно написать
> VxD,
> > > который перехватывает операции системы с файлами. Также просто
> > > проконтролировать _запуск_ 16-битных приложений. Как перехватить
> _запуск_
> > > приложений Win32 - представляю слабо :(
> > >
> > Если можно перехватить вызов функции открытия файла, то наверное можно
>
> Открытие файла перехватывается из VxD, для этого в Win9x есть специальный
> API.
>
> > перехватить вызов CreateProcess.
>
> А как перехватить вызов CreateProcess - не очень понятно.

Однажды возникла надобность исследовать работу одной программы и
проконтролировать вызовы каких-то апишных функций. С помощью софтайса
сделать это было нереально, функций несколько, вызывались они много раз,
получали множество аргументов... Я решил переделать kernel, gdi и user,
чтобы в них отлавливать интересующие меня функции, анализировать аргументы,
результаты и т.д., если надо записывать все это в лог-файл или еще
куда-нибудь.

Не тут-то было. Дизассемблировал я кернел, а вот назад собрать не удалось.
Дело в том, что в нем была сделана статическая линковка с другими
библиотеками и некоторые использованые функции из них не имели имен, а
только порядковые номера. Более того, адреса находились в секции .rdata в
виде ячеек, которые заполнялись на стадии загрузки программы. Как их
прилинковать я так и не понял. .DEF-файл (где можно было бы указать
порядковый номер функции) линковщик из vc5 игнорировал, с другими
линковщиками
тоже что-то не заладилось, поэтому прилинковать библиотеки у меня сразу не
получилось. А потом и вся идея накрылась, я это дело бросил. Немного спустя,
я чтоб подшутить над кем-то переделал welcome.exe и там решил проблему
статической линковки топорно: сделал свой стартовый код в котором
происходила динамическая линковка и с помощью GetProcAddr заполнялись ячейки
в самом welcome. Затем вызывался код welcom'a, в секции .rdata которого были
записаны мною адреса вызываемых функций.

Вот вопрос: можно ли более изящно перехватывать вызовы функций апи? И, если
это невозможно (а я думаю что так), как собрать переделаную библиотеку из
Windows? Так что бы функции из статических библиотек линковались по
порядковым номерам. Напишите... если кто-то уже с этим сталкивался, то он
понял что я имею в виду...

best regards
Anton


Arthur Vartanov

unread,
Nov 5, 2000, 3:00:00 AM11/5/00
to

Hello, Anton Krivoshejev <magi...@atom.ru>! You wrote:

> Я решил переделать kernel, gdi и user,
> чтобы в них отлавливать интересующие меня функции, анализировать
аргументы,
> результаты и т.д., если надо записывать все это в лог-файл или еще
> куда-нибудь.
> Не тут-то было. Дизассемблировал я кернел, а вот назад собрать не удалось.

Ну тут ты сильно погорячился :) Дизассемблировать кернел - это круто! Я вот
ndis дизассемблировал,
потом месяц назад собирал, хотя он и мелкий ~ 100 кил всего.

> А потом и вся идея накрылась, я это дело бросил. Немного спустя,
> я чтоб подшутить над кем-то переделал welcome.exe и там решил проблему
> статической линковки топорно: сделал свой стартовый код в котором
> происходила динамическая линковка и с помощью GetProcAddr заполнялись
ячейки
> в самом welcome. Затем вызывался код welcom'a, в секции .rdata которого
были
> записаны мною адреса вызываемых функций.
> Вот вопрос: можно ли более изящно перехватывать вызовы функций апи? И,
если
> это невозможно (а я думаю что так), как собрать переделаную библиотеку из
> Windows? Так что бы функции из статических библиотек линковались по
> порядковым номерам. Напишите... если кто-то уже с этим сталкивался, то он
> понял что я имею в виду...

Есть способ лучше! Я его не предлагал здесь, так как он тоже приводит с
изменению системных файлов, а это не есть хорошо. Имя этому способу -
Detours. Поясню - это такая либа, которая позволяет патчить исполняемый
файл, т.е. перехватывать любую функцию, если известен ее адрес (из dbg, из
export table или еще откуда-то). Перехват там делается следующим образом - в
начало исправляемой функции проставляет jmp на твою функцию, ну и далее все
ясно. Расписывать не буду, так как Detours идет с исходниками. Но если
отслеживать запуск приложений _только_ из 32-битных программ, то есть
способы еще лучше. Для этого нужно попасть в адресное пространство той
программы, которая является оболочкой для запуска Explorer, Windows
Commander, etc и поменять у нее import table.

--
Sincerely,
Arthur (ar...@penza.net)


Магистр

unread,
Nov 8, 2000, 3:23:30 AM11/8/00
to
> Ну тут ты сильно погорячился :) Дизассемблировать кернел - это круто! Я
вот
> ndis дизассемблировал,
> потом месяц назад собирал, хотя он и мелкий ~ 100 кил всего.

А как собирал-то? И заработало потом?

> способы еще лучше. Для этого нужно попасть в адресное пространство той
> программы, которая является оболочкой для запуска Explorer, Windows
> Commander, etc и поменять у нее import table.

Мудрено это, ну да ладно, со временем разберусь... :)

--
best regards
Anton

Alexey Belash

unread,
Nov 9, 2000, 3:00:00 AM11/9/00
to
Привет Anton!

05 ноября 2000 года (а было тогда 12:32)
Anton Krivoshejev в своем письме к All писал:

AK> Вот вопрос: можно ли более изящно перехватывать вызовы функций апи?
AK> И,
AK> если это невозможно (а я думаю что так), как собрать переделаную
AK> библиотеку из Windows? Так что бы функции из статических библиотек
AK> линковались по порядковым номерам. Hапишите... если кто-то уже с этим
AK> сталкивался, то он понял что я имею в виду...

Hе так давно в эхе PVT.VIRII спрашивали, как спрятать процесс в вин9х.
Мое решение той проблемы может помочь тебе решить эту :)


=== Файл GOLDED.OUT ===
─ Auto-added (2:5080/169.5) ─────────────────────────────────────── PVT.VIRII ─
Msg : 387 из 403 Snt Loc
От : Alexey Belash 2:5080/169.5 29 октября 00, 00:2
Кому : All 28 октября 00, 23:2
Тема : скрыть процесс в win32
───────────────────────────────────────────────────────────────────────────────
Привет All!

Вот вам несколько шагов для достижения сабжа:

Для того, чтобы некоторая задача не появлялась в списке процессов windows 9x,
я использую след. прием:
1. С помощью недокументированной функции kernel'a VxDCall (ординал 1) делается
доступной для модификации таблица экспорта того же kernel'a.
2. Выделяется участок shared memory, в котором размещаются функции-переходники
(warp) для функций: Process32First,Process32Next,Thread32First,Thread32Next,
Module32First,Module32Next. Алгоритм работы которых заключается в том, чтобы
вначале вызвать оригинальную функцию, и если она вернет значение, соотв.
текущей задаче, не возвращать его, а вызвать оригинальную функцию еще раз (для
следующего процесса, напр.) и вернуть уже ее значение. Тем самым достигается
то, что задачи, вызывающие функции-переходники вместо оригинальных, никогда не
получат параметры, соотв. защищаемой задаче.
3. Таблица экспорта kernel'a модифицируется так, чтобы адреса функций
Process32First,Process32Next,Thread32First,Thread32Next, Module32First,
Module32Next указывали на подготовленные ранее переходники в shared memory.
После этого, любая задача (напр. Proccess Viewer или плагин Far'a) запущенная
ПОСЛЕ вышеописанной модификации будет стандартным образом получать адреса
warp'ов вместо оригинальных функций, и следовательно, используя их, _HЕ СМОЖЕТ_
узнать о сущесвовании защищаемой программы :). Естесвенно, Far, запущенный
ранее, до модификации таблицы экспорта, уже будет иметь правильные адреса
соотв. функций, и будет продолжать видеть защищаемую программу :(.

А для того, чтобы процесс небыло видно по Ctrl+Alt+Del необходимо объявить
процесс как сервис, с помощью ф-ции SimpleServiceRegister

Лично реализовал под Builder и VC.

С уважением, Alexey 29 октября 2000 года 00:13

... Самое страшное - это когда человек достигает своей единственной цели.
-+- Destructive Labs, Ltd. <Web page: www.chat.ru/~dlab E-mail: dl...@chat.ru>
+ Origin: [Думаю... █████████████░░░░░░░░░░░░░ 50% completed.] (2:5080/169.5)

=== Конец ===

С уважением, Alexey 09 ноября 2000 года 10:59

... The god that failed.

0 new messages