Гайд Защищаем импорты как Gamesense

practice makes perfect
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2019
Сообщения
86
Реакции[?]
67
Поинты[?]
19K
чтобы идентифицировать один вм хендлер тебе не нужен девиртуализатор.
они хоть и обфусцируются всяким говном, но идентифицировать один хендлер от другого все равно возможно при должном желании. ведь для того чтобы положить эту самую dword константу, для начала надо виртуальный стек подвинуть на 4, а затем туда эту самую константу положить.
так вроде в вмп может использоваться не один и тот же хендлер для обработки опкода вмки. как мне найти все хендлера, отвечающие за обработку опкода вмки? Трассировка? Ну давай будем откровенны, это просто смешно, поэтому это не подходит.

виртуальный стек подвинуть на 4, а затем туда эту самую
в новой вмп 3.8 с обфускацией на 100% и кол-вом вмок 10, необязательно оно будет совать константу в виртуальный стек.
там может быть так
Код:
mov eax, dword[ebp]
xor eax, ebx
...
../
...
xor ebx, eax
mov ecx, eax
....
В целом, это все очень зоумбительно. Это надо будет сидеть по 100500 часов и искать этот хендлер и сдвиг стека на 4
 
EFI_COMPROMISED_DATA
лучший в мире
Статус
Оффлайн
Регистрация
26 Янв 2018
Сообщения
921
Реакции[?]
1,637
Поинты[?]
84K
Это надо будет сидеть по 100500 часов и искать этот хендлер и сдвиг стека на 4
можно автоматизировать, но как конкретно я уже не расскажу потому что мне мягко намекнули, что мне пора переставать отвечать в этом треде :prison:
 
Начинающий
Статус
Оффлайн
Регистрация
31 Май 2023
Сообщения
53
Реакции[?]
15
Поинты[?]
14K
можно автоматизировать, но как конкретно я уже не расскажу потому что мне мягко намекнули что мне пора переставать отвечать в этом треде :prison:
решил выебнутся но не получилось
 
practice makes perfect
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2019
Сообщения
86
Реакции[?]
67
Поинты[?]
19K
можно автоматизировать, но как конкретно я уже не расскажу потому что мне мягко намекнули, что мне пора переставать отвечать в этом треде :prison:
Все, что ты предложил делать - очень зоумбительно, но оукей. Понты наше все. Нормальные ребята пишут девирт, а не занимаются подобной штукой.
 
Псевдоадмин
Администратор
Статус
Оффлайн
Регистрация
17 Май 2018
Сообщения
184
Реакции[?]
637
Поинты[?]
78K
Все, что ты предложил делать - очень зоумбительно, но оукей. Понты наше все. Нормальные ребята пишут девирт, а не занимаются подобной штукой.
Мы с Сеней писали и девирт и рекомпили байт-код вмпротекта для конкретной вм. Я писал дебаггер для вмпротекта Аля денуво профайлер, но в данном случае есть варианты в разы быстрее и проще при условии, что у тебя нет готовых инструментов и разрабатывать тулкит времени нет. Но опять же не вижу смысла дискутировать об этом на публике. Как минимум общий уровень безопасности птк будет выше) Радоваться надо

p.s нормальные ребята развиваются в разные и рассматривают все варианты атаки , а не фокусируются на одном подходе
 
practice makes perfect
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2019
Сообщения
86
Реакции[?]
67
Поинты[?]
19K
Мы с Сеней писали и девирт и рекомпили байт-код вмпротекта для конкретной вм. Я писал дебаггер для вмпротекта Аля денуво профайлер, но в данном случае есть варианты в разы быстрее и проще при условии, что у тебя нет готовых инструментов и разрабатывать тулкит времени нет. Но опять же не вижу смысла дискутировать об этом на публике. Как минимум общий уровень безопасности птк будет выше) Радоваться надо

p.s нормальные ребята развиваются в разные и рассматривают все варианты атаки , а не фокусируются на одном подходе
Как по мне все остальные подходы неэффективны. МОЕ МНЕНИЕ.
С тобой согласен, но не с тем, это выглядит, что он позвал старшего брата, т.к понял, что понты поколотил, а ответить за написанное не смог.
 
Участник
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
1,105
Реакции[?]
388
Поинты[?]
45K
Как по мне все остальные подходы неэффективны. МОЕ МНЕНИЕ.
С тобой согласен, но не с тем, это выглядит, что он позвал старшего брата, т.к понял, что понты поколотил, а ответить за написанное не смог.
Он тебе ответил, что ему прилетело за то, что он отвечает в треде и ты этого не понял. Чьи проблемы? Тебе объяснили популярно.
 
practice makes perfect
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2019
Сообщения
86
Реакции[?]
67
Поинты[?]
19K
Он тебе ответил, что ему прилетело за то, что он отвечает в треде и ты этого не понял. Чьи проблемы? Тебе объяснили популярно.
На такую хомячню как ты был и рассчитан его месседж. Ты же в вмках совсем балбес, зачем ты что-то пытаешься тут обсуждать? Он сморозил мягко говорю бред и не смог никак его аргументировать, доказать или опровергнуть и ушел от ответственности, сказав что это все очень секретно. И позвал на помощь друга, который все сказал правильно, но не в тему нашего спора с тем чуваком.

впринципе твой ник многое о тебе говорит, гений.
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
доказать или опровергнуть и ушел от ответственности, сказав что это все очень секретно
Ну просто ты берешь его на понт, что он должен либо потерять репутацию либо слить инфу
Раньше распознавание хэндлеров вмп (до 3.6) было тривиальной задачей, можно было в 100% получать чистый хэндлер и матчить его до инструкции
Сейчас же, вернувшая обфа на стеке, соединенные хэндлеры, опак предикаты, делают этот процесс сложнее
Тем более что это лишь верхушка айсберга, ведь настоящая обфа на уровне байткода
Возможно Сеня имел ввиду что необязательно чистить хэндлер, а попросту посмотреть его сайдэффекты эмуляцией (но не уверена насколько это возможно в случае мультихэндлеров, зависит от того какие правила соединения, возможно в этом случае стоит отойти от конкретных хэндлеров совсем, а просто сразу транслировать сайдэффекты в промкод)
 
practice makes perfect
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2019
Сообщения
86
Реакции[?]
67
Поинты[?]
19K
Ну просто ты берешь его на понт, что он должен либо потерять репутацию либо слить инфу
Раньше распознавание хэндлеров вмп (до 3.6) было тривиальной задачей, можно было в 100% получать чистый хэндлер и матчить его до инструкции
Сейчас же, вернувшая обфа на стеке, соединенные хэндлеры, опак предикаты, делают этот процесс сложнее
Тем более что это лишь верхушка айсберга, ведь настоящая обфа на уровне байткода
Возможно Сеня имел ввиду что необязательно чистить хэндлер, а попросту посмотреть его сайдэффекты эмуляцией (но не уверена насколько это возможно в случае мультихэндлеров, зависит от того какие правила соединения, возможно в этом случае стоит отойти от конкретных хэндлеров совсем, а просто сразу транслировать сайдэффекты в промкод)
Что слить то? Если ты шаришь за деобфускацию, то ты поймешь, что эта инфа буквально ничего не даст. Он просто понтов навалил, а в итоге жидко пукнул на публике
 
✊Rot Front✊
Пользователь
Статус
Оффлайн
Регистрация
2 Июл 2020
Сообщения
131
Реакции[?]
256
Поинты[?]
84K
На такую хомячню как ты был и рассчитан его месседж. Ты же в вмках совсем балбес, зачем ты что-то пытаешься тут обсуждать? Он сморозил мягко говорю бред и не смог никак его аргументировать, доказать или опровергнуть и ушел от ответственности, сказав что это все очень секретно. И позвал на помощь друга, который все сказал правильно, но не в тему нашего спора с тем чуваком.

впринципе твой ник многое о тебе говорит, гений.
Почему мы начинаем идти по сложному пути,говоря о эмуляции кода или гениальном девирте(мне действительно нужно взорвать дверь в деревне,когда можно просто сломать замок у входной двери?).
Опять же,можно просто по простому пути в данном случае, чтобы автоматизировать это чудо.
Это просто теория, которую можно реализовать т.к не вижу проблем в данном случае(поправьте,пожалуйста,если ошибаюсь и спасибо за знания :D).
Вспомним,например,статью
Пожалуйста, авторизуйтесь для просмотра ссылки.
, благодаря чему можно пойти подумать и прийти к решению:
1)Выделяем память(old_fake_base) по определённому адресу(т.к в пофикшенном дампе должен быть STATUS_ACCESS_VIOLATION при вызове)для DLL,если у них есть DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size(допустим,мы не знаем точно весь список используемого импорта,хотя можно отфилтровать,чтобы они точно были системные DLL ).
Потребуется записать эти адреса на листочек(или куда вам нужно?),чтобы использовать в VEH обработчике.
2)Фиксим релоки в выделенной памяти и перенаправляем импорт скопированную DLL на скопированную DLL(KernelBase.dll ->ntdll.dll,например).
3)Проходим в PEB и делаем подмену DllBase на наши скопированные регионы(old_fake_base).
4)Ждём инит этого чуда,потом дампим,после его фикса с сервера(я не буду разбирать нужны ли эти доп. фиксы ).
5)Допустим,у нас всё заводится,кроме этого чуда-импорта(просто в теории т.к это не затрагивает пункт выше и мы не играем в догонялки)
Ставим наш VEH с условием,что у нас STATUS_ACCESS_VIOLATION и RIP является как раз теми адресами,где мы выделяли память для old_fake_base(начала и конец региона).
6)Можно просто менять на RIP= RIP - old_fake_base+ memory_dll(RIP используется в качестве RVA в данном случае). Лучше сделать проход по PIMAGE_EXPORT_DIRECTORY для RIP - old_fake_base(можно вшить массивом old_fake_base или оставить на диске) ,чтобы получить оригинальное имя и если мы получили имя, мы уже получить RVA в memory_dll(не old_fake_base,которая была в памяти при дампе) т.к с большим шансом у других юдей будет различаться DLL -> RVA разные.
Да,каждый вызов импорта - вызов VEH,но лучше кэшировать результат,чтобы не делать заново расчёты и потом можно использовать при долгом ручном фиксе.
P.S извиняюсь, что слишком длинно расписано, но тут больше слов, нежели действий.
 
Участник
Статус
Оффлайн
Регистрация
27 Фев 2019
Сообщения
1,105
Реакции[?]
388
Поинты[?]
45K
На такую хомячню как ты был и рассчитан его месседж. Ты же в вмках совсем балбес, зачем ты что-то пытаешься тут обсуждать? Он сморозил мягко говорю бред и не смог никак его аргументировать, доказать или опровергнуть и ушел от ответственности, сказав что это все очень секретно. И позвал на помощь друга, который все сказал правильно, но не в тему нашего спора с тем чуваком.

впринципе твой ник многое о тебе говорит, гений.
А теперь, когда ты поплакал и успокоился, тебе все объяснили и расписали, надеюсь поймешь, что твои пустые агрессивные слова и оскорбления ничего не значат)) Залупайся, сколько угодно, ты же агрессивный хомячок))
 
Псевдоадмин
Администратор
Статус
Оффлайн
Регистрация
17 Май 2018
Сообщения
184
Реакции[?]
637
Поинты[?]
78K
Что слить то? Если ты шаришь за деобфускацию, то ты поймешь, что эта инфа буквально ничего не даст. Он просто понтов навалил, а в итоге жидко пукнул на публике
Есть разные подходы к анализу кода, в том числе не такие очевидные. Никаких мега секретных техник не используется, но на публику приносить на голубом блюдечке с каемочкой решения желания пока нет. Сеня перестал в тред отвечать конкретикой буквально по моей просьбе лол
 
practice makes perfect
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2019
Сообщения
86
Реакции[?]
67
Поинты[?]
19K
А теперь, когда ты поплакал и успокоился, тебе все объяснили и расписали, надеюсь поймешь, что твои пустые агрессивные слова и оскорбления ничего не значат)) Залупайся, сколько угодно, ты же агрессивный хомячок))
тебя настолько не задели мои слова, что ты тоже употребил слово в моем тексте, хомячок. Ну так если оно реально так, то чего обижаться? Я уверен, что ты ничего от слова совсем не понял, что тут писали. На твои сообщения я не буду больше отвечать, они у тебя оффтоп.

А по поводу всего этого срача, куда влезли не пойму кто и не пойму зачем, я хз. Начали про поиск опкода вмки, закончили не пойми чем. По личному опыту скажу, что любые тулзы, которые что либо делают с вм, не конвертируя вм опкоды в нативные нормальные оптимизированные инструкции, это полный кал. Этот код нереально анализировать. Скупой платит дважды. Поэтому, лучше, как по мне сделать нормальную тулзу(девиртуализатор), чем какую то шляпу из-за того, что она быстрее/легче делается.
Есть разные подходы к анализу кода, в том числе не такие очевидные. Никаких мега секретных техник не используется, но на публику приносить на голубом блюдечке с каемочкой решения желания пока нет. Сеня перестал в тред отвечать конкретикой буквально по моей просьбе лол
хорошо, но ты же понимаешь, что эта инфа вообще никому ничего не даст? даже если ты скинешь паттерн расчета флага и jccшек в вмп 3.8, от этого кряков и девиртуализаторы не появятся. Люди такие как PasterAlmir это лентяи, которые не смогут никогда что-то подобного сделать в жизни, даже если ты им скинешь готовый код.
Бтв, мне ваши с тем чуваком не таких очевидных техник не надо. Я не пытаюсь из вас это выманить или т.д. Мне оно не надо. Есть вариант намного круче, работоспособнее, очевиднее.
 
Последнее редактирование:
Псевдоадмин
Администратор
Статус
Оффлайн
Регистрация
17 Май 2018
Сообщения
184
Реакции[?]
637
Поинты[?]
78K
паттерн расчета флага и jccшек в вмп 3.8
Ну вот ты опять просто уперся в непонимание сути, про что я собственно и говорю, у меня нет особого желания кормить людей на публике дополнительными техниками в их арсенал. Есть варианты решения этой проблемы настолько универсальные, что они из коробки заработают с любой вмкой, даже если ты ее сам накодил.
p.s
Я и так слишком много уже сказал :)
 
practice makes perfect
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2019
Сообщения
86
Реакции[?]
67
Поинты[?]
19K
Ну вот ты опять просто уперся в непонимание сути, про что я собственно и говорю, у меня нет особого желания кормить людей на публике дополнительными техниками в их арсенал. Есть варианты решения этой проблемы настолько универсальные, что они из коробки заработают с любой вмкой, даже если ты ее сам накодил.
p.s
Я и так слишком много уже сказал :)
Я понял, что вы имеете ввиду. Сорян за негатив в сторону твоего друга, мы просто думаем о разных вещах.
Да и мы по разному видим эту всю тему
Мне в каком то плане надо чтобы все идеально работало и анализ не предоставлял трудностей.
 
Последнее редактирование:
practice makes perfect
Пользователь
Статус
Оффлайн
Регистрация
16 Мар 2019
Сообщения
86
Реакции[?]
67
Поинты[?]
19K
Почему мы начинаем идти по сложному пути,говоря о эмуляции кода или гениальном девирте(мне действительно нужно взорвать дверь в деревне,когда можно просто сломать замок у входной двери?).
Опять же,можно просто по простому пути в данном случае, чтобы автоматизировать это чудо.
Это просто теория, которую можно реализовать т.к не вижу проблем в данном случае(поправьте,пожалуйста,если ошибаюсь и спасибо за знания :D).
Вспомним,например,статью
Пожалуйста, авторизуйтесь для просмотра ссылки.
, благодаря чему можно пойти подумать и прийти к решению:
1)Выделяем память(old_fake_base) по определённому адресу(т.к в пофикшенном дампе должен быть STATUS_ACCESS_VIOLATION при вызове)для DLL,если у них есть DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size(допустим,мы не знаем точно весь список используемого импорта,хотя можно отфилтровать,чтобы они точно были системные DLL ).
Потребуется записать эти адреса на листочек(или куда вам нужно?),чтобы использовать в VEH обработчике.
2)Фиксим релоки в выделенной памяти и перенаправляем импорт скопированную DLL на скопированную DLL(KernelBase.dll ->ntdll.dll,например).
3)Проходим в PEB и делаем подмену DllBase на наши скопированные регионы(old_fake_base).
4)Ждём инит этого чуда,потом дампим,после его фикса с сервера(я не буду разбирать нужны ли эти доп. фиксы ).
5)Допустим,у нас всё заводится,кроме этого чуда-импорта(просто в теории т.к это не затрагивает пункт выше и мы не играем в догонялки)
Ставим наш VEH с условием,что у нас STATUS_ACCESS_VIOLATION и RIP является как раз теми адресами,где мы выделяли память для old_fake_base(начала и конец региона).
6)Можно просто менять на RIP= RIP - old_fake_base+ memory_dll(RIP используется в качестве RVA в данном случае). Лучше сделать проход по PIMAGE_EXPORT_DIRECTORY для RIP - old_fake_base(можно вшить массивом old_fake_base или оставить на диске) ,чтобы получить оригинальное имя и если мы получили имя, мы уже получить RVA в memory_dll(не old_fake_base,которая была в памяти при дампе) т.к с большим шансом у других юдей будет различаться DLL -> RVA разные.
Да,каждый вызов импорта - вызов VEH,но лучше кэшировать результат,чтобы не делать заново расчёты и потом можно использовать при долгом ручном фиксе.
P.S извиняюсь, что слишком длинно расписано, но тут больше слов, нежели действий.
Привет. Спасибо за хороший метод! Я пробовал понять, будет ли работать этот метод в 100% случаях. Нашел один случай, в котором он работать не будет. Поправь, если я ошибаюсь, возможно, я что-то упустил.

К сути, предположим у нас импорт находится на адресе 0х1000, первый инжект дампа, память 0х1000 не занята, вызывается access_violation, обрабатываем эту шляпу и все гуд. Ребутнем пк, инжектим. Адрес 0х1000 уже занят, там находится секция текста, выполняется 3 инструкции и ловим краш и наш адрес краша уже смещен на 3 сайза инструкций. Тут я так понял, что все поломается, т.к мы не сможем корректно обработать краш? Если я не прав, буду рад услышать тебя.
Спасибо еще раз за метод! Достаточно оригинально.
 
✊Rot Front✊
Пользователь
Статус
Оффлайн
Регистрация
2 Июл 2020
Сообщения
131
Реакции[?]
256
Поинты[?]
84K
Привет. Спасибо за хороший метод! Я пробовал понять, будет ли работать этот метод в 100% случаях. Нашел один случай, в котором он работать не будет. Поправь, если я ошибаюсь, возможно, я что-то упустил.

К сути, предположим у нас импорт находится на адресе 0х1000, первый инжект дампа, память 0х1000 не занята, вызывается access_violation, обрабатываем эту шляпу и все гуд. Ребутнем пк, инжектим. Адрес 0х1000 уже занят, там находится секция текста, выполняется 3 инструкции и ловим краш и наш адрес краша уже смещен на 3 сайза инструкций. Тут я так понял, что все поломается, т.к мы не сможем корректно обработать краш? Если я не прав, буду рад услышать тебя.
Спасибо еще раз за метод! Достаточно оригинально.
Вы полностью правы,но можно просто проверить является ли этот регион памяти занят. Опять же,некоторые кряки p2c,где не фиксят релоки - просто загружают по одному и тому же адресу,а если память и будет занята - просто просят юзера перезагрузить приложение(я не видел смысла просто уточнять про работу ASLR и вытекающую возможную проблему т.к она не критическая)
 
Сверху Снизу