Assembler - язык неограниченных возможностей


Полурезидентные программы - часть 2


; загрузить программу без выполнения mov bx,offset EPB ; ES:BX - EPB mov dx, offset filename ; DS:DX - имя файла (TIE.EXE) mov ax,4B01h ; функция DOS 4B01h int 21h ; загрузить без выполнения jnc program_loaded ; если TIE.EXE не найден, mov byte ptr XWING,1 ; установить флаг для find_passwd mov ax,4B01h mov dx,offset filename2 ; и попробовать BWING.EXE, int 21h jnc program_loaded ; если он не найден, mov ax,4B01h mov dx,offset filename3 ; попробовать XWING.EXE, int 21h jc error_exit ; если и он не найден ; (или не загружается по ; какой-нибудь другой причине) ; выйти с сообщением об ошибке program_loaded: ; Процедура проверки пароля не находится непосредственно в исполняемом файле ; tie.exe, bwing.exe или xwing.exe, а подгружается позже из оверлея front.ovl, ; bfront.ovl или fcontend.ovl соответственно. Найти команды, выполняющие чтение ; из этого оверлея, и установить на них наш обработчик find_passwd cld push cs pop ax add ax,par_length mov ds,ax xor si,si ; DS:SI - первый параграф после конца нашей ; программы (то есть начало области, в которую ; была загружена модифицируемая программа) mov di,offset read_file_code ; ES:DI - код для сравнения mov cx,rf_code_l ; CX - его длина call find_string ; поиск кода, jc error_exit2 ; если он не найден - выйти ; с сообщением об ошибке ; заменить 6 байт из найденного кода командами call find_passwd и nop mov byte ptr [si],9Ah ; CALL (дальний) mov word ptr [si+1],offset find_passwd mov word ptr [si+3],cs mov byte ptr [si+5],90h ; NOP

; запустить загруженную программу ; надо записать правильные начальные значения в регистры для ЕХЕ-программы ; и заполнить некоторые поля ее PSP mov ah,51h ; функция DOS 51h int 21h ; BX = PSP-сегмент загруженной программы mov ds,bx ; поместить его в DS mov es,bx ; и ES. Заполнить также поля PSP: mov word ptr ds:[0Ah],offset exit_without_msg mov word ptr ds:[0Ch],cs ; "адрес возврата" mov word ptr ds:[16h],cs ; и "адрес PSP - предка" lss sp,dword ptr cs:EPB_SSSP ; загрузить SS:SP jmp dword ptr cs:EPB_CSIP ; и передать управление на ; точку входа программы




Начало  Назад  Вперед