C++ Lazy Import

Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вечно можно смотреть на три вещи, одна из них реверс нативных функций винды, красавчик +rep ?
Ты не можешь сломать серверное лц, точнее можешь но не на прямую а ломая данные которые клиент отправляет серверу и вот тикбаза ломается и желательно её зафиксить
 
Ты не можешь сломать серверное лц, точнее можешь но не на прямую а ломая данные которые клиент отправляет серверу и вот тикбаза ломается и желательно её зафиксить
а как же вызвать шеллкод через энтрипоинт(или че ты там спизданул не помню уже)? я думал это твоя любимая тема...
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а как же вызвать шеллкод через энтрипоинт(или че ты там спизданул не помню уже)? я думал это твоя любимая тема...
какой вызвать шеллкод через ентри поинт..... с головушкой все в порядке?
 
Вечно можно смотреть на три вещи, одна из них реверс нативных функций винды, красавчик +rep ?
Там нет ничего из реверса, кроме нескольких структур, которые недокументированы официально (либо документированы не полностью). Но и они в свободном доступе (ReactOS, Vergilius, etc.)
1700916150749.png
 
Рекомендации(в основном маленькие):
1)Добавить хеширование констант в коде(IMAGE_DOS_SIGNATURE,IMAGE_NT_OPTIONAL_HDR_MAGIC
C++:
Expand Collapse Copy
::lazy_import::utils::dos_header(m_base)->e_magic != IMAGE_DOS_SIGNATURE
т.к это создаёт дополнительные сигнатуры
2)аналогичный момент(смотри 1 пункт) с поиском длины + LAZY_IMPORT_TOLOWER
C++:
Expand Collapse Copy
if (c == '\0') break;
Это просто цепляет глаза реверсера, который встречается с этим несколько раз
3)на всякий случай я бы добавил IMAGE_NT_SIGNATURE
Рад видеть, как на этом форуме люди стараются, а не ведут стрельбу по воздуху(намёк на некоторых люди выше :kissingheart:)
 
Обновлено.

lazy_import.hpp :
[+] - Полностью пофикшены вызовы любых forwarded-import`ов, в список которых входили WinAPI для работы с хипом и другое.
Теперь внутри функции определяется является ли импорт forwarded, и если он является таковым - по адресу читается строка в которой хранится необходимое название функции на которую ссылается импорт, и при помощи рекурсивного вызова - вызывается настоящий импорт. В очередной раз большое спасибо @invers1on за помощь)
[+] - Исправлено кэширование вызовов которое до этого было неверным и работало неисправно, теперь кэширование основано на старом добром std::unordered_map.
[+] - Добавлен флаг позволяющий отключить кэширование LAZY_IMPORT_DISABLE_CACHING, заменив внутренности .cached_call() обычным вызовом. При использовании флага std::unordered_map не создаётся и include включающий в себя реализацию этого объекта - не включается.

Репозиторий:
[+] - Добавлено предупреждение об использовании forwarded импортов под разделом "Configuration"
 
Приведи рабочий пример с использованием HeapAlloc, HeapReAlloc, HeapCreate , memcpy, memset и т.п.
Иначе оно не отличается от орегинала.
наслаждайся, искренне надеюсь что я заслужил твоего одобрения своей пастой орегинала))))))
C++:
Expand Collapse Copy
int main(void)
{
    // If you know that your import is forwarded, it is highly
    // recommended that you call via .cached_call()
    PVOID ptr = LI(PVOID, HeapAlloc).call(LI(HANDLE, GetProcessHeap).cached_call(), 0, 0x64);

    if (ptr != nullptr)
    {
        std::cout << "Memory succesfully allocated.\n";

        if (LI(BOOL, HeapFree).call(LI(HANDLE, GetProcessHeap).cached_call(), 0, ptr)) {
            std::cout << "Memory free succeded.\n";
        }
        else {
            std::cerr << "Couldn't free allocated memory, error: " << GetLastError() << '\n';
        }
    }
    else {
        std::cerr << "Couldn't allocate memory, error: " << GetLastError() << '\n';
    }

    return EXIT_SUCCESS;
}
 
Там нет ничего из реверса, кроме нескольких структур, которые недокументированы официально (либо документированы не полностью). Но и они в свободном доступе (ReactOS, Vergilius, etc.)
Посмотреть вложение 264541
Всё равно норм, такие движухи всегда лучше всяких паст лв и тд
 
наслаждайся, искренне надеюсь что я заслужил твоего одобрения своей пастой орегинала))))))
C++:
Expand Collapse Copy
int main(void)
{
    // If you know that your import is forwarded, it is highly
    // recommended that you call via .cached_call()
    PVOID ptr = LI(PVOID, HeapAlloc).call(LI(HANDLE, GetProcessHeap).cached_call(), 0, 0x64);

    if (ptr != nullptr)
    {
        std::cout << "Memory succesfully allocated.\n";

        if (LI(BOOL, HeapFree).call(LI(HANDLE, GetProcessHeap).cached_call(), 0, ptr)) {
            std::cout << "Memory free succeded.\n";
        }
        else {
            std::cerr << "Couldn't free allocated memory, error: " << GetLastError() << '\n';
        }
    }
    else {
        std::cerr << "Couldn't allocate memory, error: " << GetLastError() << '\n';
    }

    return EXIT_SUCCESS;
}
DisableThreadLibraryCalls и CreateThread работали через раз. Поэтому мне этого хватило с головой, что-бы вернуться к основной библиотеки..
 
DisableThreadLibraryCalls и CreateThread работали через раз. Поэтому мне этого хватило с головой, что-бы вернуться к основной библиотеки..


Работали через раз это как?Продебажь, найди причину. Автор треда зальёт фикс и выразит тебе благодарность.
 
по неизвестной мне пока-что причине, операции с хипом выбрасывают access_violation, немного попозже посмотрю и постараюсь разобраться, ну и конечно же релизнуть фикс по возможности.

а пока

HeapAlloc обращается к RtlAllocateHeap, пока не найду решения проблемы с AV, можете делать подобный вызов для использования HeapAlloc()
HeapAlloc():
Expand Collapse Copy
LI(LPVOID, RtlAllocateHeap).call(LI(HANDLE, GetProcessHeap).call(), 0, static_cast<SIZE_T>(100));

upd: подъехало объяснение, спасибо @invers1on
Используйте RtlAllocateHeap, эта функция не выбросит исключение
 
Работали через раз это как?Продебажь, найди причину. Автор треда зальёт фикс и выразит тебе благодарность.
Как, как - 10 раз норм, потом вылеты. Престроение проекта, потом норм.
Дебажить что, каждый инжект, надеясь, что будет тихий вылет процесса в который инжет делаю?
 
Как, как - 10 раз норм, потом вылеты. Престроение проекта, потом норм.
Дебажить что, каждый инжект, надеясь, что будет тихий вылет процесса в который инжет делаю?
Ну ты или помогай проекту, или покинь тред со своим желанием юзать оригинальный репозиторий, она собсна никак текущему проекту не помогает, было бы куда лучше, если бы ты влепил обработчик исключений с выводом всей нужной инфы для анализа и после краша закинул её сюда, и тебе не придется по 10 раз перезапускать свой инжектор
 
DisableThreadLibraryCalls и CreateThread работали через раз. Поэтому мне этого хватило с головой, что-бы вернуться к основной библиотеки..
как жаль терять настолько ценного и отличного юзера, не уходи в орегинальную библиотеку, пожалуйста...
я честно сказать твои сообщения в этом треде уже вообще не воспринимаю, я не удивлюсь если твои краши возникают либо из-за того что ты не заменил старый хеадер на обновлённый), или ты где-то проебался в своём коде)))
удачи.

а тем кто действительно хочет помочь решить какие-либо ошибки - если вы их заметили, дайте как-то об этом знать, либо в телегу, либо на гитхабе, либо тут, без разницы. спасибо всем адекватным людям которых немало только в одном этом треде)


Используйте RtlAllocateHeap, эта функция не выбросит исключение
HeapAlloc это forwarded импорт который по сути является простым указателем на строку NTDLL.RtlAllocateHeap которая находится в .rdata секции, из-за этого при попытке вызова и происходит ACCESS_VIOLATION, но по факту строка не является исполняемым кодом и хочешь не хочешь, ты не сможешь её вызвать. спасибо макс)))

в проекте это солвится проверкой на то является ли импорт "forwarded", если он является таковым то по адресу процедуры вынимается строка и обрезается всё после ".", после чего остаток строки после "." хэшируется и выполняется рекурсивный вызов, после чего находится уже адрес настоящего импорта. так что ты вполне можешь вызывать и все нужные тебе импорты по привычным, документированным именам.
 
Ну ты или помогай проекту, или покинь тред со своим желанием юзать оригинальный репозиторий, она собсна никак текущему проекту не помогает, было бы куда лучше, если бы ты влепил обработчик исключений с выводом всей нужной инфы для анализа и после краша закинул её сюда, и тебе не придется по 10 раз перезапускать свой инжектор
Я то не против этого, но как это сделать?
 
более не поддерживается. для дальнейшего использования переходите на более новую версию -
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
  • Мне нравится
Реакции: mj12
Назад
Сверху Снизу