Антиотладка Vmprotect

instw0

Новичок
Сообщения
29
Реакции
1
Всем привет! Попробовал потрассировать последний vmprotect в x64dbg с модулем TitanHide... Отладчик уходит в какой то бесконечный цикл, есть какие то технологии или инструменты этот победить?

Антиотладка Vmprotect - Оффтоп
 

Indy

Ветеран
Сообщения
117
Реакции
69
Я наверно что то не понимаю. ТС юзает гипер:

использую тупо гипервизор и хуки на rtdsc и cpuid
Зачем тогда нужен юзер отладчик. В общем уровень тс не тот что бы такое делать. Как реализовать обработку событий, это сервисная и по процу. Если человек не смог простое решить, то о какой сборке в hv может идти речь. Походу загоняет какую то дичь, врёт.
Я использую транслятор локальный, не hv. При этом нужно находу всё писать собирать билдить, отлаживать; это всё сложно, вот например что бы не ждать пять минут пока идёт трансляция и вмп что то там крутит можно скипнуть данный участок. Но не получается, нужно отлаживать.
Так вот я понять не могу уровень, то тс не может с отладчиком разобраться, то гипер уже использует. Не зная при этом никакого яп.
 

instw0

Новичок
Сообщения
29
Реакции
1
Я наверно что то не понимаю. ТС юзает гипер:



Зачем тогда нужен юзер отладчик. В общем уровень тс не тот что бы такое делать. Как реализовать обработку событий, это сервисная и по процу. Если человек не смог простое решить, то о какой сборке в hv может идти речь. Походу загоняет какую то дичь, врёт.
Я использую транслятор локальный, не hv. При этом нужно находу всё писать собирать билдить, отлаживать; это всё сложно, вот например что бы не ждать пять минут пока идёт трансляция и вмп что то там крутит можно скипнуть данный участок. Но не получается, нужно отлаживать.
Так вот я понять не могу уровень, то тс не может с отладчиком разобраться, то гипер уже использует. Не зная при этом никакого яп.
Я попытался запустить эту программку под гипервизором и столкнулся с "детектом". Почитав инфы по теме, зафиксировал основные ассемблерные инструкции, используемые при "детекте" подобных защитных механизмов и подумал, что использование гипервизора с его возможностью перехвата из ядра будет более практичным и оперативным вариантов понять общие принципы работы защиты этого ехе, естественно до момента "детекта", тем более, что в ollydbg он не запускается без колдовства, а x64dbg слишком медленный в трассировке, кроме того у меня нет не для того и другого заготовленных скриптов.
В общем... спасибо, ребят, всем отозвавшимся. Прочитал сообщение о себе выше... очень жаль, что в России и странах бывшего СНГ общение ""комьюнити" в городе, транспорте, за рулем на дороге, в играх и даже среди хороших специалистов строится на "понтах" и попытках унизить другого....
 

instw0

Новичок
Сообщения
29
Реакции
1
не будем разводить здесь ссоры, каждый сталкивался, каждый вывод для себя сделает
 

mak

Соломенные сандалии
Администратор
Сообщения
861
Реакции
654
Так вот я понять не могу уровень, то тс не может с отладчиком разобраться, то гипер уже использует. Не зная при этом никакого яп.
Он использует не свою сборку HV, а только плагин для скрытия - https://github.com/Air14/HyperHide, там нет таких возможностей.

Я попытался запустить эту программку под гипервизором и столкнулся с "детектом". Почитав инфы по теме, зафиксировал основные ассемблерные инструкции, используемые при "детекте" подобных защитных механизмов и подумал, что использование гипервизора с его возможностью перехвата из ядра будет более практичным и оперативным вариантов понять общие принципы работы защиты этого ехе, естественно до момента "детекта", тем более, что в ollydbg он не запускается без колдовства, а x64dbg слишком медленный в трассировке, кроме того у меня нет не для того и другого заготовленных скриптов.
В общем... спасибо, ребят, всем отозвавшимся. Прочитал сообщение о себе выше... очень жаль, что в России и странах бывшего СНГ общение ""комьюнити" в городе, транспорте, за рулем на дороге, в играх и даже среди хороших специалистов строится на "понтах" и попытках унизить другого....
Если не переходить на личности и отбросить эмоции, то критика обоснована, т.к. возможно стоит для изучения защиты взять пример более простой, без того же Анти-ВМ и изучать. Indy показал лог исполнения программы, на котором видно, какие методы антиотладки использовались, мне встречались только 4 типа антивм в вмп, какой родной, какой нет, не могу сказать, но в этих случаях без DBI трассировщика, без перехвата CPUID, узнать это место можно только через декомпиляцию самих хендлеров (раньше можно было найти банальным поиском по сигнатуре, как сейчас не знаю), т.к. только в этом случае вы сможете найти например место с сигнатурой - 0×564D5868 ("VMXh"), как уже написано выше, два классических метода исходя из лога не были найдены в этом ехе, в трассировочном фильтре от Indy нет события по исключению на CPUID. Хотя верю наслово, т.к. актуального лога до мессаги с детектом HV в обоход антиотладки с вашим примером выше нет. Альтернативно можно снять трассу исполнения на этом участке. Indy бы мог это сделать своим фильтром в DBI через трансляцию трассы, но для этого нужно подготовить инструментацию-условие для DBI, эта задача уже сводится к активному реверсу ехе, что вероятно выходит за его порог времени. Поэтому и было сказано, что не ясно какие инструменты использует автор топика, каковы были шаги к этому, опираясь на то, что вам нужно сделать такой фильтр самостоятельно, приводит к такому .. я бы сказал, нейтральному мнению. Для работы с ВМ защитами это базовые потребности, т.е. решения в одну кнопку нет.

По детекту вирты - если предположить что для cpuid тайминг есть функция аргумента, то должна быть разница на хосте. Я потестил, получается на вирте тайминг фактически константа
ИМХО все детекты по таймингу слишком нестабильны, замерять такое в премиум протекторе было бы излишним ..

OrigPC:
0x0000000C : 0x00586658
0x0000000D : 0x0051E67E
0x0000000E : 0x0053CB8F
0x0000000F : 0x0051EF33
0x00000010 : 0x005092C4
0x00000011 : 0x0050F70E
0x00000012 : 0x00520B5D
0x00000013 : 0x005229A8
0x00000014 : 0x0053F99B
0x00000015 : 0x0050876E
0x00000016 : 0x00547C36
0x00000017 : 0x0052561E
0x00000018 : 0x005735A9
0x00000019 : 0x004F3575
0x0000001A : 0x004EC88F
0x0000001B : 0x004D2DEC
0x0000001C : 0x004CCB91
0x0000001D : 0x004DB0D8
0x0000001E : 0x004D0F27
0x0000001F : 0x004DDE51
0x80000000 : 0x00596B44
0x80000001 : 0x00567965
0x80000002 : 0x000CB8E0
0x80000003 : 0x000E187E
0x80000004 : 0x000FA8BE
0x80000005 : 0x004F1ACC
0x80000006 : 0x004500F4
0x80000007 : 0x00485BAA
0x80000008 : 0x004CCFCB
0x80000009 : 0x003F4979
0x8000000A : 0x0044FB43
0x8000000B : 0x004633D8
0x8000000C : 0x004833EE
0x8000000D : 0x00453356
0x8000000E : 0x00486E4F
0x8000000F : 0x004594B2
0x40000000 : 0x004F9D1F
0x40000001 : 0x004EAB5E
0x40000002 : 0x004D6F59
0x40000003 : 0x003A83C9
0x40000004 : 0x00465370
0x40000005 : 0x0044CF76
0x40000006 : 0x00362E66
0x40000007 : 0x004A84A1
VMWare:
0x00000000 : 0x0014CBDA
0x00000001 : 0x00140D13
0x00000002 : 0x001408A2
0x00000003 : 0x00147CB3
0x00000004 : 0x0014635D
0x00000005 : 0x0013D580
0x00000006 : 0x000DCAAA
0x00000007 : 0x00141763
0x00000008 : 0x0013CB0F
0x00000009 : 0x0012A3BD
0x0000000A : 0x00147F37
0x0000000B : 0x00134A6F
0x0000000C : 0x00143DC1
0x0000000D : 0x0012B122
0x0000000E : 0x0014CB9E
0x0000000F : 0x0012BCAE
0x00000010 : 0x00127D24
0x00000011 : 0x0012BF8F
0x00000012 : 0x00144007
0x00000013 : 0x0013079D
0x00000014 : 0x00130E84
0x00000015 : 0x00151E68
0x00000016 : 0x0013E2B8
0x00000017 : 0x000F6FD0
0x00000018 : 0x0012764F
0x00000019 : 0x0013F227
0x0000001A : 0x00137590
0x0000001B : 0x0013245D
0x0000001C : 0x0013770A
0x0000001D : 0x000DF2B1
0x0000001E : 0x0012D36D
0x0000001F : 0x00147640
0x80000000 : 0x00151723
0x80000001 : 0x0015097A
0x80000002 : 0x00099FE7
0x80000003 : 0x000A2742
0x80000004 : 0x000A10ED
0x80000005 : 0x0013C2AA
0x80000006 : 0x00128265
0x80000007 : 0x001203F3
0x80000008 : 0x000FBAE6
0x80000009 : 0x001168F0
0x8000000A : 0x000FF1D8
0x8000000B : 0x001131BA
0x8000000C : 0x000F062C
0x8000000D : 0x00114F85
0x8000000E : 0x000D31C9
0x8000000F : 0x000D410B
0x40000000 : 0x000DA1B3
0x40000001 : 0x00119DE4
0x40000002 : 0x0012ADF9
0x40000003 : 0x001262C6
0x40000004 : 0x00127B0D
0x40000005 : 0x0012C75F
0x40000006 : 0x0013B24D
0x40000007 : 0x001392CE
Вот тут есть сорсы и набор методов по детекту VMWare - https://www.trapkit.de/tools/scoopyng/, софт и сорсы - https://www.trapkit.de/tools/scoopyng/ScoopyNG.zip можно посмотреть, какой метод подходит для стилс детекта.

ScoopyNG displays the following output if run on a virtualized system* with anti-detection VM configuration.
Log:
####################################################
::       ScoopyNG - The VMware Detection Tool     ::
::              Windows version v1.0              ::

[+] Test 1: IDT
IDT base: 0x82322400
Result  : Native OS


[+] Test 2: LDT
LDT base: 0xdead0000
Result  : Native OS


[+] Test 3: GDT
GDT base: 0x82322000
Result  : Native OS


[+] Test 4: STR
STR base: 0x28000000
Result  : Native OS


[+] Test 5: VMware "get version" command
Result  : Native OS


[+] Test 6: VMware "get memory size" command
Result  : VMware detected


[+] Test 7: VMware emulation mode
Result  : VMware detected (emulation mode detected)

::                   tk,  2008                    ::
::               [ www.trapkit.de ]               ::
####################################################
Метод с эталонным циклом реально интересный, ниже можно один из доков по этой теме глянуть.
 

Прикрепленные файлы:

instw0

Новичок
Сообщения
29
Реакции
1
Он использует не свою сборку HV, а только плагин для скрытия - https://github.com/Air14/HyperHide, там нет таких возможностей.


Если не переходить на личности и отбросить эмоции, то критика обоснована, т.к. возможно стоит для изучения защиты взять пример более простой, без того же Анти-ВМ и изучать. Indy показал лог исполнения программы, на котором видно, какие методы антиотладки использовались, мне встречались только 4 типа антивм в вмп, какой родной, какой нет, не могу сказать, но в этих случаях без DBI трассировщика, без перехвата CPUID, узнать это место можно только через декомпиляцию самих хендлеров (раньше можно было найти банальным поиском по сигнатуре, как сейчас не знаю), т.к. только в этом случае вы сможете найти например место с сигнатурой - 0×564D5868 ("VMXh"), как уже написано выше, два классических метода исходя из лога не были найдены в этом ехе, в трассировочном фильтре от Indy нет события по исключению на CPUID. Хотя верю наслово, т.к. актуального лога до мессаги с детектом HV в обоход антиотладки с вашим примером выше нет. Альтернативно можно снять трассу исполнения на этом участке. Indy бы мог это сделать своим фильтром в DBI через трансляцию трассы, но для этого нужно подготовить инструментацию-условие для DBI, эта задача уже сводится к активному реверсу ехе, что вероятно выходит за его порог времени. Поэтому и было сказано, что не ясно какие инструменты использует автор топика, каковы были шаги к этому, опираясь на то, что вам нужно сделать такой фильтр самостоятельно, приводит к такому .. я бы сказал, нейтральному мнению. Для работы с ВМ защитами это базовые потребности, т.е. решения в одну кнопку нет.


ИМХО все детекты по таймингу слишком нестабильны, замерять такое в премиум протекторе было бы излишним ..

OrigPC:
0x0000000C : 0x00586658
0x0000000D : 0x0051E67E
0x0000000E : 0x0053CB8F
0x0000000F : 0x0051EF33
0x00000010 : 0x005092C4
0x00000011 : 0x0050F70E
0x00000012 : 0x00520B5D
0x00000013 : 0x005229A8
0x00000014 : 0x0053F99B
0x00000015 : 0x0050876E
0x00000016 : 0x00547C36
0x00000017 : 0x0052561E
0x00000018 : 0x005735A9
0x00000019 : 0x004F3575
0x0000001A : 0x004EC88F
0x0000001B : 0x004D2DEC
0x0000001C : 0x004CCB91
0x0000001D : 0x004DB0D8
0x0000001E : 0x004D0F27
0x0000001F : 0x004DDE51
0x80000000 : 0x00596B44
0x80000001 : 0x00567965
0x80000002 : 0x000CB8E0
0x80000003 : 0x000E187E
0x80000004 : 0x000FA8BE
0x80000005 : 0x004F1ACC
0x80000006 : 0x004500F4
0x80000007 : 0x00485BAA
0x80000008 : 0x004CCFCB
0x80000009 : 0x003F4979
0x8000000A : 0x0044FB43
0x8000000B : 0x004633D8
0x8000000C : 0x004833EE
0x8000000D : 0x00453356
0x8000000E : 0x00486E4F
0x8000000F : 0x004594B2
0x40000000 : 0x004F9D1F
0x40000001 : 0x004EAB5E
0x40000002 : 0x004D6F59
0x40000003 : 0x003A83C9
0x40000004 : 0x00465370
0x40000005 : 0x0044CF76
0x40000006 : 0x00362E66
0x40000007 : 0x004A84A1
VMWare:
0x00000000 : 0x0014CBDA
0x00000001 : 0x00140D13
0x00000002 : 0x001408A2
0x00000003 : 0x00147CB3
0x00000004 : 0x0014635D
0x00000005 : 0x0013D580
0x00000006 : 0x000DCAAA
0x00000007 : 0x00141763
0x00000008 : 0x0013CB0F
0x00000009 : 0x0012A3BD
0x0000000A : 0x00147F37
0x0000000B : 0x00134A6F
0x0000000C : 0x00143DC1
0x0000000D : 0x0012B122
0x0000000E : 0x0014CB9E
0x0000000F : 0x0012BCAE
0x00000010 : 0x00127D24
0x00000011 : 0x0012BF8F
0x00000012 : 0x00144007
0x00000013 : 0x0013079D
0x00000014 : 0x00130E84
0x00000015 : 0x00151E68
0x00000016 : 0x0013E2B8
0x00000017 : 0x000F6FD0
0x00000018 : 0x0012764F
0x00000019 : 0x0013F227
0x0000001A : 0x00137590
0x0000001B : 0x0013245D
0x0000001C : 0x0013770A
0x0000001D : 0x000DF2B1
0x0000001E : 0x0012D36D
0x0000001F : 0x00147640
0x80000000 : 0x00151723
0x80000001 : 0x0015097A
0x80000002 : 0x00099FE7
0x80000003 : 0x000A2742
0x80000004 : 0x000A10ED
0x80000005 : 0x0013C2AA
0x80000006 : 0x00128265
0x80000007 : 0x001203F3
0x80000008 : 0x000FBAE6
0x80000009 : 0x001168F0
0x8000000A : 0x000FF1D8
0x8000000B : 0x001131BA
0x8000000C : 0x000F062C
0x8000000D : 0x00114F85
0x8000000E : 0x000D31C9
0x8000000F : 0x000D410B
0x40000000 : 0x000DA1B3
0x40000001 : 0x00119DE4
0x40000002 : 0x0012ADF9
0x40000003 : 0x001262C6
0x40000004 : 0x00127B0D
0x40000005 : 0x0012C75F
0x40000006 : 0x0013B24D
0x40000007 : 0x001392CE
Вот тут есть сорсы и набор методов по детекту VMWare - https://www.trapkit.de/tools/scoopyng/, софт и сорсы - https://www.trapkit.de/tools/scoopyng/ScoopyNG.zip можно посмотреть, какой метод подходит для стилс детекта.

ScoopyNG displays the following output if run on a virtualized system* with anti-detection VM configuration.
Log:
####################################################
::       ScoopyNG - The VMware Detection Tool     ::
::              Windows version v1.0              ::

[+] Test 1: IDT
IDT base: 0x82322400
Result  : Native OS


[+] Test 2: LDT
LDT base: 0xdead0000
Result  : Native OS


[+] Test 3: GDT
GDT base: 0x82322000
Result  : Native OS


[+] Test 4: STR
STR base: 0x28000000
Result  : Native OS


[+] Test 5: VMware "get version" command
Result  : Native OS


[+] Test 6: VMware "get memory size" command
Result  : VMware detected


[+] Test 7: VMware emulation mode
Result  : VMware detected (emulation mode detected)

::                   tk,  2008                    ::
::               [ www.trapkit.de ]               ::
####################################################
Метод с с эталонным циклом реально интересный, ниже можно один из доков по этой теме глянуть.
Я использую другой гипервизор https://github.com/HyperDbg/HyperDbg . Этот гипервизор он и видит, его обнаружение мне и нужно было обойти
 

mak

Соломенные сандалии
Администратор
Сообщения
861
Реакции
654
@instw0, и всё это нужно вытягивать :p, этот дебагер не имеет плагинов, можно ли там оформить трасировку не знаю, не смотрел, но уместно было бы ещё спросить об этом здесь - https://github.com/HyperDbg/HyperDbg/issues
 

instw0

Новичок
Сообщения
29
Реакции
1
@instw0, и всё это нужно вытягивать :p, этот дебагер не имеет плагинов, можно ли там оформить трасировку не знаю, не смотрел, но уместно было бы ещё спросить об этом здесь - https://github.com/HyperDbg/HyperDbg/issues
Я давно общаюсь с его создателем))) и его проект, впринципе, является своего рода "копией" windbg ... я публиковал тему, вдруг кто знает какие "секретные" алгоритмы обнаружения hypervisor`a.
Сообщение объединено:

еще вопросик, есть ли ollydbg для х64, а то с трассировщиком x64dbg далеко не "уедешь"...
 

mak

Соломенные сандалии
Администратор
Сообщения
861
Реакции
654
Нет таких "секретных" техник, либо это баги, либо периферия, либо особенность CPU, либо тайминг. Вариантов может быть множество, угадывать каждый сомнительное дело. Все базовые есть в паблике и собраны вместе в утилиты. Остальные кастомные нужно смотреть индивидуально ..

еще вопросик, есть ли ollydbg для х64, а то с трассировщиком x64dbg далеко не "уедешь"...
https://www.ollydbg.de/
 

instw0

Новичок
Сообщения
29
Реакции
1
Нет таких "секретных" техник, либо это баги, либо периферия, либо особенность CPU, либо тайминг. Вариантов может быть множество, угадывать каждый сомнительное дело. Все базовые есть в паблике и собраны вместе в утилиты. Остальные кастомные нужно смотреть индивидуально ..


https://www.ollydbg.de/
я оттуда и с вопросом, там пара версии старая 1.01 и 2.01 новее, но 64 битную я найти не смог
 

Indy

Ветеран
Сообщения
117
Реакции
69
Разобрался как отладчик палится. Никакие плагины работать не будут и вот почему:

scall.png

- даже если хукнуть адрес возврата(KiRet), то будет утерян сервисный номер, хотя наверно можно посмотреть его источник нп стек. Под wow можно хукнуть шлюз(wow64cpu). У меня палился из за неправильной обработки ProcessDebugObjectHandle, не возвращался размер инфы :)

mak

0x00000005 : 0x0013D580
0x00000006 : 0x000DCAAA
- наверно зафиксили или напрямую выполняется cpuid при трансляции.
 

lindermann

Зарегистрированный
Сообщения
3
Реакции
1
sysenter не будет вызываться если номер билда OS для VMP окажется загадкой. Эту тему уже закрыли в scyllahide много билдов назад опцией скрытия номера билда внутри секции ресурсов ntdll + osbuild внутри PEB
В таком случае вызовется апи а ее сцилла уже обработает.
Что еще может быть, если IsWow64Process апи вернет истину то вызовется 64 битный код проверки на отладку, который x32dbg не сможет обработать.
Про firmware таблицу уже писали, ее проверяет на строки virtualbox, vmware, parallels
Если получится то будет открыто устройство \physicalmemory и там снова будут искаться строки
 

lindermann

Зарегистрированный
Сообщения
3
Реакции
1
а по вашему вмп стоит на месте?
скажу лишь что в своих семплах я уже как года полтора не видел ни единого сискола, если правильно вернуть при проверке билда ОС нужные значения
 
  • Понравилось
Реакции: mak

Indy

Ветеран
Сообщения
117
Реакции
69
lindermann

если IsWow64Process апи вернет истину то вызовется 64 битный код проверки на отладку
Такое наверно. Я посмотрел в режиме совместимости откуда переключения происходят. Походу эта поделка очень хитро сделана. После переключения в 64 отладчик 32 становится бесполезным, тут только если виндебаг сгодится.. Я попробовал через такие переключения словить сервисы(из 64 назад в 32-фильтр), но отладка всё равно палится :)

Gates.png

Что интересно перезагрузка ss при возврате, если это не делать будет анстаб, это обсуждали как то. Какая версия этого билда ?
 

Прикрепленные файлы:

Последнее редактирование:

Bronco

Мудрец
Сообщения
76
Реакции
338
скажу лишь что в своих семплах я уже как года полтора не видел ни единого сискола, если правильно вернуть при проверке билда ОС нужные значения
для старта загрузчика вмп, и запуска приложения это прокатит = свежий билд вин10+х64дбг+сцилка, но тут насколько я понимаю нужно снять трассу с какого участка. И в этом случае идёт детект отладки
 

_MBK_

Новичок
Сообщения
264
Реакции
65
но тут насколько я понимаю нужно снять трассу с какого участка
Топикстартер специально усложнил задачу - вместо того, чтобы лететь из Москвы во Владивосток на самолете, бредет пешком через тайгу, да еще и мешок с вешками тащит, помечая опасные места.
 

instw0

Новичок
Сообщения
29
Реакции
1
Ребят, вопрос то был как эта хрень детектит гипервизор))
 
Верх Низ