Сейчас на форуме: bartolomeo, -Sanchez-, morgot, sashalogout (+5 невидимых)

 eXeL@B —› Софт, инструменты —› ScyllaHide
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>
Посл.ответ Сообщение

Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 27 июня 2017 14:43
· Личное сообщение · #1

Плаг теперь на github'е
https://github.com/x64dbg/ScyllaHide/releases

Релиз свежий от 24.06.2017.

Добавлено спустя 24 минуты
Нуждающимся добавил x64 плаг под иду (sdk 6.95)

e7e9_27.06.2017_EXELAB.rU.tgz - ScyllaHideIDAProPlugin-x64.zip

-----
старый пень


| Сообщение посчитали полезным: zNob, parfetka, mak, neprovad, VOLKOFF, plutos, nice, VodoleY, dzikar


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

Создано: 06 ноября 2017 09:08
· Личное сообщение · #2

VOLKOFF

Я заметил выше знакомую константу 0x1E: ProcessDebugObjectHandle и подумал что не следует юзать какой то инструмент, не понимая сути.

-----
vx





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

Создано: 08 ноября 2017 00:17
· Личное сообщение · #3

--> отредачил <--
в посте есть вызовы не документированные виндой, пока рою чего за беда.
кто в теме по этим функам , жду коментов

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




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

Создано: 08 ноября 2017 07:09
· Личное сообщение · #4

Может спросонья не понял сути, но в user32.dll GetProcessWindowStation и GetUserObjectInformation. Первая сразу дергает теневой сервис, вторая обертка побольше. Обе функи документированы + в реактОС нашлись совпадения по ядерным именам.




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

Создано: 08 ноября 2017 13:58 · Поправил: Bronco
· Личное сообщение · #5

Psalmopoeus Pulcher пишет:
но в user32.dll GetProcessWindowStation и GetUserObjectInformation

user32.dll в памяти процесса нет, её подгружают позже для мсг. обёртка для вызова ядерных в win32u.dll.
родительский процесс отладчик, это скрыто, но для системы окно то уже есть. на этом видно и палят. плюс дескриптор дебаг_объект в переменной после сискола NtQueryInformationProcess , плюс как то палят сцилкины хуки. если хука нет, то и на сискол не идут.
Psalmopoeus Pulcher пишет:
в реактОС нашлись совпадения по ядерным именам

ок. брал --> отсюда <--
Code:
  1. HWINSTA FASTCALL
  2. UserGetProcessWindowStation(VOID)
  3. {
  4. PPROCESSINFO ppi = PsGetCurrentProcessWin32Process();
  5. return ppi->hwinsta;
  6. }
  7.  /* 
  8. NtUserGetProcessWindowStation
  9.  Returns a handle to the current process window station. Return Value If the function succeeds, the return value is handle to the window station assigned to the current process. If the function fails, the return value is NULL.
  10.  */
  11.  HWINSTA APIENTRY
  12. NtUserGetProcessWindowStation(VOID)
  13. {
  14. return UserGetProcessWindowStation();
  15. }

-----
походу сцилке свой дров нужен, как в фантике или стронге.

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 08 ноября 2017 17:54
· Личное сообщение · #6

зачем сразу дров, там где дров жди беду
захучить и отфильтровать (ИМХО)



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 08 ноября 2017 22:00
· Личное сообщение · #7

ScyllaHide_2017-11-08_19-45
ScyllaHide_2017-11-08_19-51


Code:
  1. -Add test for NtQuerySystemInformation, NtQueryInformationProcess and NtQueryObject in which the buffer and the return length pointers overlap. This currently detects all three ScyllaHide hooks because they overwrite the return length (#47)
  2.  
  3. -NtQueryInformationProcess and NtQueryObject hooks: check if the ProcessInformationClass or ObjectInformationClass is relevant prior to doing anything, similar to how the NtQuerySystemInformation hook already works
  4. This is in preparation for the next commit which will be quite gruesome
  5.  
  6. -NtQueryInformationProcess/NtQuerySystemInformation/NtQueryObject hooks: if a return length is present and overlaps (is part of) the output buffer, store a backup of the return length prior to hooking, then restore the original return length afterwards. Fixes #47 and makes NtQuery_OverlappingReturnLength test succeed with hooks enabled


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


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

Создано: 09 ноября 2017 00:05
· Личное сообщение · #8

sendersu пишет:
захучить и отфильтровать (ИМХО)

чтобы перехватить syscall из мяса аппа, придётся хучить отладочное ядро дебагера, а для него апи в сдк нет..

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




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

Создано: 09 ноября 2017 07:03 · Поправил: Psalmopoeus Pulcher
· Личное сообщение · #9

Соглашусь с Bronco - в общем случае необходим перехват syscall'а, т.к. используется "прямой" вызов ядерных функций. А на WOW64 еще и переключение режима на х64 через call far 33:XXXXXXXX, что совсем не добавляет удобств в х32 дебугере. Я сам то давно в ядро не лазил и могу ошибаться, но вроде раньше с перехватом сискола были какие то трудности. Кто знает?

В общем, гугл по запросу wow64 syscall hook предлагает прописать хук в fs:[0xC0]. Я не долго думая впихал туда 0 перед сменой режима и таки словил эксепшн. Дальше разбираться пока некогда, но, думаю, дело перспективное.




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

Создано: 09 ноября 2017 12:47
· Личное сообщение · #10

На WOW64 похукать можно через x64 переходник, в том числе и в юзермоде. Если натив х64 или натив х86 и вызов идёт напрямую, только драйвер. Который надо будет в х64 подписывать+он не понравится патчгарду.
Что касается 2 юзерских функций, их более стандартные варианты GetProcessWindowStation и GetUserObjectInformation вполне экспортируются и документированы. Другой вопрос, я не думаю, что по ним можно отследить отладчик, скорее всего где-то ошибся.




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

Создано: 09 ноября 2017 15:03 · Поправил: Bronco
· Личное сообщение · #11

Хз...я не проверял обход в лоб, пока решаю по другому, тут просто любопытно было, почему сцилка не перекрывает. Выложил то что попалось при трассировке, может что-то и пропустил (там же мясо).
тогда типо встречный вопрос, зачем на тлц, загрузчику вмп нужен дескриптор окна, через обёртку win32u.dll.?

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 09 ноября 2017 15:55
· Личное сообщение · #12

Bronco пишет:
зачем на тлц, загрузчику вмп нужен дескриптор окна, через обёртку win32u.dll.?

ну можно узнать в каком окне работает пользователь и по HWID получить PID запущенной программы,класс окна,название окна,если даже процесс скрыт от глаз, я где-то в своём блоге приводил пример

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





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

Создано: 09 ноября 2017 18:11
· Личное сообщение · #13

Bronco пишет:
нужен дескриптор окна, через обёртку win32u.dll

Если разговор про всё те же GetProcessWindowStation и GetUserObjectInformation, то это не дескриптор окна, это Window Station, оно с окнами связано мало.
Если разговор про другое, то таки да, можно искать окна отладчика.




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

Создано: 09 ноября 2017 19:37 · Поправил: difexacaw
· Личное сообщение · #14

Archer

Вы понимаете задачу и вообще о чём идёт обсуждение ?

Тогда опишите задачу кратко и чётко; и какие проблемы с этими апи; и зачем тут фильтровать ядерные события. У Bronco своеобразный стиль описания, не логичный и что бы понять его ход мыслей нужно перечитать стопицот раз топик и десяток тех, что рядом

-----
vx




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 09 ноября 2017 19:48 · Поправил: shellstorm
· Личное сообщение · #15

difexacaw пишет: Вы понимаете задачу и вообще о чём идёт обсуждение ?

Не арчер, но осилил. Говнопрот детектит отладку в tls, сабж это не фильтрует, если там сисколы совсем все плохо, суть вопроса в том, как этот засранец отлавливает факт отладки, зачем ему дескриптор окна и как жить дальше, пилить дров, не пилить и вообще как это работает, то есть нужен подробный лог вызовов, желательно отфильтрованный от всякого неинтересного шлака, после запилить фильтр для обхода детектов. Как то так.
Я может почесал бы мозг, но нет жертв, нужно несколько анпакми накрытых по максимуму и с умом, а в идеале сам говнопрот, возиться с играми или малваркой нет желания.




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

Создано: 09 ноября 2017 20:01 · Поправил: difexacaw
· Личное сообщение · #16

shellstorm

Ну а почему тогда не описали суть, сделать ясным и понятным понимание, а обсуждать какие то мутные и не понятные вещи..

Тоесть происходит обычный юзер детект, фильтр не правильно работает. То что он не учёл какой то сервисный вызов - недостаток, ошибка, её пофиксят. Огромное число методов есть, можно снять полную активность фильтра, в данном случае это мотор реализующий антидебаг. Не зависимо от мода, при этом накопить все адреса к которым он обращается. Элементарная выборка данных, например через монитор рабочего набора, это уже вроде обсуждалось.

Какие проблемы с сервисами, базовый набор есть в врк.

Для чего нужно было(начали обсуждать) ядреные фильтры ?

Есть множество методов и реализаций, которые отлично проработаны и решают задачу.

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

-----
vx




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 09 ноября 2017 20:12
· Личное сообщение · #17

difexacaw пишет: Ну а почему тогда не описали суть, сделать ясным и понятным понимание, а обсуждать какие то мутные и не понятные вещи..

Наверное потому что выше нет уверенности в том, как именно все детектится, поэтому и нужен очищенный лог вызовов, дабы выделить проблему, а после уже думать, как ее решить, вот как раз годный тест для визора, снять лог и отфильтровать от мусора. Вот это собственно и обсуждается, сталкивался ли кто то с подобной проблемой. У меня нет файлов которые можно изучать, а ковыряться в многомегабайтном софте нет особого желания.




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

Создано: 09 ноября 2017 20:31 · Поправил: difexacaw
· Личное сообщение · #18

shellstorm

Не вижу никаких не знакомых сервисов и есчо каких то вещей. Пусть сформулируют свой вопрос нормально. Упомянули какие то апи не ясно зачем, куда и зачем смотреть на их имплементацию, если нет задачи ?)

А ядерную фильтрацию - забудьте про это, не тот уровень задачи, что бы лезть в ядро и небыло бы решения в юм.

Короче учиться формулировать свои мысли.

-----
vx




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 09 ноября 2017 20:38
· Личное сообщение · #19

difexacaw пишет:
какие то мутные и не понятные вещи...мотор... есть множество методов и реализаций, которые отлично проработаны и решают задачу!

Обычный четверг, обычный пост Инди строго по шаблону...
Помог бы "знающим" товарищам, кинул бы парочку конкретных из этих "множества методов", а лучше сразу "реализаций". И себе лойсов заработаешь и людям приятно, по быстрому заштопаем Scyll-ку и пойдем по домам ;)
Если тут все начнут одними туманными неопределенностями изъяснятся, будет вообще край, итак хрустальные шары далеко не уберешь, еще и ваши "сущности в виде гномика" там высматривать xD

Про трассы и в часности сисколы мы тут буквально недавно же общались (не помню где, помню что оффтопом), там и упоминания инструментов есть, емнип вмпрот особо не сопротивлялся (без доп оберток вокруг себя), все системные вызовы писались.



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

Создано: 09 ноября 2017 20:45
· Личное сообщение · #20

shellstorm, на прошлой странице Jaa привел пример.
Конкретно, детекты не покрываемые сциллой:

Code:
  1. 00C01157  SYSENTER ;для х32


Code:
  1. 00D5891F CALL FAR 0033:00D2B073 ;смена режима для WOW64


х64 код тоже под вм, его я не смотрел, но по всем признакам - дальше syscall. Про GetProcessWindowStation и GetUserObjectInformation пока забудьте, как они используются, похоже, никто еще видел из-за невозможности это нормально отладить.

difexacaw пишет:
Не вижу никаких не знакомых сервисов и есчо каких то вещей.

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




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

Создано: 09 ноября 2017 20:45
· Личное сообщение · #21

VOLKOFF

Я ведь уточнил суть вопроса, для того, чтобы на него ответить. Вы же мне обьясняете про туманность", я это понимаю и сказал выше.

Так просто между делом - вы никак меня не переубедите; человек должен иметь мотивацию и проходить путь решения от меньшего знания к большему и не нужно трогать большие методы/знания не понимая меньших.

Добавлено спустя 11 минут
Psalmopoeus Pulcher

Давайте углубимся в тех детали.

Вы приводите два сервисных шлюза для разных юм архитектур, без указания сервисного номера. Какой в этом смысл, ну есть шлюз и что дальше ?

GetProcessWindowStation() обычный сервис гуя, не понимаю о чём вы говорите.

-----
vx




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 09 ноября 2017 20:56
· Личное сообщение · #22

Psalmopoeus Pulcher пишет:
Конкретно, детекты не покрываемые сциллой

так и дровины не помогают, в частности стронг, всё равно детект \



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 09 ноября 2017 20:58
· Личное сообщение · #23

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

зачем нам лишние печальки?

SReg пишет:
в частности стронг

он же не охватывает все новые фичи, может в связке смогет?




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

Создано: 09 ноября 2017 21:08 · Поправил: difexacaw
· Личное сообщение · #24

VOLKOFF

Я мог бы привести пример, но данный форумный двиг не может показать мой лог по аттачам. Это уже обсуждалось, критерий поиска я не могу составить. Это недостаток скрипта, давно нужно было обновить. Так что ищите сами, проще наверное гуглом будет.

-----
vx




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 09 ноября 2017 21:22 · Поправил: shellstorm
· Личное сообщение · #25

Psalmopoeus Pulcher пишет: х64 код тоже под вм, его я не смотрел, но по всем признакам - дальше syscall

Без файла и особых раздумий самый простой вариант это собрать вызовы сисколов в dbi (pin,dmr, практически готовый тул есть в сеплах), запилить небольшой плагин в который собственно загружать этот лог в отладчик и обрабатывать вызовы, вариант конечно дубовый, но для использования "от случая к случаю" вполне рабочий.



Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 09 ноября 2017 21:53 · Поправил: VOLKOFF
· Личное сообщение · #26

Вот кстати --> про dbi <--

Трейсеры от Dr. Memory готовые бинари кстати под обе архитектуры. Я в "простых случаях" их все время юзаю слету так - в папке bin лежит батник (если сами положите ):
Code:
  1. @cd /"%~dp1"
  2. @"%~dp0drstrace.exe" -- "%~1"

Дропаешь на него ехе и... собственно все
Лог сохраняется рядом с файлом.

Для Code Coverage соответственно:
Code:
  1. cd /"%~dp1"
  2. @"%~dp0drrun.exe" -t drcov -- "%~1"

сырой файл кормим иде, или конвертим в читаемый вид для разбора ручками.




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

Создано: 10 ноября 2017 03:13 · Поправил: Bronco
· Личное сообщение · #27

shellstorm пишет:
потому что выше нет уверенности в том, как именно все детектится

+1.
погружение в контекст вм дерьмопрота, оставлю великим. пока довольствуюсь малым - передачей управления.
Последовательность вызовов, аргументы для них, и что возвращают, выложил. текста не много, хз где товариЩь, алогизмы увидел. Хуки на месте, воркают корректно, но пока сцилка в ауте.
Psalmopoeus Pulcher пишет:
Про GetProcessWindowStation и GetUserObjectInformation пока забудьте

согласен, тут я поспешил, указатель на строку "бла-бла" в стеке и декриптовка текста для мсг, идёт после сискола NtQueryInformationProcess( вызов из кода вм)

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 10 ноября 2017 05:34
· Личное сообщение · #28

--> ScyllaHide_2017-11-09_21-00 <--

Code:
  1. HookHelper fixes/cleanup:
  2. - Remove _wcslen, _strlen and _wcscat which are already provided as compiler intrinsics and as ntdll exports
  3. - wcsistr (1): fix off-by-one error by changing < to <=, and remove 'if (l1 == l2)' check because the for loop already does the same thing
  4. - wcsistr (2): fix bug introduced by me causing wcsistr(L"asdf", L"asd") to return false. Now we're back to using _wcsicmp and _wcsnicmp together
  5. - Misc dead code removal/variable naming
  6.  
  7. IsProcessBad(): we already have a length counted string. No need to throw away the length, allocate 800 bytes, zero them, copy the string, then do an equality comparison which requires length counting anyway. Instead just call RtlEqualUnicodeString
  8.  
  9. IsWindowClassBad and IsWindowNameBad still require 'wcsistr'. Added TODO note to wcsistr to rename it and make it take a PUNICODE_STRING in order to increase sanity levels
  10. ScyllaTest: call FreeConsole before exiting
  11.  
  12. Add IDA 7.0 process names. You're welcome Hex-Rays SA




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

Создано: 13 ноября 2017 21:11 · Поправил: just_simple
· Личное сообщение · #29

shellstorm пишет:
суть вопроса в том, как этот засранец отлавливает факт отладки

Выбирать особо не из чего, ZwQueryInformationProcess(ProcessDebugObjectHandle/ProcessDebugPort) + ZwClose + флаги в пебе




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

Создано: 13 ноября 2017 21:52 · Поправил: Bronco
· Личное сообщение · #30

just_simple пишет:
Выбирать особо не из чего

хз хз...указатель в стеке, на переменную строки мсгбокс (сама стр, ещё отсутствует), появляется после вызова GetModuleHandleA. Функу, юзают 2 раза, с указателями на стр библ kernel32.dll и ntdll.dll. После каждого вызова GetModuleHandleA, стандартная проверка хидера (этот участок слегка обфусцирован), и....дальше после этой проверки, нудно_цикличное сравнение адресов стека, с переходом на мясцо по примитивам.
С диска библы не грузит, значит checksum не проверяют, но правку прологов в библах, на предмет хуков, скорее всего палят
отдельно ProcessDebugPort не проверяют, для этого юзают CheckRemoteDebuggerPresent.(стоит хук сцилки)
ProcessDebugObjectHandle проверяют при вызове NtQueryInformationProcess напрямую, ретурн тут поправить ручками можно, но эффекта от этого нет.
Остаётся только снять все хуки, и шагать в "ручном режиме".

-----
Чтобы юзер в нэте не делал,его всё равно жалко..




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 14 ноября 2017 02:28
· Личное сообщение · #31

ScyllaHide_2017-11-11_23-29
Code:
  1. Change wcsistr to RtlUnicodeStringContains and make IsWindow[Class]NameBad use this to save pointless string copying
  2. GetExplorerProcessId() really only has to exist in one place
  3. The code was dead


ScyllaHide_2017-11-12_03-05

Code:
  1. NtQuerySystemInformation(SystemHandleInformation/SystemExtendedHandleInformation): more return length bookkeeping
  2. NtQueryObject hook: only set the total object and handle counts to 0 for ObjectTypesInformation, decrement by 1 for ObjectTypeInformation
  3.  
  4. This prevents the debuggee from doing
  5. NtCreateDebugObject(&h);
  6. NtQueryObject(h, ObjectTypeInformation);
  7. if (TotalNumberOfObjects == 0) { /* something is wrong since we just made a debug object */ }
  8.  
  9. Found by Al-Khaser (https://github.com/LordNoteworthy/al-khaser)



<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . >>
 eXeL@B —› Софт, инструменты —› ScyllaHide
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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