C++ Исходник Lazy Import

ЧВК EB_LAN
Забаненный
Статус
Оффлайн
Регистрация
12 Сен 2021
Сообщения
425
Реакции[?]
121
Поинты[?]
162K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вечно можно смотреть на три вещи, одна из них реверс нативных функций винды, красавчик +rep 😄
Ты не можешь сломать серверное лц, точнее можешь но не на прямую а ломая данные которые клиент отправляет серверу и вот тикбаза ломается и желательно её зафиксить
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
Ты не можешь сломать серверное лц, точнее можешь но не на прямую а ломая данные которые клиент отправляет серверу и вот тикбаза ломается и желательно её зафиксить
а как же вызвать шеллкод через энтрипоинт(или че ты там спизданул не помню уже)? я думал это твоя любимая тема...
 
ЧВК EB_LAN
Забаненный
Статус
Оффлайн
Регистрация
12 Сен 2021
Сообщения
425
Реакции[?]
121
Поинты[?]
162K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а как же вызвать шеллкод через энтрипоинт(или че ты там спизданул не помню уже)? я думал это твоя любимая тема...
какой вызвать шеллкод через ентри поинт..... с головушкой все в порядке?
 
Obstruct Omicronium
Пользователь
Статус
Оффлайн
Регистрация
28 Авг 2022
Сообщения
66
Реакции[?]
78
Поинты[?]
66K
Вечно можно смотреть на три вещи, одна из них реверс нативных функций винды, красавчик +rep 😄
Там нет ничего из реверса, кроме нескольких структур, которые недокументированы официально (либо документированы не полностью). Но и они в свободном доступе (ReactOS, Vergilius, etc.)
1700916150749.png
 
✊Rot Front✊
Пользователь
Статус
Оффлайн
Регистрация
2 Июл 2020
Сообщения
130
Реакции[?]
256
Поинты[?]
84K
Рекомендации(в основном маленькие):
1)Добавить хеширование констант в коде(IMAGE_DOS_SIGNATURE,IMAGE_NT_OPTIONAL_HDR_MAGIC
C++:
::lazy_import::utils::dos_header(m_base)->e_magic != IMAGE_DOS_SIGNATURE
т.к это создаёт дополнительные сигнатуры
2)аналогичный момент(смотри 1 пункт) с поиском длины + LAZY_IMPORT_TOLOWER
C++:
if (c == '\0') break;
Это просто цепляет глаза реверсера, который встречается с этим несколько раз
3)на всякий случай я бы добавил IMAGE_NT_SIGNATURE
Рад видеть, как на этом форуме люди стараются, а не ведут стрельбу по воздуху(намёк на некоторых люди выше :kissingheart:)
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,595
Реакции[?]
603
Поинты[?]
44K
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
514
Реакции[?]
495
Поинты[?]
84K
Обновлено.

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

Репозиторий:
[+] - Добавлено предупреждение об использовании forwarded импортов под разделом "Configuration"
 
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
514
Реакции[?]
495
Поинты[?]
84K
Приведи рабочий пример с использованием HeapAlloc, HeapReAlloc, HeapCreate , memcpy, memset и т.п.
Иначе оно не отличается от орегинала.
наслаждайся, искренне надеюсь что я заслужил твоего одобрения своей пастой орегинала))))))
C++:
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;
}
 
anonymous
Участник
Статус
Оффлайн
Регистрация
18 Окт 2022
Сообщения
608
Реакции[?]
216
Поинты[?]
144K
Там нет ничего из реверса, кроме нескольких структур, которые недокументированы официально (либо документированы не полностью). Но и они в свободном доступе (ReactOS, Vergilius, etc.)
Посмотреть вложение 264541
Всё равно норм, такие движухи всегда лучше всяких паст лв и тд
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
162
Реакции[?]
26
Поинты[?]
26K
наслаждайся, искренне надеюсь что я заслужил твоего одобрения своей пастой орегинала))))))
C++:
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 работали через раз. Поэтому мне этого хватило с головой, что-бы вернуться к основной библиотеки..
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
694
Реакции[?]
326
Поинты[?]
12K
DisableThreadLibraryCalls и CreateThread работали через раз. Поэтому мне этого хватило с головой, что-бы вернуться к основной библиотеки..

Работали через раз это как?Продебажь, найди причину. Автор треда зальёт фикс и выразит тебе благодарность.
 
Участник
Статус
Оффлайн
Регистрация
5 Окт 2017
Сообщения
784
Реакции[?]
173
Поинты[?]
11K
по неизвестной мне пока-что причине, операции с хипом выбрасывают access_violation, немного попозже посмотрю и постараюсь разобраться, ну и конечно же релизнуть фикс по возможности.

а пока

HeapAlloc обращается к RtlAllocateHeap, пока не найду решения проблемы с AV, можете делать подобный вызов для использования HeapAlloc()
HeapAlloc():
LI(LPVOID, RtlAllocateHeap).call(LI(HANDLE, GetProcessHeap).call(), 0, static_cast<SIZE_T>(100));
upd: подъехало объяснение, спасибо qqqqqq111111
Используйте RtlAllocateHeap, эта функция не выбросит исключение
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
162
Реакции[?]
26
Поинты[?]
26K
Работали через раз это как?Продебажь, найди причину. Автор треда зальёт фикс и выразит тебе благодарность.
Как, как - 10 раз норм, потом вылеты. Престроение проекта, потом норм.
Дебажить что, каждый инжект, надеясь, что будет тихий вылет процесса в который инжет делаю?
 
Разработчик
Статус
Оффлайн
Регистрация
18 Мар 2020
Сообщения
439
Реакции[?]
870
Поинты[?]
195K
Как, как - 10 раз норм, потом вылеты. Престроение проекта, потом норм.
Дебажить что, каждый инжект, надеясь, что будет тихий вылет процесса в который инжет делаю?
Ну ты или помогай проекту, или покинь тред со своим желанием юзать оригинальный репозиторий, она собсна никак текущему проекту не помогает, было бы куда лучше, если бы ты влепил обработчик исключений с выводом всей нужной инфы для анализа и после краша закинул её сюда, и тебе не придется по 10 раз перезапускать свой инжектор
 
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
514
Реакции[?]
495
Поинты[?]
84K
DisableThreadLibraryCalls и CreateThread работали через раз. Поэтому мне этого хватило с головой, что-бы вернуться к основной библиотеки..
как жаль терять настолько ценного и отличного юзера, не уходи в орегинальную библиотеку, пожалуйста...
я честно сказать твои сообщения в этом треде уже вообще не воспринимаю, я не удивлюсь если твои краши возникают либо из-за того что ты не заменил старый хеадер на обновлённый), или ты где-то проебался в своём коде)))
удачи.

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


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

в проекте это солвится проверкой на то является ли импорт "forwarded", если он является таковым то по адресу процедуры вынимается строка и обрезается всё после ".", после чего остаток строки после "." хэшируется и выполняется рекурсивный вызов, после чего находится уже адрес настоящего импорта. так что ты вполне можешь вызывать и все нужные тебе импорты по привычным, документированным именам.
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
162
Реакции[?]
26
Поинты[?]
26K
Ну ты или помогай проекту, или покинь тред со своим желанием юзать оригинальный репозиторий, она собсна никак текущему проекту не помогает, было бы куда лучше, если бы ты влепил обработчик исключений с выводом всей нужной инфы для анализа и после краша закинул её сюда, и тебе не придется по 10 раз перезапускать свой инжектор
Я то не против этого, но как это сделать?
 
I Want to Die in New Orleans
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
514
Реакции[?]
495
Поинты[?]
84K
более не поддерживается. для дальнейшего использования переходите на более новую версию -
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Сверху Снизу