Сейчас на форуме: jinoweb (+6 невидимых) |
eXeL@B —› Программирование —› Колбэки в Wow64 |
Посл.ответ | Сообщение |
|
Создано: 25 июля 2018 21:00 · Поправил: Boostyq · Личное сообщение · #1 Всем привет, недавно я спрашивала здесь про системные вызовы, и вот, все шло своим чередом, у меня вышло запустить некоторые функции, но недавно попробовала вызвать функцию с колбэком и ковыряюсь уже второй день Функция NtUserEnumDisplayMonitors, она не представляет особой ценности, просто я ее случайно заметила в win32k, ее особенность в колбэке, с которым все непонятно на wow64 Пробую вызвать ее, примерно таким способом на Windows 7 x64: Code:
Но при исполнении процесс крашится в ntdll.KiUserCallbackDispatcher (прямо на начале), колбэк при это не вызывается вообще На x64 работает (код немного другой), но на wow64 нет, при том я пробовала выделять больше места в стеке, давать в параметрах 32-битную и 64-битную версии колбэка Если посмотреть как это делают wow64* библиотеки: 1) после перехода вызывается, Wow64SystemServiceEx 2) таблица sdwhwin32, из нее используется whNtUserEnumDisplayMonitors 3) конвертация только размеров параметров (нет какого либо переходника для колбэка) 4) вызывается оригинальный системный вызов 5) в ядре xxxEnumDisplayMonitors, затем xxxClientMonitorEnumProc, и после KeUserModeCallback(77, ...) 6) в третьем кольце ClientMonitorEnumProc вызывает колбэк и возвращается, однако в моем случае не доходит до вызова колбэка Возможно кто-нибудь уже вызывал подобную функцию, насколько я понимаю нужно предлагать 32-битный вариант колбэка на wow64, тем не менее и это не работает... ----- В облачке многоточия |
|
Создано: 25 июля 2018 21:43 · Личное сообщение · #2 |
|
Создано: 25 июля 2018 21:56 · Поправил: f13nd · Личное сообщение · #3 |
|
Создано: 25 июля 2018 21:56 · Поправил: Boostyq · Личное сообщение · #4 difexacaw пишет: Наверное нужно причину падения выяснить, как думаете. Именно эту инфу и нужно было показать. Причина кажется случайной (я не пробовала отлаживать нулевое кольцо), вылетает на первой же инструкции ntdll.KiUserCallbackDispatcher с 0xC0000005, при этом если поставить точку останова на нее заранее, то при вызове точка не сработает, а вылетит в другом месте (вообще в ntdll.RtlRaiseStatus) PS: Успокойтесь уже, Инде-подозревака, сейчас бы обвинять меня в вирусмейкерстве из-за того, что я спрашиваю про системные вызовы, про них я прочитала на этом же форуме в очень старой теме, так же рефольф об этом писал в 11 году. f13nd пишет: http://www.woodmann.com/forum/archive/index.php/t-13636.html К совести взываешь? Ого, это та же самая функция, только там мусор какой-то, вроде обычный вызов на x86 PS2: Не могу представить как инлайн системные вызовы могут помочь скрыться от ав или обмануть их? У них наверняка эмуляторы, которым все равно что исполнять, код из ntdll/user32 или же из самого приложения, ведь в итоге происходит тот же системный вызов? ----- В облачке многоточия |
|
Создано: 25 июля 2018 22:24 · Личное сообщение · #5 Boostyq > PS2: Не могу представить как инлайн системные вызовы могут помочь скрыться от ав или обмануть их? У них наверняка эмуляторы, которым все равно что исполнять, код из ntdll/user32 или же из самого приложения, ведь в итоге происходит тот же системный вызов? У них нет системных вызовов. Именно этот сервис использовался для очень многих целей, вот выше накопали антидебаг метод. Этот сервис один из немногих, который является колбеком и экспортится как чистый юзер стаб. > Причина кажется случайной Не может такого быть, сегмент либо исполняется, либо нет. Если оно через раз, то это фокусы отладчика. ----- vx |
|
Создано: 25 июля 2018 22:36 · Поправил: ajax · Личное сообщение · #6 |
|
Создано: 25 июля 2018 22:51 · Личное сообщение · #7 |
|
Создано: 25 июля 2018 23:28 · Поправил: kunix · Личное сообщение · #8 |
|
Создано: 25 июля 2018 23:31 · Личное сообщение · #9 |
|
Создано: 25 июля 2018 23:37 · Поправил: kunix · Личное сообщение · #10 difexacaw, постишь имидж на своем сервере, получаешь статистику загрузок с IP, коррелируешь с другой инфой (кто онлайн, кто постит), узнаешь кто откуда с неплохой точность. Приличный форум должен грузить картинку себе на сервер. Более того, можно с имиджем уникальные кукисы ставить и потом сравнивать с аналогичной инфой на других сайтах. Короче, параноик негодуэ. |
|
Создано: 25 июля 2018 23:50 · Поправил: difexacaw · Личное сообщение · #11 |
|
Создано: 25 июля 2018 23:52 · Поправил: kunix · Личное сообщение · #12 Вообще приличный хакерский форум должен работать на минимальном HTML без ебучих джаваскриптов и имиджей. >Был даже человек который в сеть ходил из под нескольких вм друг на друга наложенных, но это паранойя имхо. Ну я такое делаю в особых случаях. Но чаще всего лень сильнее паранои. Считаю это признаком здоровой психики. |
|
Создано: 25 июля 2018 23:59 · Личное сообщение · #13 |
|
Создано: 26 июля 2018 00:07 · Личное сообщение · #14 |
|
Создано: 26 июля 2018 00:08 · Личное сообщение · #15 |
|
Создано: 26 июля 2018 00:08 · Личное сообщение · #16 |
|
Создано: 26 июля 2018 00:10 · Поправил: difexacaw · Личное сообщение · #17 |
|
Создано: 26 июля 2018 00:11 · Поправил: f13nd · Личное сообщение · #18 |
|
Создано: 26 июля 2018 00:16 · Личное сообщение · #19 |
|
Создано: 26 июля 2018 00:22 · Поправил: difexacaw · Личное сообщение · #20 |
|
Создано: 26 июля 2018 00:25 · Личное сообщение · #21 >А откуда вы это узнали ? читать умею внимательно, что пишут. >Смысл в том что шифроваться необходимо, но в разумных пределах Лучше перебдеть, чем недобдеть! | Сообщение посчитали полезным: difexacaw |
|
Создано: 26 июля 2018 00:35 · Поправил: Boostyq · Личное сообщение · #22 Студия выдает такое сообщение: Code:
По адресу такой код Code:
Если поставить точку останова на 0x7DE8010C (хотела посмотреть контекст), то вот такое При этом брекпоинт так и не срабатывает, и все умирает в другом месте Code:
При нормальном вызове EnumDisplayMonitors колбэк вызывается из ClientMonitorEnumProc Похоже, что что-то ломается до этого и он еле-еле доползает до 0x7DE8010C, хотя все уже обречено Я думаю, что адрес, который указывается при краше фиктивный, и это хоть и стабильный, но гейзенбаг Скорее всего ошибка именно в вызове, что странно, ведь такой же код работает для других функций ----- В облачке многоточия |
|
Создано: 26 июля 2018 02:06 · Личное сообщение · #23 |
|
Создано: 26 июля 2018 10:48 · Поправил: Boostyq · Личное сообщение · #24 plutos пишет: Можно ссылку, s'il vous plaît? https://exelab.ru/f/action=vthread&forum=6&topic=5572 P.S. Попробовала вызвать похожую функцию NtUserEnumDisplayDevices, такое же кол-во параметров, и их расстановка, но нет колбэка, она выполняется нормально с тем же кодом, так что проблема точно в колбэке ----- В облачке многоточия | Сообщение посчитали полезным: plutos |
|
Создано: 03 октября 2018 12:19 · Поправил: Модератор · Личное сообщение · #25 Boostyq Посмотрите может поможет чем, попробуйте вызывать не через syscall Obviously there’s some trick behind it, how a 32bit application could ask a 64bit processor to perform a transition from Ring3 to Ring0? As you probably know, Windows has a subsystem called WOW64 which acts as an emulation layer for 32bit apps under 64bit architectures. Among other things WOW64 is composed by a full set of 32bit stub/proxy libraries who make the app run without problems while WOW manages the switch between 32bit and 64bit OS code. An example of the KiFastSystemCall mechanism under WOW64 would be ( always talking about NtCreateFile ) Code:
Very similar to the 32bit counterpart, but this time the call is towards FS:C0h, a field in the TIB which contains a pointer to another call. So let’s try to see what’s in there with the following C application. |
|
Создано: 03 октября 2018 18:10 · Личное сообщение · #26 punxer пишет: Посмотрите может поможет чем Привет, видела эту статью С эмуляцией долго возилась, пришлось даже дебажить ядро однажды, но где проверяла работает Колбэки я больше не пробовала, потому что без надобности А по методам экстракции: 1) хранить в таблицах - решение не очень, нужно хранить не номера, а историю их смены, потому что можно попасть между билдами, и тогда как повезет, ненадежно вообщем 2) можно доставать на лету (что, я считаю, лучше) - nt32 из импортов ntdll к примеру - csr и консоль меня не интересовали, их не смотрела - win32 вот тут беда, там нету импортов (хотя вроде на некоторых версиях винды есть). можно подгружать pdb и парсить из символов, потом где нибудь кешировать, но у меня только одна функа оттуда, так что я пренебрегла ею ----- В облачке многоточия |
|
Создано: 04 октября 2018 03:52 · Личное сообщение · #27 Вот еще толковая статья Может пригодится. ----- Give me a HANDLE and I will move the Earth. |
|
Создано: 01 ноября 2018 20:36 · Личное сообщение · #28 plutos Вы явно не понимаете зачем нужна данная функция. А тс никогда не признается и почему то не способна найти самостоятельно аналог. И зачем лезть лишний раз в нэйтив, особенно теневой, там чёрт ноги сломит. - Выгрузка состояния - возврат в ядро(NtCallbackReturn) восстанавливает на уровне ядра(контекст из юм - NA) контекст задачи. Ломается всё - отладчики, вм етц. - Простейший теневой обратный вызов. Из за его простоты просто решается задача выше. Выполнить то же самое из к примеру оконной процедуры - проблема, так как происходит глубокий теневой вызов с массивным калстек. По этой причине и нужен простой как выше. Иначе придётся тянуть мотор или забивать хардкод. ----- vx |
eXeL@B —› Программирование —› Колбэки в Wow64 |