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

 eXeL@B —› Программирование —› Колбэки в Wow64
Посл.ответ Сообщение


Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 25 июля 2018 21:00 · Поправил: Boostyq
· Личное сообщение · #1

Всем привет, недавно я спрашивала здесь про системные вызовы, и вот, все шло своим чередом, у меня вышло запустить некоторые функции, но недавно попробовала вызвать функцию с колбэком и ковыряюсь уже второй день
Функция NtUserEnumDisplayMonitors, она не представляет особой ценности, просто я ее случайно заметила в win32k, ее особенность в колбэке, с которым все непонятно на wow64
Пробую вызвать ее, примерно таким способом на Windows 7 x64:
Code:
  1. ...
  2. mov [old_esp], esp;
  3. and esp, 0xFFFFFFF8;
  4. --- переход в 64-битное пространство ---
  5. xor rcx, rcx; // hDc
  6. xor rdx, rdx; // lprcClip
  7. mov r8, EnumCallback; lpfnEnum
  8. xor r9, r9; // dwData
  9. sub rsp, 0x28;
  10. mov r10, rcx;
  11. mov eax, 0x104a; // sdwhwin32.NtUserEnumDisplayMonitors
  12. syscall;
  13. add rsp, 0x28;
  14. --- переход в 32-битное пространство ---
  15. mov esp, [old_esp];
  16. ...

Но при исполнении процесс крашится в ntdll.KiUserCallbackDispatcher (прямо на начале), колбэк при это не вызывается вообще
На x64 работает (код немного другой), но на wow64 нет, при том я пробовала выделять больше места в стеке, давать в параметрах 32-битную и 64-битную версии колбэка
Если посмотреть как это делают wow64* библиотеки:
1) после перехода вызывается, Wow64SystemServiceEx
2) таблица sdwhwin32, из нее используется whNtUserEnumDisplayMonitors
3) конвертация только размеров параметров (нет какого либо переходника для колбэка)
4) вызывается оригинальный системный вызов
5) в ядре xxxEnumDisplayMonitors, затем xxxClientMonitorEnumProc, и после KeUserModeCallback(77, ...)
6) в третьем кольце ClientMonitorEnumProc вызывает колбэк и возвращается, однако в моем случае не доходит до вызова колбэка
Возможно кто-нибудь уже вызывал подобную функцию, насколько я понимаю нужно предлагать 32-битный вариант колбэка на wow64, тем не менее и это не работает...

-----
В облачке многоточия





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 25 июля 2018 21:43
· Личное сообщение · #2

Наверное нужно причину падения выяснить, как думаете. Именно эту инфу и нужно было показать.

ps:

> просто я ее случайно заметила

Знаю откуда вы это заметили, это не экспорт тени, а кучи семплов по обходу ав эмуляторов.

-----
vx





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 25 июля 2018 21:56 · Поправил: f13nd
· Личное сообщение · #3

difexacaw пишет:
кучи семплов по обходу ав эмуляторов

http://www.woodmann.com/forum/archive/index.php/t-13636.html
К совести взываешь? indy-vx.narod.ru

-----
2 оттенка серого





Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 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 или же из самого приложения, ведь в итоге происходит тот же системный вызов?

-----
В облачке многоточия





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 25 июля 2018 22:24
· Личное сообщение · #5

Boostyq

> PS2: Не могу представить как инлайн системные вызовы могут помочь скрыться от ав или обмануть их? У них наверняка эмуляторы, которым все равно что исполнять, код из ntdll/user32 или же из самого приложения, ведь в итоге происходит тот же системный вызов?

У них нет системных вызовов. Именно этот сервис использовался для очень многих целей, вот выше накопали антидебаг метод. Этот сервис один из немногих, который является колбеком и экспортится как чистый юзер стаб.

> Причина кажется случайной

Не может такого быть, сегмент либо исполняется, либо нет. Если оно через раз, то это фокусы отладчика.

-----
vx





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 25 июля 2018 22:36 · Поправил: ajax
· Личное сообщение · #6

del

-----
От многой мудрости много скорби, и умножающий знание умножает печаль





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 25 июля 2018 22:51
· Личное сообщение · #7

ajax

Индексировать нужно. Пятница не иначе.

-----
vx




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 25 июля 2018 23:28 · Поправил: kunix
· Личное сообщение · #8

Ебать, этот форум позволяет вставлять прямые ссылки на имиджи.
Не ну вы чего, ребята?
Отныне сюда только через TOR.




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 25 июля 2018 23:31
· Личное сообщение · #9

kunix

Минутку, что это значит ?

Никакая приват инфа не была раскрыта, о чём вы говорите.

-----
vx




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 25 июля 2018 23:37 · Поправил: kunix
· Личное сообщение · #10

difexacaw, постишь имидж на своем сервере, получаешь статистику загрузок с IP, коррелируешь с другой инфой (кто онлайн, кто постит), узнаешь кто откуда с неплохой точность.
Приличный форум должен грузить картинку себе на сервер.
Более того, можно с имиджем уникальные кукисы ставить и потом сравнивать с аналогичной инфой на других сайтах.
Короче, параноик негодуэ.




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 25 июля 2018 23:50 · Поправил: difexacaw
· Личное сообщение · #11

kunix

Ничего не могу сказать, вам виднее. Я к примеру никак не скрываюсь, никакие вм и торы не использую. Думаю кого волнует проблема безопасности, тот использует всякие разные методы. Был даже человек который в сеть ходил из под нескольких вм друг на друга наложенных, но это паранойя имхо.

-----
vx




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 25 июля 2018 23:52 · Поправил: kunix
· Личное сообщение · #12

Вообще приличный хакерский форум должен работать на минимальном HTML без ебучих джаваскриптов и имиджей.

>Был даже человек который в сеть ходил из под нескольких вм друг на друга наложенных, но это паранойя имхо.

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




Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 25 июля 2018 23:59
· Личное сообщение · #13

Я вам не мешаю?

-----
В облачке многоточия





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 26 июля 2018 00:07
· Личное сообщение · #14

difexacaw пишет:
Был даже человек который в сеть ходил из под нескольких вм друг на друга наложенных, но это паранойя имхо.

Достаточно ссылок на вася-вирьмейкер.народ.ру не выкладывать и паранойя сразу отпустит.

-----
2 оттенка серого





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 26 июля 2018 00:08
· Личное сообщение · #15

Boostyq

По вам вопрос один - конкретно контекст падения.

-----
vx





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 26 июля 2018 00:08
· Личное сообщение · #16

Boostyq пишет:
Я вам не мешаю?

Найди легальное использование этого колбека и посмотри в отладчике что происходит.

-----
2 оттенка серого





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 26 июля 2018 00:10 · Поправил: difexacaw
· Личное сообщение · #17

f13nd

А вы вкурсе что все те люди, которые поднимали викс ресурсы уже не с нами. Им дали сроки, по разным причинам, но так получилось к сожалению.

-----
vx





Ранг: 271.4 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 26 июля 2018 00:11 · Поправил: f13nd
· Личное сообщение · #18

difexacaw пишет:
Им дали сроки, по разным причинам, но так получилось.
А я вот не буду свои вечера офигительных историй устраивать и мне даже прокси не понадобится, чтоб на форумы заходить.

-----
2 оттенка серого




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 26 июля 2018 00:16
· Личное сообщение · #19

difexacaw, ты один на свободе остался что-ли?
По сабжу - там падение на обращении к fs:[0]. Вангую, что по каким-то причинам fs не настроен.




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 26 июля 2018 00:22 · Поправил: difexacaw
· Личное сообщение · #20

kunix

Смысл в том что шифроваться необходимо, но в разумных пределах.

> падение на обращении к fs:[0].

А откуда вы это узнали ?

-----
vx




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 26 июля 2018 00:25
· Личное сообщение · #21

>А откуда вы это узнали ?
читать умею внимательно, что пишут.

>Смысл в том что шифроваться необходимо, но в разумных пределах
Лучше перебдеть, чем недобдеть!

| Сообщение посчитали полезным: difexacaw


Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 26 июля 2018 00:35 · Поправил: Boostyq
· Личное сообщение · #22

Студия выдает такое сообщение:
Code:
  1. Вызвано исключение по адресу 0x7DE8010C (ntdll.dll) в very_opasniy_virus_po_mneniyu_difexacaw.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000.

По адресу такой код
Code:
  1. ntdll.KiUserCallbackDispatcher - 64 8B 0D 00000000     - mov ecx,fs:[00000000]

Если поставить точку останова на 0x7DE8010C (хотела посмотреть контекст), то вот такое
При этом брекпоинт так и не срабатывает, и все умирает в другом месте
Code:
  1. ntdll._RtlRaiseStatus - 40 53                 - push rbx
  2. ntdll._RtlRaiseStatus+2- 48 81 EC 90050000     - sub rsp,00000590
  3. ntdll._RtlRaiseStatus+9- 8B D9                 - mov ebx,ecx
  4. ntdll._RtlRaiseStatus+B- 48 8D 8C 24 C0000000  - lea rcx,[rsp+000000C0]
  5. ntdll._RtlRaiseStatus+13- E8 D82CFAFF           - call ntdll._RtlCaptureContext
  6. ntdll._RtlRaiseStatus+18- 48 8B 84 24 B8010000  - mov rax,[rsp+000001B8] <--- здесь 0x80000002: Datatype misalignment

При нормальном вызове EnumDisplayMonitors колбэк вызывается из ClientMonitorEnumProc
Похоже, что что-то ломается до этого и он еле-еле доползает до 0x7DE8010C, хотя все уже обречено
Я думаю, что адрес, который указывается при краше фиктивный, и это хоть и стабильный, но гейзенбаг
Скорее всего ошибка именно в вызове, что странно, ведь такой же код работает для других функций

-----
В облачке многоточия





Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 26 июля 2018 02:06
· Личное сообщение · #23

Boostyq пишет:
про них я прочитала на этом же форуме в очень старой теме, так же рефольф об этом писал в 11 году.


Можно ссылку, s'il vous plaît?

-----
Give me a HANDLE and I will move the Earth.





Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 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

Ранг: 30.0 (посетитель), 4thx
Активность: 0.030.01
Статус: Участник

Создано: 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:
  1. mov      eax,52h
  2. xor      ecx,ecx
  3. lea      edx,[esp+04h]
  4. call     fs:[C0h]
  5. add      esp,04h
  6. retn     002Ch


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.

--> https://www.evilsocket.net/2014/02/11/on-windows-syscall-mechanism-and-syscall-numbers-extraction-methods/<--




Ранг: 90.1 (постоянный), 91thx
Активность: 0.290.56
Статус: Участник

Создано: 03 октября 2018 18:10
· Личное сообщение · #26

punxer пишет:
Посмотрите может поможет чем

Привет, видела эту статью
С эмуляцией долго возилась, пришлось даже дебажить ядро однажды, но где проверяла работает
Колбэки я больше не пробовала, потому что без надобности
А по методам экстракции:
1) хранить в таблицах - решение не очень, нужно хранить не номера, а историю их смены, потому что можно попасть между билдами, и тогда как повезет, ненадежно вообщем
2) можно доставать на лету (что, я считаю, лучше)
- nt32 из импортов ntdll к примеру
- csr и консоль меня не интересовали, их не смотрела
- win32 вот тут беда, там нету импортов (хотя вроде на некоторых версиях винды есть). можно подгружать pdb и парсить из символов, потом где нибудь кешировать, но у меня только одна функа оттуда, так что я пренебрегла ею

-----
В облачке многоточия





Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 04 октября 2018 03:52
· Личное сообщение · #27

Вот еще толковая статья --> Mixing x86 with x64 code<--.
Может пригодится.

-----
Give me a HANDLE and I will move the Earth.





Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 01 ноября 2018 20:36
· Личное сообщение · #28

plutos

Вы явно не понимаете зачем нужна данная функция. А тс никогда не признается и почему то не способна найти самостоятельно аналог.

И зачем лезть лишний раз в нэйтив, особенно теневой, там чёрт ноги сломит.

- Выгрузка состояния - возврат в ядро(NtCallbackReturn) восстанавливает на уровне ядра(контекст из юм - NA) контекст задачи. Ломается всё - отладчики, вм етц.

- Простейший теневой обратный вызов. Из за его простоты просто решается задача выше. Выполнить то же самое из к примеру оконной процедуры - проблема, так как происходит глубокий теневой вызов с массивным калстек. По этой причине и нужен простой как выше. Иначе придётся тянуть мотор или забивать хардкод.

-----
vx



 eXeL@B —› Программирование —› Колбэки в Wow64
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати