Обход антивирусов методом вызова API функций, по их порядковым номерам.


HMCoba

Активный пользователь
Активный
Регистрация
22.04.2023
Сообщения
157
Репутация
114
Данный метод не новый, но я всё же решил его выложить, думаю не помешает для инфы!
Есть несколько способов избежать необходимости объявлять API в таблице импорта двоичного файла, и при этом, использовать его.​
Такие методы, как вызов API по имени , вызов API по хэшу , встраивание шеллкода, как правило, являются наиболее распространенными.​
В данном методе, о котором я раскажу, API объявляется, но только не с его именем.​
Идея, заключается в том, чтобы попытаться вызвать функции, которые экспортируют библиотеки, используя порядковые номера, которые​
к ним относятся, вместо их явных имен. Этот метод из соображений совместимости обычно не рекомендуется, поскольку возможно,​
что в зависимости от операционной системы, в которой запущен двоичный файл, он может в конечном итоге не работать. . Это присходит​
потому что, есть множество безымянных функций, и это единственный способ их вызвать. Но тем не менее выход есть, методом встраивания​
нужных библиотек в систему, (в режиме Dropper) перед выполнением вредоносного ПО, можно решить этот вопрос.​



1. Для проверки концепции давайте начнём с чего-то простого, хорошо обнаруживаемого. Например возмём, 1 вый -этап подключения полезной​
нагрузки Metasploit « reverse_tcp» .​
1.png
2. Чтобы выполнить шеллкод, я скомпилировал разработанный двоичный файл ... конечно? в Visual Basic 6, чтобы сохранить привычку, используется​
CallWindowProcA.​
2.png
3. Инструмент Pestudio откроет путь для быстрой идентификации порядкового номера, который используется в моей системе функцией​
callwindowproca библиотеки user32.dll. На следующем рисунке показаны API, которые экспортирует эта библиотека.​
3.png
4. Порядковый номер 1531 даст нам доступ к его вызову, после чего я внесу изменения в код, ранее использовавшийся для его вызова.​
4.png
5. После проверки обоих двоичных файлов отображается, как выполняется вызов в этом случае. Что-то физически более сложное для обнаружения,​
чем мой предыдущий пост о методе Mmove, в котором имена функций переносились в другие пробелы.​
5.png
6. Мы просто объявляем функцию с порядковым номером, который ссылается на API в десятичном формате.​
Проверяем с помощью Metasploit, действительно ли этот последний двоичный файл работает.​
6.png
7. Теперь остается только отправить образцы на онлайн-сканер.​
7.png
8. Это сработало, Ура! Естественно, какой-то антивирус должен был обнаружить образец, прежде всего потому, что он находит список кодов​
операций, которые составляют встроенную полезную нагрузку без какого-либо кодирования или шифрования.​
Чтобы избежать этих обнаружений, безопаснее всего было бы использовать такой инструмент, как Abronsius Code Obfuscator, для такого​
рода двоичных файлов, скомпилированных в Visual Basic x, которые используют вызов API по их порядковым номерам.​
8.png
9. Здесь все чахи с леденцами на палочке! Но на самом деле забавно было бы изменить уже обнаруженный двоичный файл, к источникам которого​
у нас нет доступа, чтобы выполнить очистку от обнаружений, как это было некоторое время назад.​
И так, как в Visual Basic 6, внутренне это немного утомительно,​
( когда дело доходит до выполнения вызовов API, поскольку он динамически загружает их с помощью другой функции,называемой DllFunctionCall ).​
Я “временно " переключился на язык, который не учитывает перекрестные ссылки в своей таблице импорта, Assembler.​
Для POC я загрузил калькулятор Windows на Google диск, самый простой загрузчик, который будет использовать три API.​
Сильно сожженный URLDownloadToFile, ShellExecute и ExitProcess. Трио изчерного списка!​
9.png
10. Это выход из Visual Basic, я пораюаюсь, как прикольно компилировать двоичные файлы размером 2 КБ... хахахаха​
Я вернулся к использованию Pestudio, чтобы прочитать порядковые номера этих новых функций, оба из которых взяты из разных библиотек​
10.png
11. Первый тест я проведу с помощью URLDownloadToFile, так что вернемся к редактору PE. Если вы не знаете, то я сторонник использования LordPE,​
поэтому мы откроем двоичный файл при помощи него, и так перейдем к таблице импорта, которая предоставит нам возможность редактировать.​
11.png
12. Мы удалим байты из подсказки и имени API и добавим в ThunkValue порядковый номер в шестнадцатеричном формате, добавленный к (0x80000000),​
с помощью которого представлен этот тип данных.​
12.png
13. Убедившись , что наш исполняемый файл работает без сбоев, отправляем оба образца в онлайн-сканер.​
13.png
14. И получим довольно таки не плохой результат! Важное замечание: просмотрев двоичный файл, измененный с помощью этого программного обеспечения,​
я понял, что он не выполняет полную очистку имен функциий, а просто устанавливает нулевой байт для первого имени, предотвращая его чтение.​
Тем не менее, завершить очистку с помощью шестнадцатеричного редактора несложно.​
14.png
15. Я очистил и провери, двоичный файл продолжает выполнять свою функцию. Отправляем его обратно в онлайн-сканер.​
15.png
И так, видим что, Доктор Веб вышел из игры. а оставшиеся два антивируса, скорее всего используют некоторую процедуру​
обнаружения, на основе URL, которое можно будет легко обойти, запутав строки!​
Надеюсь что информаци была полезной.​
 
Последнее редактирование:

MKII

Уважаемый пользователь
Форумчанин
Регистрация
03.10.2022
Сообщения
253
Репутация
177
Это спасет только от статического детекта, но не от рантайма, я писал похожую статью где-то на форуме.
 

HMCoba

Активный пользователь
Активный
Регистрация
22.04.2023
Сообщения
157
Репутация
114
Согласен, метод конечно не ух ты, как я описывал выше. метод не новый, лет 10 назад это работало,
но стех пор в антивирусной индустрии, много чего изменилось и нынче обойти детекты, гораздо сложнее ...
Надеюсь, что для начинающих, данный материал будет полезен!
 
Последнее редактирование:

MKII

Уважаемый пользователь
Форумчанин
Регистрация
03.10.2022
Сообщения
253
Репутация
177
Согласен, метод не ух ты, как я описывал выше. метод не новый, и давольно старенький, тогда это спасало как то,
но стех пор в антивирусной индустрии, много чего изменилось, и нынче обойти детект, всё гораздо сложнее.
Это чисто для инфы, начинающим скажем так.
В любом случае, информация полезная
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 208
Да кстати интересный способ.

Есть еще способ вызывать системные вызовы по их номерам, без всяких оберток.

Но минусы, что эти номера разные в разных сборках системы, но можно составить таблицу.

Если системные вызовы мониторятся в юзермоде, то таким образом можно обойти некоторые проактивные защиты.)
 

HMCoba

Активный пользователь
Активный
Регистрация
22.04.2023
Сообщения
157
Репутация
114
номера разные в разных сборках
К сожалению это так, в зависимости от версии ОС - номера системных вызовов меняются...​
Идея с таблицами, (как вариант) хоорошая мысль, надо попробовать!​
 
Автор темы Похожие темы Форум Ответы Дата
X-Shar Крипторы и исследование защиты 0
virt Крипторы и исследование защиты 9
virt Крипторы и исследование защиты 0
virt Крипторы и исследование защиты 0
JohnWick Крипторы и исследование защиты 4
X-Shar Крипторы и исследование защиты 0
X-Shar Крипторы и исследование защиты 22
X-Shar Крипторы и исследование защиты 2
С Крипторы и исследование защиты 1
X-Shar Крипторы и исследование защиты 4
X-Shar Крипторы и исследование защиты 10
X-Shar Крипторы и исследование защиты 16
Верх Низ