Хитрое заполнение API-таблицы

Admin

Original poster
Administrator
Сообщения
916
Реакции
753
Посетить сайт
При первом знакомстве с кодом, вместо занудной трассировки, можно сразу ставить бряки на нужные нам api, и дальше двигаться в нужном направлении и делать выводы о том, как же работает бацила. При анализе семпла (Andromeda) таким способом, сработал трюк, о котором я совершенно не мог подумать, и не происходи работа в виртуальной среде, моя система стала бы достоянием ботнета
smiley.gif


Допустим есть какая-то полезная нагрузка, ей передается, или непосредственно в коде заполняется, участок с адресами необходимых для работы api. Трюк заключается в том, что выполнение api, по родному месту, начинается ПОСЛЕ первой инструкции, т.е. бряк на первой совершенно бесполезен. Как же так происходит? Элементарно, на примере MessageBoxW:
225d2c626a138585c05e6f127b2a3726.png

мы копируем себе "mov edi, edi", а потом прыгаем на следующую и-ю в dll.

Код:
my_MessageBoxW: ; (место в нашей памяти, my_MessageBoxW вместо прямого адреса на оригинал)
    mov edi, edi ; первая инструкция, скопированная из orig_MessageBoxW
    jmp orig_MessageBoxW + sizeof(mov edi, edi)

orig_MessageBoxW: ; (оригинал, в user32.dll)
    mov edi, edi ; <- копируем себе, вычисляем размер, тут стоит бряк
    push ebp ; <- прыгаем сюда
    ...
Мы можем тупо скопировать методу(код), но так неправильно. Попробуем воссоздать фокус.

Сперва были проанализированы (при помощи capstone) функции в следующих dll на win7 x32, для определения возможных подвохов и неточностей:
  • ntdll.dll
  • kernel32.dll
  • user32.dll
  • ws2_32.dll
  • gdi32.dll
  • gdiplus.dll
  • crypt32.dll
  • shell32.dll
  • advapi32.dll
  • ole32.dll
  • urlmon.dll
  • wininet.dll
После этой проверки, был сделан вывод, что должна уметь функция:
  • обработка единичных инструкций типа ret N, int3 - просто их копируем, прыгать некуда
  • обработка проксей типа "NTDLL.RtlAcquireSRWLockExclusive" - нужно определить и пропарсить с последующей загрузкой (GetProcAddress(LoadLibraryA("NTDLL"), "RtlAcquireSRWLockExclusive"))
  • обработка прыжков - можно вычислить куда он прыгает, иначе НАШ jmp будет бесполезен
Нам также необходим дизассемблер длин. Используем мал да удал Catchy32.

Итого, вышел такой простенький но хитрый каркас:
Код:
#include <windows.h>
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>

extern int __stdcall c_Catchy(uint8_t*);


#define RVATOVA(base, offset) ((DWORD)base + (DWORD)offset)

void GetApi(char *szDllName, char *szApiName, uint8_t *pBlock)
{
    HMODULE hModule = LoadLibraryA(szDllName);

    if (hModule == NULL) {
        printf("hModule error!\n");
        exit(EXIT_FAILURE);
    }

    PIMAGE_OPTIONAL_HEADER poh = (PIMAGE_OPTIONAL_HEADER)(
        (char*)hModule +
        ((PIMAGE_DOS_HEADER)hModule)->e_lfanew +
        sizeof(DWORD) +
        sizeof(IMAGE_FILE_HEADER)
    );

    PIMAGE_EXPORT_DIRECTORY ped = (IMAGE_EXPORT_DIRECTORY*)RVATOVA(
        hModule, poh->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress
    );

    DWORD *pdwNamePtr = (DWORD*)RVATOVA(hModule, ped->AddressOfNames);
    WORD *pwOrdinalPtr = (WORD*)RVATOVA(hModule, ped->AddressOfNameOrdinals);

    for (size_t i = 0; i < ped->NumberOfNames; ++i, ++pdwNamePtr, ++pwOrdinalPtr) {
        if (lstrcmpA((char*)RVATOVA(hModule, *pdwNamePtr), szApiName) == 0) {

            PDWORD pAddrTable = (PDWORD)RVATOVA(hModule, ped->AddressOfFunctions);
            DWORD dwRVA = pAddrTable[*pwOrdinalPtr];
            DWORD dwApiAddr = (DWORD)RVATOVA(hModule, dwRVA);

            int catchy = c_Catchy((uint8_t*)dwApiAddr);

            // копируем первую инструкцию
            memcpy(pBlock, (uint8_t*)dwApiAddr, catchy);

            // пишем опкод jmp
            pBlock[catchy] = 0xE9;

            //считаем прыжок
            DWORD offset = dwApiAddr - (DWORD)pBlock - 5;

            // заполняем
            memcpy(pBlock + catchy + 1, &offset, sizeof(DWORD));
        }
    }
}

int main(void)
{
    /*
        Функций, с начальной инструкцией в 15 байт при проверке не встречалось, поэтому места нам должно хватить. Выравниваем.
    */
    uint8_t *apis_block = malloc(16 * 2);
    if (apis_block == NULL) {
        printf("malloc error!\n");
        exit(EXIT_FAILURE);
    }

    GetApi("user32.dll", "MessageBoxW", apis_block);
    GetApi("kernel32.dll", "ExitProcess", apis_block + 16);


    // MessageBoxW
    (*(void*(*)())apis_block)(0, L"text", L"caption", MB_OK);

    // ExitProcess
    (*(void*(*)())(apis_block + 16))(0);


    free(apis_block);

    return 0;
}
 
Название темы
Автор Заголовок Раздел Ответы Дата
semsvm Интересно NETFLIX API CHECKER FULL CAPTURE NON SKIP Бруты/Парсеры/Чекеры 0
S ScrapingBypass Web Scraping API Обход Cloudflare Captcha Корзина 0
Chekon На проверке sms.chekons.com - Сервис для получения SMS на реальные номера USA "Non-VoIP, безлим SMS, API + Бот" Ищу работу. Предлагаю свои услуги. 3
Chekon Продам sms.chekons.com - Сервис для получения SMS на реальные номера USA "Non-VoIP, безлим SMS, API" Все что не подошло по разделу 0
L i need ebay brute checker api android or ios Продажа софта 1
D Закрыто [БЮДЖЕТНЫЙ АВТОКРИПТ/API ДЛЯ ТИМ] Easy Crypt Service | ОБХОД ДЕФЕНДЕРА | ЛЮБОЙ ВИРУС | .NET / NATIVE Корзина 1
HostingSupport VERIFCRYPTBOT | автоматический крипт .NET/Native файлов | API для тим | FUD 0-3/26 Ищу работу. Предлагаю свои услуги. 5
M Интересно Бесплатный CC чекер. Безлимит чеков + API интерфейс Карты/CC/Банки/Enroll 0
R |Rzkyo.com| Selling Scampages & Leters | Smtp Inbox All Domain | SMS Sender API | Amazon AWS Smtp Limited 50k / Days Корзина 0
X [CONFIG] PAYPAL API + CC CAPTURE + ADDRESS Продажа софта 0
M Отработки бинанс с btc. лоченые/любые аки, через api/любой терминал. 50/50! Предоставляю работу. Ищу специалиста. 0
H OWASP APICheck – набор инструментов DevSecOps для HTTP API Корзина 0
АнАлЬнАя ЧуПаКаБрА NordVPN [ API ] B&C Проекты Private Keeper 1
tamperplay ProxyCloud - автообновляемые Proxy c API Продажа софта 1
АнАлЬнАя ЧуПаКаБрА **** Antipablick api Проекты Private Keeper 0
Uno-uno Shodan scaner + api key Бруты/Парсеры/Чекеры 0
C Интересно Обход/снятие 2fa, вывод денег без валид почты, работа с API-KEY крипто-бирж Ищу работу. Предлагаю свои услуги. 1
АнАлЬнАя ЧуПаКаБрА [API] Spotify Brute and Cheker by Nebu_Kuro Проекты Private Keeper 1
D API (битки/хайп что-то такое) Проекты Private Keeper 1
W ru.wos-api.biz - Качественная накрутка Youtube, Instagram, Telegram, Facebook и других соц.сетей Ищу работу. Предлагаю свои услуги. 0
АнАлЬнАя ЧуПаКаБрА Avito [Message_Checker] API Бруты/Парсеры/Чекеры 0
АнАлЬнАя ЧуПаКаБрА INLINE Litres B/C API Проекты Private Keeper 1
АнАлЬнАя ЧуПаКаБрА INLINE [BC]NordVPN API Проекты Private Keeper 4
sexysmm Sexy-SMM.ru - Подписчики в Телеграм - От 110 рублей за 1000. До 50% скидка Реселлерам. Есть API Ищу работу. Предлагаю свои услуги. 25
BuriTTo Помощь в PHP\JS\HTML, API VK\ Telegram бесплатно. Ищу работу. Предлагаю свои услуги. 0
АнАлЬнАя ЧуПаКаБрА INLINE cyberghostvpn.com Android API Проекты Private Keeper 1
АнАлЬнАя ЧуПаКаБрА INLINE B/С Lootboy.de [Mobile API] Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE CryptoPay.me Brute [VALID] (Mobile API) Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА INLINE API ключи бтк Проекты Private Keeper 1
АнАлЬнАя ЧуПаКаБрА Регистратор PAYEER кошельков (API + Слив на 1 кошелёк) Софт для работы с текстом/Другой софт 0
W Ключ API Shodan - Студенческая подписка | Платный доступ к Shodan Бесплатно Раздача (аккаунтов/ключей) 10
АнАлЬнАя ЧуПаКаБрА INLINE [B&C] Api.stepium.com Проекты Private Keeper 0
F WarFace [Brute/Checker] 1.0.5 [API RU/EU API/GAME API] Бруты/Парсеры/Чекеры 2
F WarFace [Brute/Checker] 1.0.5 [API RU/EU API/GAME API] Софт для работы с текстом/Другой софт 2
АнАлЬнАя ЧуПаКаБрА Chase SoftWare API - [Cracked By PC-RET] Бруты/Парсеры/Чекеры 6
K JavaScript. Уровень 3г. HTML5 API [Борисов И.О.] Другое 0
АнАлЬнАя ЧуПаКаБрА Qiwi Api Tools софт для снятия бабло Софт для работы с текстом/Другой софт 0
C Использование API ключа rucaptcha | Проекты Private Keeper С/C++ 0
R Взлом фрукт киви кошелька через API Токен Полезные статьи 6
S Обновляемые прокси ( API) Socks 5 Proxy/Прокси 0
L Имеет кто api key Вопросы и интересы 1
АнАлЬнАя ЧуПаКаБрА INLINE Letyshops.com B&C [API] Проекты Private Keeper 1
АнАлЬнАя ЧуПаКаБрА [INLINE] PSN Work checker - api no captcha . speed 1k/1sec - Cracked By [#PCR#] Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА API VK.com Brute&Checker by WarKiss [2.1] - Cracked By [#PCR#] Бруты/Парсеры/Чекеры 0
U BruteChecker 1xBet [API] by Undeniable Бруты/Парсеры/Чекеры 7
АнАлЬнАя ЧуПаКаБрА INLINE Americanexpress API Проекты Private Keeper 0
P Amazon API Checker - Cracked by [#PCR#] Бруты/Парсеры/Чекеры 0
АнАлЬнАя ЧуПаКаБрА [Api] wasdclub.com брутфорс - чекер Проекты Private Keeper 0
АнАлЬнАя ЧуПаКаБрА Modnakasta.ua [API] Brute Checker by Pr@jz Бруты/Парсеры/Чекеры 0
АнАлЬнАя ЧуПаКаБрА IVI Brute and Checker by LittleKra6 [API] Бруты/Парсеры/Чекеры 3

Название темы