· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Dva вопроса

. 1 . 2 . 3 . >>

Посл.отвђт Сообщенiе


Дата: Май 29, 2004 01:04:26

Первый:
Можно ли написать hook просто,а не засовывая его в dll'ку?

Второй:
Можно ли как-нибудь программировать под Windows, не используя Windows Api?


Дата: Май 29, 2004 02:41:07

Можно ли написать hook просто,а не засовывая его в dll'ку?
Можно! Для этого нужно взять статью с этого сайта, прочитать ее и написать локальный хук. Либо сделать так, чтобы твоя прога генерила ДЛЛ автоматом, в память и получала доступ к функциям через GetModuleHandle и GetProcAddress.

Можно ли как-нибудь программировать под Windows, не используя Windows Api?
Можно! Взять все ДЛЛ реверснуть их и вставлять код функции прямо в твою программу...

Да и вообще, можно многое, но возникает другой вопрос... ЗАЧЕМ?


Дата: Май 29, 2004 08:37:47

Есть глобальные хуки, не требующие DLL, например WH_JOURNALRECORD/WH_JOURNALPLAYBACK


Дата: Май 29, 2004 21:00:07

Может быть так: Systemwide hooks without external dlls?


Дата: Май 29, 2004 21:33:10

>> Можно ли как-нибудь программировать под Windows, не используя Windows Api?
> Можно! Взять все ДЛЛ реверснуть их и вставлять код
функции прямо в твою программу...
"а издеваться не хорошо" (с)
что такое API это Application Programming Interface, т.е. интерфейс прикладных программ. API бывают разные. например, win32 API который в более или менее переносимом виде существуют на нескольких осях и полусотни эмуляторов. есть еще native API - который для каждой оси свой (у NT свой, у 9x - свой).
если человек имеет ввиду win32 API, то обойтись без него можно. если же без API вообще, то... тогда нужно спускаться на уровень драйверов, поскольку не обращаясь к операционной системе невозмодно задействовать даже самый примитивный ввод-вывод, так что хотя бы несколько API-функций заюзать придется (например, функции файлового ввода/вывода).
с другой стороны, что значит: "Можно ли как-нибудь программировать под Windows, не используя Windows Api"? не используя совсем или не вызывая их явно? можно взять любую библиотеку (например, LIBC) и забить на API хрен, программируя в свое удовольсвтие ;)

P.S. а вставить код не получится. NTDLL - самый нижний уровень приложений просто сливает все native API вызовы в диспетчер, код которого в приложение всталять никто не даст ;) вот драйвера можно программировать и без API, можно даже игорировать все нормы, правила и соглашения...
а еще есть boot-exe программы (они описаны у коберниченко), я так когда-та писал своб запускалку ms-dos программ из NT, чтобы в Алладина со звуком погонять, потом правда перешел на эмуляторы ;)


Дата: Май 30, 2004 10:39:59

kaspersky

Сэр, у меня есть к Вам один очень волнующий меня вопрос. Я задавал его ранее на форуме, но никто так на него и не ответил. Возможно ли как нибудь осуществлять вызов функций биос из драйвера в win nt, как к примеру это делалось в 9х вызовом VMMCall Begin_Nest_V86_Exec... ?
спасибо за ответ.


Дата: Май 30, 2004 16:50:47

> Возможно ли как нибудь осуществлять вызов функций биос
> из драйвера в win nt, как к примеру это делалось в 9х
> вызовом VMMCall Begin_Nest_V86_Exec... ?
хороший вопрос. в 9x такие вызовы возможны потому что 9x на самом деле добротная реализация win32s, т.е. по русски говоря, 32-битная надстройка над 16-битным ядерным фундаментом, уходящим своими конрнями в DOS. так что DOS/BIOS в 9x есть всегда.
в NT все иначе. NT вообще не мапит код ROM на адресное пространство своего ядра и BIOS'а в ядре _нет_, ядро NT полностью 32-разрядно.
функции BIOS можно вызывать из win32-подситемы, а точнее 16-разярдной ее части, прибегнув к помощи DPMI (только DPMI-хост в NT очень-очень слабенький, он больше для виду, чем для нормального юзанья - если надо покажу пример кода).
драйвер может создать поток в контексте 16-разрядной задачи и использовать ее как шлюз к BIOS'у, хотя полной уверенности, что управление получит именно BIOS у нас нет, т.к. вызовы подсистемы могут перехватывать драйвера нижних уровней.
чтобы вызывать BIOS непосредственно из ядра можно воспользоваться тем же DPMI или организовать V86, правильно заполнив дескрпитр табле и создав идентичный маппинг, но делать это придется руками ;(
видил пару драйверов, переводящих компьютер на время в реальный режим, но это слишком смелое решение, часто роняющее систему.
для прерывания INT 10h NT предоставляет специальную нычку, позволяя видеодрайверам юзать биос видеокарты. в DDK описана структура VIDEO_X86_BIOS_ARGUMENTS и есть функция VideoPortInt10.
аналогичная нынчка есть для SCSI-устройств со своими навороченными BIOS'ами. если не ошибаюсь это HwScsiAdapterControl (щас DDK под рукой нет, набиваю по памяти, могу соврать).
смутно помню, что еще пара нычек есть на plug & pray и сетевые карты (когда-то давно я их вызывал, но вообще-то сетевые карты я не программирую, так что по ним не спец).
ну и наконец, можно создать шлюз в программе, загружающейся до перехода NT в защищенный режим (NT это позволяет) и затем работающей как диспетчер, но это абсолютно недокументированная область. ковыясь в HAL'e NT 4.0 я когда-то видел там что-то подобное, но сейчас напрочь забыл...

P.S. так же обратите внимание на файлы BIOS1.ROM и BIOS4.ROM в системной папке. в MSDN есть описание приемов работы с ними. это, конечно, не "настоящий" BIOS, но для ряда задач он вполне подойдет...


Дата: Май 30, 2004 21:49:05

в XP я очень даже вижу BIOS в адресном пространстве.
(хотя вызова кода и не встречал, кроме ентого INT10).


Дата: Май 31, 2004 01:29:53

> в XP я очень даже вижу BIOS в адресном пространстве.
> (хотя вызова кода и не встречал, кроме ентого INT10).
в ядре? есть код BIOS? с ума сойти... по каким хоть адресам? а никакой драйер его уже не отмамил? хотелось бы увидить твою карту памяти. закинь на форум. что, весь BIOS целиком? или только одна часть?


Дата: Май 31, 2004 10:29:23

сделайте в sice GDT и просканируйте на наличие 16bit-Ring0-Code или Data(рядом будет),
потом посмотрите по их linear.(узнаете на глаз!?)

хотя это дело надо перепроверить без Sice, может он мапит?


Дата: Май 31, 2004 15:35:37 · Поправил: je_

вот перезагрузился в XP.
аттрибуты селехтора там: RE ED;

даже две копии.


Дата: Май 31, 2004 18:02:40

ага, теперь увидел и у себя.
только лучше юзать PHYS - так быстрее найти код BIOS.
аккурат в области, в которой NT хранит драйвера этапа загрузки. так что BIOS так очень даже кстати. правда, тут есть одно но. сейчас посмотрел пять разных машин с NT, на трех из них BIOS есть (причем, не только BIOS, но и весь первый метр адресного пространства реал моды в 80000000h), а на двух - нихрена подобного нет и здесь торчит законный 32-битный код драйверов. правда, смотрел под ms kd, айса на этих машинах нет. так что может быть все дело именно в айсе? если не трудно - глянь там pte/ptov при неактивном айсе. интересно, что он покажет... может еще дело в оборудовании? может, если драйвер вызывает Int 10h, NT оставляет весь 1 Мб реал моды, а если нет - то использует его для своих нужд? с этим надо разобраться.
народ! у кого установлен kd, гляньте плз на 800FFFF0h- что у вас там?


Дата: Май 31, 2004 19:48:44 · Поправил: kaspersky

отбой воздушной тревоги господа!
посмотрите, что показывает ice и kd по одним и тем же адресам одной и той же машины.
:d 08:800ffff0
0008:800FFFF0 EA 5B E0 00 F0 30 36 2F-30 38 2F 30 31 00 FC 1A  .[...06/08/01...
0008:80100000 21 22 1B 58 57 00 5E 00-0E 00 90 03 E0 8C 00 00  !".XW.^.........
0008:80100010 4F 8D 00 00 21 22 1B 58-75 00 7C 00 0E 00 90 03  O...!".Xu.|.....
0008:80100020 40 FD 01 00 AF FD 01 00-21 22 1B 58 7F 00 86 00  @.......!".X...
0008:80100030 0E 00 90 03 40 FD 01 00-AF FD 01 00 21 22 1B 58  ....@.......!".X
0008:80100040 89 00 90 00 0E 00 90 03-40 FD 01 00 AF FD 01 00  ........@.......
0008:80100050 21 22 1B 58 93 00 9A 00-0E 00 90 03 40 FD 01 00  !".X........@...
0008:80100060 AF FD 01 00 21 22 1B 58-9D 00 A4 00 0E 00 90 03  ....!".X........


айс нашел легко узнаваемый код BIOS, и если в него запрыгнуть, то его можно даже потрассить в айсе ;)
kd> dc 08:800FFFF0
0008:800ffff0  ???????? ???????? ???????? ????????  ????????????????
0008:80100000  581b2221 00490044 0100000d 00007760  !".XD.I.....`w..
0008:80100010  000077ad 581b2221 0054004d 01040009  .w..!".XM.T.....
0008:80100020  00006e80 00006ec7 581b2221 005e0057  .n...n..!".XW.^.
0008:80100030  01040009 00007640 00007687 581b2221  ....@v...v..!".X
0008:80100040  00670062 0100000d 00007760 000077ad  b.g.....`w...w..
0008:80100050  15151515 04980489 022a000e 62181bad  ..........*....b
0008:80100060  0036bec1 62210900 800c7804 00000010  ..6...!b.x......


kd нихрена не нашел, да и попытка чтения этих адресов из драйвера обламывает нас по самое "не хочу".

короче говоря, все как я и писал. NT код BIOS не мапит, но и не запрещает памить его другим.


Дата: Июн 1, 2004 14:45:54

kaspersky

Сэр,
GDT 0E0/ - код
GDT 100/ - data
GDT 108
GDT 110


Дата: Июн 1, 2004 14:48:40

kaspersky
а вот это уже действительно интересно
GDT 0F0

. 1 . 2 . 3 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.087