Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите в написании резидента

11K
08 мая 2005 года
Санек
1 / / 08.05.2005
Помогите, пожалуйста, с резидентной программой (на асме) где нада перехватить 21h.
У меня есть такие данные:
buf db 64 dup (?)
user db 20 dup ('A')
pass db 20 dup ('B')
access db 'C'
strr1 db 64 dup ('D')
Все они в инсталяционной части заполняются, а вот при переходе в резидент почему-то теряются. В памяти остается мусор вроде:
admin nimda O
user1 1resu J
user2 2resu E
user3 3resu H
user4 4resu GAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDDDDDDDDDDD
Переменная buf остается в полном порядке, а остальные куда-то исчезают, например вместо C должна стоять O, вместо A и B - разные имена, да и символов A по идее 20, а их только 11. В Turbo Debugger'е все проходит нормально все переменные стают на свои места. Я так понял все проблемы происходят только при работе самого резидента.

Вот программа, она не доделанная, но работает. Может и корявая, главное что-бы работала:

cmp_d macro d1,d2,lm1,bb1
local disc_1,disc_2

cmp byte ptr [bx],d1
je disc_1
cmp byte ptr [bx],d2
jne lm1
disc_1:
cmp byte ptr [bx+1],'\'
je disc_2
cmp byte ptr [bx+1],0
jne continue
disc_2:
mov al,byte ptr access
or al,bb1
;jz done
jmp done

endm

_Code segment para 'code'
assume cs:_Code,ds:_Code,es:_Code,ss:_Code
org 100h

Start:
jmp init

;======================================================================
;======================ђҐ§Ё¤Ґв п Їа®Ја ¬¬ ===========================
;======================================================================


int21h proc far
push bx ;б®еа ҐЁҐ д« Ј®ў Ё ЁбЇ®«м§гҐ¬ле ॣЁбва®ў
pushf
push ax

cmp ah,39h ;ЇаЁ Ї®ЇлвЄҐ ᮧ¤ Ёп ¤ЁаҐЄв®аЁЁ
je secur1
cmp ah,3Ah ;ЇаЁ Ї®ЇлвЄҐ г¤ «ҐЁп ¤ЁаҐЄв®аЁЁ
je secur1
cmp ah,3Bh ;ЇаЁ Ї®ЇлвЄҐ б¬Ґл ¤ЁаҐЄв®аЁЁ
je secur1
cmp ah,3Ch ;ЇаЁ Ї®ЇлвЄҐ ᮧ¤ Ёп д ©«
je secur1
cmp ah,3Dh ;ЇаЁ Ї®ЇлвЄҐ ®вЄалвЁп д ©«
je secur1
cmp ah,5Bh ;ЇаЁ Ї®ЇлвЄҐ ᮧ¤. Ё ®вЄа. д ©«
je secur1
cmp ah,5Ah ;ЇаЁ Ї®ЇлвЄҐ ᮧ¤. Ё ®вЄа. ўаҐ¬. д ©«
je secur1
cmp ah,56h ;ЇаЁ Ї®ЇлвЄҐ ЇҐаҐЁ¬Ґ®ў Ёп д ©«
je secur1
cmp ah,41h ;ЇаЁ Ї®ЇлвЄҐ г¤ «ҐЁп д ©«
je secur1
;cmp ah,09h
;je write
jmp continue

;write:
;mov dx,offset buf
;jmp continue

secur1:
mov bx,dx ;Ґб«Ё Ї®«м§®ў ⥫м ᬮЈ § ©вЁ ¤ЁбЄ
mov ah,19h ;A, B, C Ё«Ё D, в®Ј¤ Ґ§ 祬 ¤Ґ« вм
int 21h ;Їа®ўҐаЄг § ®ў®
add al,'A'
cmp al,'A'
jne secur2
mov ah,47h
mov dl,al
mov si,offset strr1
int 21h
cmp byte ptr [si],'A'
je tt1
cmp byte ptr [si],'B'
je tt1
cmp byte ptr [si],'C'
je tt1
cmp byte ptr [si],'D'
je tt1
jmp short secur2

tt1:
cmp byte ptr [si+1],'\'
jne tt2
jmp continue
tt2:
cmp byte ptr [si+1],'0'
jne secur2
jmp continue

secur2:
mov dx,bx
cmp byte ptr [bx+1],':'
jne without_disc
cmp byte ptr [bx],'D' ;Їа®ўҐаЄ ¤ЁбЄ
je with_disc
cmp byte ptr [bx],'d'
je with_disc
jmp continue

without_disc:
mov ah,19h ;Ґб«Ё Їгвм гЄ § ЎҐ§ ¤ЁбЄ
int 21h
add al,'D'
cmp al,'D'
je pass_A
jmp short continue
with_disc:
add bx,3 ;Ґб«Ё Їгвм гЄ § б ¤ЁбЄ®¬
pass_A:
cmp_d 'A','a',pass_B,00001000b ;ЇаЁ а Ў®вҐ б Ї ЇЄ®© A
pass_B:
cmp_d 'B','b',pass_C,00000100b ;ЇаЁ а Ў®вҐ б Ї ЇЄ®© B
pass_C:
cmp_d 'C','c',pass_D,00000010b ;ЇаЁ а Ў®вҐ б Ї ЇЄ®© C
pass_D:
cmp_d 'D','d',continue,00000001b ;ЇаЁ а Ў®вҐ б Ї ЇЄ®© D

continue: ;Ґб«Ё Їа ў ¤®бвгЇ Ґбвм
pop ax
popf
pop bx

jmp dword ptr cs: old_int21h

done: ;Ґб«Ё Їа ў ¤®бвгЇ Ґв
pop ax
popf
pop bx
push bp
mov bp,sp
or word ptr [bp+6],1
pop bp
mov ax,5
iret
int21h endp

;==============१Ё¤ҐвлҐ ¤ лҐ Їа®Ја ¬¬л============================

buf db 64 dup (?)
user db 20 dup ('A')
pass db 20 dup ('B')
access db 'C'
strr1 db 64 dup ('D')
file1 db 'd:\security.txt',0
str1 db '” ©« Ў §л ¤ ле Ґ®Ў а㦥. „®бвгЇ Є ¤ЁбЄ ¬ Ґв',0Dh,0Ah,'$'
str2 db 0Dh,0Ah,'‚ўҐ¤ЁвҐ Ё¬п: ','$'
str3 db 0Dh,0Ah,0Ah,'‚ўҐ¤ЁвҐ Ї а®«м: ','$'
str4 db 0Dh,0Ah,0Ah,'?¬п Ё«Ё Ї а®«м ўўҐ¤Ґл ҐЇа ўЁ«м®!!!',0Dh,0Ah,'$'

old_int21h dw 0
old_int21h_2 dw 0

;======================================================================
;================?бв «пжЁ® п Їа®Ја ¬¬ ==============================
;======================================================================


init:
mov ax,3D02h ;®вЄалвЁҐ д ©«
mov dx,offset file1
int 21h
jnc next1

mov ah,09h ;б®®ЎйҐЁҐ ®Ў ®иЁЎЄҐ ЇаЁ а Ў®вҐ б д ©«®¬
mov dx,offset str1
int 21h

mov al,'@' ;ЇаЁ ®вбгвбвўЁЁ д ©« Ѓ„ а Ў®в ЎҐ§
mov byte ptr access,al ;¤®бвгЇ Є ¤ЁбЄ ¬
jmp next2

next1:
mov bx,ax ;з⥨Ґ д ©« ў ЎгдҐа
mov ah,3Fh
mov dx,offset buf
mov cx,512
int 21h

mov ah,3Eh ;§ ЄалвЁҐ д ©«
int 21h

pro:
mov ah,09h
mov dx,offset str2
int 21h
mov ah,0Ah
mov dx,offset user ;§ Їа®б ўў®¤ Ё¬ҐЁ Ї®«м§®ў ⥫п
int 21h

mov ah,09h
mov dx,offset str3
int 21h
mov ah,0Ah
mov dx,offset pass ;§ Їа®б ўў®¤ Ї а®«п Ї®«м§®ў ⥫п
int 21h

xor cx,cx
mov cl,byte ptr user+1
cmp cl,0
je Err1

mov si,offset buf

user1:
mov di,offset user+2
push cx
repe cmpsb ;ба ўҐЁҐ Ё¬ҐЁ ў Ў §Ґ ¤ ле
jnz l1
pop cx
jmp pass1

l1:
inc si
cmp byte ptr [si],0Ah
jnz l1
pop cx
inc si
cmp byte ptr [si],00h
jnz user1 ;б«Ґ¤гҐйҐҐ Ё¬п ў Ў §Ґ ¤ ле
jmp Err1 ;®иЁЎЄ Ґб«Ё Ё¬ҐЁ Ґв ў Ѓ„

pass1:
inc si
xor cx,cx
mov cl,byte ptr pass+1
cmp cl,0
je Err1
mov di,offset pass+2
repe cmpsb ;ба ўҐЁҐ Ї а®«п
jnz Err1

inc si
mov al,byte ptr [si]
mov byte ptr access,al ;б®еа ҐЁҐ § зҐЁп Їа ў ¤®бвгЇ
jmp next2

Err1:
mov ah,09h
mov dx,offset str4
int 21h
jmp pro

next2:
mov ax,3521h
int 21h

mov cs: old_int21h,bx
mov cs: old_int21h_2,es

mov ax,2521h
mov dx,offset int21h
int 21h

mov dx,offset init
int 27h

exit:
ret

;=============ҐаҐ§Ё¤ҐвлҐ ¤ лҐ Їа®Ја ¬¬л==========================


_Code ends
end Start
    1
    Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
    Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог