|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Дек 22, 2003 00:57:11 Леди и джентельмены! Нужно писать драйвер под ДОС для клавиатуры а с чего начать я даже и не знаю может кто поделится со мной секретом? Заранее спасибо |
|
|
Дата: Дек 22, 2003 05:07:30 Сначала определите для себя (и для леди и джентльменов, чтобы они могли помочь) для чего нужен драйвер. |
|
|
Дата: Дек 22, 2003 15:11:43 q_q Нужен он для того чтобы написать "keylogger" По идее можно и без него обойтись, но препод сказал своё твёрдое "Фи" и заставил писать драйвер |
|
|
Дата: Дек 23, 2003 03:52:56 Достаточно ли написать обработчик int 9h? keylogger - это сохранятель нажатия кнопок клавиатуры в файл? Если да, то в каком объеме (скан-коды нажатия и /или отпускания) и в каком формате? |
|
|
Дата: Дек 23, 2003 08:49:05 q_q прав! кроме того, такие софтины уже есть.... или мож уже были... ;) |
|
|
Дата: Дек 23, 2003 20:07:04 Вот шаблончик. Только лень было писать процедуру записи в файл. Если будут замечания или вопросы - пиши. С уважением. Ворон. _384406940__intXXX.asm |
|
|
Дата: Дек 24, 2003 16:07:05 Kam333 Сейчас я буду занудствовать. Формально, досовский загружаемый драйвер устройства - это бинарный файл с особой структурой и расширением sys (хотя можно было и хитрый exe-шник сделать), который загружается из config.sys командой device. Ни один из известных мне русификаторов не был выполнен в виде драйвера, это всегда были простые резидентные программы. ;) Вот драйвера консоли (устройства CON) есть - стандартный внутри io.sys и загружаемый поверх него ansi.sys, а драйвера клавиатуры - нет. ;) Так что, если препод вынуждает тебя делать это именно драйвером можешь его послать. ;) В любом случае, чтобы сделать кейлоггер, мало написать резидент и перехватить прерывание. Как минимум, для записи лога в файл придётся обходить нереентерабельность доса. В общем, куча мелких тонкостей, совершенно неактуалных в наше время, так что и изучать их смысла нет. :( Raven Ты уж извини, но твой код одно сплошное замечание. Адресовать память можно и нужно не только через регистр bp. В твоём коде каждую конструкцию mov bp,offset адрес / mov ds:[bp],значение можно смело менять на mov [адрес], значение. Делать push 0a00h / pop di совершенно не обязательно, здесь вполне работает тот же mov. В обработчике прерывания ты два раза сохраняешь регистр ax. Встречается конструкция вида jmp over / over: А процедуру hex_handler на два экрана (кстати, а что она у тебя вместо F рисует?), целиком можно заменить на что-нибудь вроде cmp al,10 jb .1 add al,7 .1: add al,'0' ret Ещё там куча всего по мелочам, и самая грубая ошибка: при восстановлении вектора ты значала загружаешь в ds сегмент оригинального обработчика, а потом пытаешься загрузить его смещение их уже испорченного ds, и вообще ds не восстанавливаешь потом, кстати... В общем, оно у тебя должно на выходе дохнуть до прибития vdm-а. В целом, я бы тебе рекомендовал на некоторое время воздержаться от оказания подобной помощи. Пока хотя-бы минимально не научишься делать то, в чём собираешься помогать. |
|
|
Дата: Дек 24, 2003 19:18:20 1. Самая грубая ошибка. mov bp,offset oldkeyoff mov dx,ds:[bp] mov bp,offset oldkeyseg mov ax,ds:[bp] mov ds,ax mov ah,25h mov al,09h int 21h то есть это должно выглядеть так ? 2.кстати, а что она у тебя вместо F рисует? -- ?? вроде бы F... ?? 3. В целом - спасибо огромное за замечания. Ты прав мне еще много надо узнать. Главное у меня есть желание учиться :) |
|
|
Дата: Дек 24, 2003 19:32:24 Я же тебе написал как нужно адресовать память. И что сегментный регистр восстановить надо. push ds mov dx,[oldkeyoff] mov ds,[oldkeyseg] mov ax,2509h int 21h pop dsНасчёт ?? вроде бы F... ?? - а ты пробовал? ;) Ладно, всё равно выкидывать... |
|
|
Дата: Дек 24, 2003 19:50:59 сейчас попробую. |
|
|
Дата: Дек 24, 2003 20:00:42 1. так... у меня при попытке скомпилировать сообщило Can't address with currently ASSUMEd segment registers *** Невозможна адресация из текущих, установленных директивой assume, сегментных регистров. В выражении содержится ссылка на переменную, для доступа к которой не специфицирован сегментный регистр. *** Заменил на push seg datas pop es push ds mov dx,es:[oldkeyoff] mov ds,es:[oldkeyseg] mov ax,2509h int 21h pop ds Заработало. Это корректно? Если нет, то подскажи пожалуста как это делают... 2. Мда... ты прав. ничего оно не показывает... |
|
|
Дата: Дек 24, 2003 20:00:58 1. так... у меня при попытке скомпилировать сообщило Can't address with currently ASSUMEd segment registers *** Невозможна адресация из текущих, установленных директивой assume, сегментных регистров. В выражении содержится ссылка на переменную, для доступа к которой не специфицирован сегментный регистр. *** Заменил на push seg datas pop es push ds mov dx,es:[oldkeyoff] mov ds,es:[oldkeyseg] mov ax,2509h int 21h pop ds Заработало. Это корректно? Если нет, то подскажи пожалуста как это делают... 2. Мда... ты прав. ничего оно не показывает... С уважением. Ворон. |
|
|
Дата: Дек 28, 2003 00:51:45 Kam333 вот тебе программа которая перехватывает прерывание INT 09h(прерывание клавиатуры) и делает действие. В данном случае выводит на экран значения регистров. Думаю на её основе ты сможешь написать КейЛоггер. Там достаточно коментариев, для того чтобы можно было легко разобраться. Если тебе все равно не понятно как писать КейЛоггер или что-нибудь в листинге то пиши. _1867137637__kurs.asm |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.043 |