Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Блокировка запуска программ 
:(
    Опции темы
EASports
  Дата 5.5.2007, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Подскажите как можно заблокировать запуск программы (*.exe, *.com) в DOS? Подробнее: мне нужно реализовать резидентную прогу, которая будет блокировать паролем запуск 16-битных программ из командной строки.
PM MAIL   Вверх
anwe
Дата 5.5.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Так, ты уже сам и ответил. А перехватывать надо, кажется 4В функцию.
PM MAIL   Вверх
Akina
Дата 5.5.2007, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 454



Проблемная задача. Запуск копии командного процессора тоже будешь паролем проверять? а он запускается...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
EASports
Дата 7.5.2007, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



дак что, никто не знает? просто срочно надо. если кто всё-таки знает, напишите поподробне что нужно делать?
PM MAIL   Вверх
anwe
Дата 7.5.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Посмотри
Цитата(anwe @  5.5.2007,  11:32 Найти цитируемый пост)
4В функцию


PM MAIL   Вверх
EASports
Дата 7.5.2007, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Да, действительно. Нашёл в Yaндексе по запросу "ассемблер 4B" что-то интересное. Похоже на то, что нужно. Всем большой пасиб.
PM MAIL   Вверх
anwe
Дата 7.5.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Это загрузка другой программы из твоей.
Читай, изучай. smile 
PM MAIL   Вверх
EASports
Дата 8.5.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Дак как же тогда прехватить запуск другой проги? Мне не запустить надо, а наоборот поймать запуск... Как дос обрабатывает запуск,  этой функцией или нет? Если нет, то чем и как?
PM MAIL   Вверх
anwe
Дата 8.5.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Ну, как-как? Уже ж написали: перехватывать эту 4В. Ее описание прочитал?
ds:dx - адес строки с запускаемой программой. Вот анализируй ее. Что еще?
PM MAIL   Вверх
EASports
Дата 9.5.2007, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



ну как-то неопределённо написали. Я впринципе почитал уже про эту функцию, тока не очень понятно... ну да ладно. Да кстати, Дос-то её вызывает сам по себе когда что-нибудь запускает? Или это именно из какой-то проги запускать другую? Просто мне-то нуна резидента... Тут же возникает проблема с перехватом 21 прерывания: все основные функции доса идут через неё, дак как обрабатывать-то их? Так? ->
Код

proc my21h
push ax bx cx ; ...
pushf
call old21h
;далее мой обработчик
;...
pop cx, bx, ax
iret
endp

Или по-другому?  smile 
PM MAIL   Вверх
dumb
Дата 9.5.2007, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



так ты запустишь программу, а только потом сможешь об этом узнать.

Код

cmp ax, 4b00h ; остальные afair нафик не надо проверять в обчном случае
jne jmp_old
; проверяем путь запускаемого
cmp deny, 0
jz jmp_old
; выставляем ошибку на выход
iret
jmp_old:
db 0eah
old21h dd 0



Это сообщение отредактировал(а) dumb - 9.5.2007, 02:47
PM MAIL   Вверх
EASports
Дата 10.5.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



По ходу пооявился ещё вопрос, как в с моём обработчике прерывания (переопределённый int 21h) вызвать стандартный и вернуться в мой? ну типа чтобы отловить функцию, вывести текстовый запрос на ввод пароля, затем прочитать введённые символы и наконец определить разрешение запуска ну и соответственно запустить программу?
PM MAIL   Вверх
anwe
Дата 10.5.2007, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Цитата(EASports @  10.5.2007,  20:44 Найти цитируемый пост)
вызвать стандартный и вернуться в мой?

Код

pushf
call   original_int_21h

Просто делаешь дальний вызов командой call
Но зачем это в твое варианте? Тебе надо выполнять свои действия перед стандартным. В этом случае, как уже писали выше, просто прыгай на стандартный после своего:
Код

jmp   original_int_21h

PM MAIL   Вверх
EASports
Дата 11.5.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



нет ну как, я определяю, что пользователь хочет запустить программу, далее запрашиваю у него пароль, принимаю пароль, сверяю и если всё совпало только в этом случае выполняю запуск программы.  Здесь как минимум надо вызвать 2 раза вызывать стандартное 21 прерывание: вывод строки (9h int 21h) и чтение строки либо посимвольно(2h или 1h не помню и int 21h). Или я чего-то не догоняю? Да и потом ещё собственно запуск тоже обрабатывать стандартным 21 прерыванием. Т.е. 3 раза надо вызвать.

Это сообщение отредактировал(а) EASports - 11.5.2007, 20:39
PM MAIL   Вверх
anwe
Дата 11.5.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Правильно мыслишь.
Ты поставь в начале обработчика 21 переход на твой обработчик. Если (тебе уже писали) в ах тебе пришло 4В00, то сравнивай ее параметры, в частности, имя запускаемого файла с тем, к которому нужно запретить доступ. Если это не тот файл переходи (прыгай) на стандартный обработчик. Если твой, то возвращайся в программы (систему) передавая код запрета доступа к этому файлу.
Всё. Во всех остальных случаях вызова 21 ты не обрабатываешь. То есть, пожалуйста, выводи строки, считывай ввод, сравнивай (хотя это не затрагивает 21), словом, все что хочешь, то и делай. В чем проблема, что он будет вызываться 3 раза? Да хоть 33.
Единственное, создай какой-нибудь собственный флаг и проверяй его наряду с проверкой 4В00. Если пользователь ввел правильный пароль, поднимай флаг и вызывай снова 4В00.
Вот схематичный код:
Код

new_handler:
pushf
cmp   ax,4B00h
je  check_file
jmp  orig_handler
check_file:
cmp...   ;asked file & yuor file
je check_flag
jmp  orig_handler
check_flag:
cmp  flag,0
je  access_denied
jmp  orig_handler
access_denid:
popf
stc
mov   ax,5
iret

PM MAIL   Вверх
EASports
Дата 12.5.2007, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Вот блин думал-думал, хотел уж даже сделать переход в другую процедуру, там всё обработать... Блин, вот я не допёр-то. Конечно, просто флаг поставить. Пасиба огромное.  smile 
PM MAIL   Вверх
EASports
Дата 12.5.2007, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Чё-т у меня ну никак не получается вызвать прерывание из прерывания. Уж даже пытался повесить вывод строки на таймер, ну ни в какую. Вот код таймера, что не так, программа постоянно вместо нужной строки выводит какую-то ерунду и вылетает. 
Код

systimer proc

;cmp cs:flag,1
;jne ok
mov cs:flag,0
mov ah,9h
lea dx,cs:zapros
pushf
jmp cs:old21h   ; здесь и int 21h писал и call cs:old21h всё равно не работает.
ok:

jmp cs:old1ch
iret
endp

PM MAIL   Вверх
dumb
Дата 12.5.2007, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



Цитата(EASports @  12.5.2007,  01:21 Найти цитируемый пост)
Чё-т у меня ну никак не получается вызвать прерывание из прерывания.

есть такое страшное слово - нереентерабельность. кратко суть: int21 использует при работе некий кусок данных - хранит там, грубо, свое состояние. теперь ситуация: программа вызывает функцию, например, чтения строки/символа - т.е. выполнение "циклится" внутри 21h. приходит прерывание таймера, в котором ты пытаешься вывести строку посредством вызова 21h - получается вложенный вызов: находясь в обработчике 21h(чтение строки), опять вызывается обработчик 21h(вывод). те самые данные "накрываются" - системе каюк.
борьба с нереентерабельностью заключается в вывешивании флагов и опросах спец.флагов доса...

к нашим баранам: зачем тебе вообще таймер в твоей задаче?
пробила меня ностальгия, так что вот тебе "пирожок"(разгрызешь, надеюсь, сам): smile
Код

; tasm sample.asm
; tlink /t sample.obj

    .model tiny
    .386
    .code

MaxPswLen equ     8
BlFunc    equ     4b00h

    org 100h

start:
    jmp   init

log_name  db      '4blog.txt',0

sPswPmt   db      'pass: $'

BlProg    db      'mem.exe'
BlProgLen = ($ - BlProg)

BlPass    db      '123'
BlPassLen = ($ - BlPass)

psw_buf   db      MaxPswLen + 1
psw_len   db      0
psw_data  db      (MaxPswLen + 1) dup (0)

int_21h   proc

    cmp   ax, BlFunc
    jne   jmp_old

    pushf
    pusha
    push  ds es

;-- dbg log +
    pusha
    push  ds
    mov   si, ds
    mov   di, dx
    push  cs
    pop   ds
    mov   ax, 3d02h
    mov   dx, offset log_name
    xor   cx, cx
    int   21h
    mov   bx, ax
    jnc   skip_creat
    mov   ah, 3ch
    mov   dx, offset log_name
    xor   cx, cx
    int   21h
    mov   bx, ax
skip_creat:
    mov   ax, 4202h
    xor   cx, cx
    xor   dx, dx
    int   21h
    mov   ds, si
    mov   es, si
    mov   dx, di
    mov   cx, -1
    xor   ax, ax
    repne scasb
    not   cx
    mov   ah, 40h
    int   21h
    mov   ah, 3eh
    int   21h
ret_log:
    pop   ds
    popa
;-- dbg log -

    cld
    mov   cx, -1
    push  ds
    pop   es
    mov   di, dx
    xor   ax, ax
    repne scasb
    not   cx
    dec   cx
    mov   dx, cx
    dec   di
    mov   al, '\'
fname:
    cmp   al, es:[di-1]
    je    cmp_name
    dec   di
    loop  fname
cmp_name:
    sub   dx, cx
    mov   cx, dx
    cmp   cx, BlProgLen
    jne   rest_jmp_old
    push  cs
    pop   ds
    mov   si, offset BlProg
next_nc:
    mov   al, es:[di]
    or    al, 20h
    cmp   al, ds:[si]
    jne   rest_jmp_old
    inc   di
    inc   si
    loop  next_nc
        
    push  cs
    pop   ds
    mov   ah, 9
    mov   dx, offset sPswPmt
    int   21h
    mov   ah, 0ah
    mov   dx, offset psw_buf
    int   21h
    xor   cx, cx
    mov   cl, psw_len
    cmp   cl, BlPassLen
    jne   rest_iret
    mov   si, offset BlPass
    push  cs
    pop   es
    mov   di, offset psw_data
    repe  cmpsb
    je    rest_jmp_old

rest_iret:
    pop   es ds
    popa
    popf
    stc
    mov   ax, 5
    iret

rest_jmp_old:
    pop   es ds
    popa
    popf

jmp_old:
    db    0eah
old_21h   dd      0

int_21h   endp

init:

    mov   ax, ds:[2ch]
    mov   es, ax
    mov   ah, 49h
    int   21h
    mov   word ptr ds:[2ch], 0

    mov   ax, 3521h
    int   21h
    mov   word ptr old_21h, bx 
    mov   word ptr old_21h[2], es
    mov   ax, 2521h
    lea   dx, int_21h
    int   21h

    lea   dx, init
    int   27h

end start


ps. мысли о какой-либо оптимизации меня не посещали, поэтому тут уж сами... smile

PM MAIL   Вверх
EASports
Дата 26.5.2007, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 14.12.2006

Репутация: нет
Всего: нет



Рулез. Спасибо. Сначала не обратил внимания на эту прогу, не разобрался что называется. Но сегодня из-за безвыходности зашёл, скачал, откомпилил, разобрался и на её основе написал курсач. smile Клёво. Два часа и всё, а сидел дурак сутки, пытался сделать намного более хитрож...ым способом, ничего не получалось. Ещё раз огромное спасибо.
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1035 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.