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