Сейчас на форуме: _MBK_, Adler, asfa, bartolomeo (+9 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Как найти обработчик прерывания? |
Посл.ответ | Сообщение |
|
Создано: 29 сентября 2012 13:35 · Поправил: sooqua · Личное сообщение · #1 Программа хукнула прерывание "INT 2B". При выполнении этого опкода, в программе начинает выполняться функция. Как ёё найти? Вот скрин, делал для одного человека, который сказал что вектор прерывания должен находится по адресу 000000AC: П.С. После установки программы она не требует перезагрузки (кажется, когда драйвер устанавливаешь комп надо перезагрузить). А значит она не могла влезть в ring0? ![]() |
|
Создано: 29 сентября 2012 14:59 · Поправил: tomac · Личное сообщение · #2 Расположение таблицы прерываний в памяти определяется регистром IDTR. В моём понимании, из юзермода его прочитать не дадут. Записать в IDT из юзермода не дадут точно, так что либо kernel-mode драйвер, либо нет хука. Перезагрузка для загрузки ядерного драйвера, вроде, не необходима. По адресу 0xAC адрес обработчика прерываний будет только в очень старых процессорах. В микропроцессорах 8086/80186 таблица векторов прерываний расположена в первом килобайте памяти начиная с адреса 0000:0000 и содержит 256 векторов прерываний в формате сегмент:смещение. Начиная с процессора 80286, адрес в физической памяти и размер таблицы прерываний определяется 48-битным регистром IDTR. Да, и еще. Память по тому адресу, куда происходит переход по int 2bh, скорее всего, из юзермода прочитать тоже не дадут. ![]() |
|
Создано: 29 сентября 2012 15:15 · Личное сообщение · #3 Вариант А: программа установила драйвер, который перехватывает int 2b - ковыряй драйвер Вариант Б: программа установила SEH/VEH обработчик, и по исключению на int 2b переходит выполняться на обработчик. В этом случае смотри адрес SEH в TEB (сегмент FS, последняя из секций в карте памяти), или ставить бряк на AddVectoredExceptionHandler и получать адрес обработчика VEH ![]() |
|
Создано: 29 сентября 2012 15:40 · Личное сообщение · #4 sooqua, а вас не напрягло, что данное прерываение используется в user32.dll? Что за программа такая, что в целостность системы лезет? В любом случае ставишь ядерный отладчик(syser тот же самый или WinDbg), читаешь таблицу idt, и смотришь в каком модуле находится обработчик. Потом ковыряешь сам модуль уже с комфортом в IDA + виртуалка. ![]() |
|
Создано: 29 сентября 2012 15:56 · Личное сообщение · #5 |
|
Создано: 29 сентября 2012 16:10 · Личное сообщение · #6 |
|
Создано: 29 сентября 2012 21:35 · Поправил: ARCHANGEL · Личное сообщение · #7 О господи, какой кошмар. Давайте по-порядку. sooqua пишет: Программа хукнула прерывание "INT 2B". Может, и хукнула. А как вы это определили? Хотя б какой-то детектор руткитов запустили б, или бы в Syser вбили бы idt. При выполнении этого опкода, в программе начинает выполняться функция. Какая-то ересь. Когда в коде встречается любоя инструкция, та же int 1, "в программе", как вы выражаетесь, по-любому что-то начинает выполняться, контекст ведь не переключается. Так что предложение это смысловой нагрузки не несёт никакой. Вот скрин, делал для одного человека, который сказал что вектор прерывания должен находится по адресу 000000AC: И скрин тоже смысловой нагрузки не несёт. Непонятно, что это за место в недрах user32.dll. Ни отладочных символов, ни меток, ни как вы туда пришли. А то, что там ваша инструкция любимая, так это ещё ничего не значит. Например: Code:
Тоже она, но ведь никто это не считает плохим тоном, правда? После установки программы она не требует перезагрузки (кажется, когда драйвер устанавливаешь комп надо перезагрузить). А значит она не могла влезть в ring0? Не надо ничего перезагружать, как только ZwLoadDriver вернула управление, значит DriverEntry вернула управление, и если всё прошло успешно, то дровина загружена в память. tomac пишет: По адресу 0xAC адрес обработчика прерываний будет только в очень старых процессорах. Да причём тут старость? Всё зависит от режима работы процессора, а не от его возраста. Про остальное - подтверждаю. To All А вообще - стал замечать, что на форум всё чаще приходят люди, которые хотят накодить чит на какую-то игру, притом сами они == NULL, посему предлагаю создать топик с названием типа "Написание читов/ботов", там люди могут оставить заявки, но не так, как это делают сейчас, а по форме в таком виде: 1. Название игры. 2. Размер игры. 3. На чём написана игра. 4. Каков режим игры (Онлайн/оффлайн). 5. Что должен делать чит/бот. 6. Сумма вознаграждения. 7. Желаемые сроки выполнения заказа. А то так и будем читать, как кому-то что-то там где-то сказали, и он пошёл кодить. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 30 сентября 2012 15:58 · Личное сообщение · #8 ARCHANGEL пишет: посему предлагаю создать топик в котором будут отвечать, что есть специализированные форумы для ебучих читтеров. ![]() |
|
Создано: 30 сентября 2012 16:30 · Поправил: ARCHANGEL · Личное сообщение · #9 Gideon Vi Да, возможно так и будут отвечать, но это сэкономит массу времени и тем, и другим, т.к. напарываешься иногда на людей, которые оставляют заявки в поиске специалистов по параметрам, а там изначально написано что-то типа такого: "есть программа, в ней есть байт, который надо поправить". А потом выясняется, что программа - это игра, которая весит 16 Гиг, + к ней идёт лоадер, на котором навешан ВМпрот, а вот в лоадере нужно запатчить проверку, т.к. лоадер откуда-то спёрли, но вот где эти заветные байты - заказчик не знает, просто ему кто-то сказал, что с этой игрой этот лоадер будет работать (что далеко не факт), но вот только надо запатчить пару байтов. Так что уж пусть сразу будет видно, что это за заказ. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 30 сентября 2012 16:44 · Личное сообщение · #10 |
|
Создано: 30 сентября 2012 19:16 · Личное сообщение · #11 Если хочется обсудить-вынесите обсуждение в отдельный топик где-нить в оффтопе. Что же касается создания топика, и так есть поиск специалистов. Проще там правила подкорректировать, по-моему. Чем создавать ещё точно такой же топик, но для ботов. Да и даже при текущих правилах не так уж там и много запросов, чтобы спросить лишний раз целенаправленно, игра там на 16 гб или нет, если так хочется. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Как найти обработчик прерывания? |