Автор
|
Тема: Защита от отладки, хехе
|
Heromantor |
опубликован 01-10-2001 15:54 MSK
Какие есть способы сабжа? Вот напрмер читал я ридми.ткст от FrogIce, все понятно, за исключением одного ГЫГЫ, какой-бы int я не ставил у меня прога вылетает с чем-то вроде того: Unhandled exception ..., и че? Как захандлить инт? В досе все ясно было INT21h 25h/35h или записать свой хандлер в vector table а в WIN как быть? Хочу сделать обработчик int3 свой =], сделать енто без написания VXD я как понимаю низя :(. В ощем есть какие доки, по этому делу, как писать int handler для protected mode?
|
server_mouse
|
опубликован 01-10-2001 20:33 MSK
Что-бы перехватить прерывание нужно иметь 0-й уровень привелегий. Читаешь IDTR и прописываешь свой адрес по нужному смещению. А вот как получить Ring0 -- др. вопрос. Если в 9х, то можно прям из апликейшин, а вот ежели хочешь универсальности, то юзай WDM (VxD в 95 и NT IMHO разные). Но VxD/VDM всегда можно вырубить\подменить. Нужно туда какой-нибудь важный код заталкивать. В 9х для защиты можно юзать старый как 486 проц трюк с конвееризацией+буферизация (там CLI работает). Ну когда jmp проскакивает не туда.Но нынче такой способ поможет только при пошаговой отладке. А если ломать, то я как правило ставлю из софтайса брекпоинты на API да на память. Но как известно SoftIce в памяти можно обнаружить. Есть у него и какие-то там стандартные прерывания, что-б легче отлаживать было. ;) Вообще лучший способ против взлома -- сложный код. Кто ломал поймёт. Передаёт прога нехилые данные через стек, а SS установлен у тебя как раз на CS и хрен его разберёшь, чего оттуда запускается, а чего просто данные. Да ещё меняешь там чего-то через BP... Ну и так далее..... Чего-то я разошёлся... :) |
Heromantor
|
опубликован 01-10-2001 23:40 MSK
Защита от взлома очень интересная весчь, вроде она есть, а вроде и нет ни хрена :))), Я вот спросил потому-что знаю что ASProtect скажем бряки коцает(во хам :)), а как хрен знает как похоже drы поганит как-то, vxd-то нет никакой :), отлов отладчика через скажем MeltICE или по int 41h всем давно известны, помогает банальный патч айса. Это глупый вопрос и решается 15 минутами. Где-йто читал по определению exceptions айса, типа у него свой exception handler и т.д. а как сделать хз, + У меня возникает exception кода я пытаюсь прочитать IDT, ну в смысле не когда читаю а когда пытаюсь скопировать OffsetHigh,OffsetLow в нормальный 32 битный офсет, хотя вроде права стоят на RE? P.S> И как я установлю SS на CS? Яж не на асме пишу все это :(, |
server_mouse
|
опубликован 02-10-2001 10:17 MSK
>У меня возникает exception кода я пытаюсь >прочитать IDT, ну в смысле не когда читаю а >когда пытаюсь скопировать >OffsetHigh,OffsetLow в нормальный 32 битный >офсет, хотя вроде права стоят на RE?1. У твоей задачи точно Ring0? 2. Что за OffsetHigh,OffsetLow? Нужно ES:EAX например, т.е. 16:32. 3. cli -- самая любимая команда. (вторая самая любимая - hlt) :) 4. RE -- это случаем не Read&Execute ? > И как я установлю SS на CS? Яж не на асме пишу все это :(, Да, не лёгкая работа *%№№№## у бегемота. ;) C -- асемблер высокого уровня. К тому же всегда можно сделать asm{....} Я не даю руководства к действию. Это действительно сложно. Сам я подобные вещи делал только для дос и только однажды. |
Heromantor
|
опубликован 02-10-2001 15:19 MSK
А че чтоб читать IDT нужен Ring0? Уменя SIDT работает нормально в структуру typedef struct _IDT { WORD idtLimit; IDTGATE* idtGate; } IDT; Копируется и все ОК! Как я понял idtGate указывает на typedef struct _IDTGATE { WORD gateOffsetLow; WORD gateSelector; WORD gateFlags; WORD gateOffsetHigh; } IDTGATE; RE - это Read&Execute :)))А вродеж низя писать в сегмент кода? Или я не прав? |
server_mouse
|
опубликован 03-10-2001 11:18 MSK
>А че чтоб читать IDT нужен Ring0? Что бы сделать SIDT -- точно не надо. Да и читать IDT вроде можно. НО! SIDT возвращает тебе ФИЗИЧЕСКИЙ адрес IDT. А ты если не ошибаюсь пытаешся читать с него с включённым страничным механизмом. Не трудно представить себе чо из этого получается... Или я не прав? |
server_mouse
|
опубликован 03-10-2001 11:22 MSK
>А вродеж низя писать в сегмент кода? Или я не прав?Прав. Но то что для тебя код, для других DATA. Что тебе стоит загрузить ES например нужным дескриптором? Если ты конечно Ring0 ;) |
Heromantor
|
опубликован 03-10-2001 20:13 MSK
Так вот и проблема в том что нихочу я писать VXD да еще для 9х и НТ. Все надо обделать из 3-го кольца а там делать вообще ничего низя. ЖОПА этот Win |
server_mouse
|
опубликован 04-10-2001 09:53 MSK
Ну сделай тогда хотя бы геморойной отладку под 9х. А NT-... ну и фиг с ней. Пусть ломают. ;) |
Heromantor
|
опубликован 04-10-2001 15:20 MSK
Все я понял, на хрен защиту всю..... Защита на огр. срок, в жопу ничего не стоит :(, дилеры не хотят чтоб были ограничения кроме триала по дате. В ощем thx server. Защита - суксь |