|
|
| Посл.отвђт | Сообщен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 |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.087 |