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

ЧВК EB_LAN
Забаненный
Статус
Оффлайн
Регистрация
12 Сен 2021
Сообщения
425
Реакции[?]
121
Поинты[?]
162K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вечно можно смотреть на три вещи, одна из них реверс нативных функций винды, красавчик +rep 😄
Ты не можешь сломать серверное лц, точнее можешь но не на прямую а ломая данные которые клиент отправляет серверу и вот тикбаза ломается и желательно её зафиксить
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
644
Реакции[?]
102
Поинты[?]
65K
Ты не можешь сломать серверное лц, точнее можешь но не на прямую а ломая данные которые клиент отправляет серверу и вот тикбаза ломается и желательно её зафиксить
а как же вызвать шеллкод через энтрипоинт(или че ты там спизданул не помню уже)? я думал это твоя любимая тема...
 
ЧВК EB_LAN
Забаненный
Статус
Оффлайн
Регистрация
12 Сен 2021
Сообщения
425
Реакции[?]
121
Поинты[?]
162K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а как же вызвать шеллкод через энтрипоинт(или че ты там спизданул не помню уже)? я думал это твоя любимая тема...
какой вызвать шеллкод через ентри поинт..... с головушкой все в порядке?
 
Obstruct Omicronium
Пользователь
Статус
Онлайн
Регистрация
28 Авг 2022
Сообщения
65
Реакции[?]
75
Поинты[?]
63K
Вечно можно смотреть на три вещи, одна из них реверс нативных функций винды, красавчик +rep 😄
Там нет ничего из реверса, кроме нескольких структур, которые недокументированы официально (либо документированы не полностью). Но и они в свободном доступе (ReactOS, Vergilius, etc.)
1700916150749.png
 
✊Rot Front✊
Пользователь
Статус
Оффлайн
Регистрация
2 Июл 2020
Сообщения
131
Реакции[?]
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,500
Реакции[?]
560
Поинты[?]
104K
артём диджитал дизайнер
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
489
Реакции[?]
472
Поинты[?]
61K
Обновлено.

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

Репозиторий:
[+] - Добавлено предупреждение об использовании forwarded импортов под разделом "Configuration"
 
артём диджитал дизайнер
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
489
Реакции[?]
472
Поинты[?]
61K
Приведи рабочий пример с использованием 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;
}
 
c:\buildworker\csgo_rel_win64
Участник
Статус
Оффлайн
Регистрация
18 Окт 2022
Сообщения
587
Реакции[?]
209
Поинты[?]
137K
Там нет ничего из реверса, кроме нескольких структур, которые недокументированы официально (либо документированы не полностью). Но и они в свободном доступе (ReactOS, Vergilius, etc.)
Посмотреть вложение 264541
Всё равно норм, такие движухи всегда лучше всяких паст лв и тд
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
135
Реакции[?]
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
Сообщения
695
Реакции[?]
327
Поинты[?]
11K
DisableThreadLibraryCalls и CreateThread работали через раз. Поэтому мне этого хватило с головой, что-бы вернуться к основной библиотеки..

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

а пока

HeapAlloc обращается к RtlAllocateHeap, пока не найду решения проблемы с AV, можете делать подобный вызов для использования HeapAlloc()
HeapAlloc():
LI(LPVOID, RtlAllocateHeap).call(LI(HANDLE, GetProcessHeap).call(), 0, static_cast<SIZE_T>(100));
upd: подъехало объяснение, спасибо invers1on
Используйте RtlAllocateHeap, эта функция не выбросит исключение
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
135
Реакции[?]
26
Поинты[?]
26K
Работали через раз это как?Продебажь, найди причину. Автор треда зальёт фикс и выразит тебе благодарность.
Как, как - 10 раз норм, потом вылеты. Престроение проекта, потом норм.
Дебажить что, каждый инжект, надеясь, что будет тихий вылет процесса в который инжет делаю?
 
Разработчик
Статус
Оффлайн
Регистрация
18 Мар 2020
Сообщения
433
Реакции[?]
855
Поинты[?]
179K
Как, как - 10 раз норм, потом вылеты. Престроение проекта, потом норм.
Дебажить что, каждый инжект, надеясь, что будет тихий вылет процесса в который инжет делаю?
Ну ты или помогай проекту, или покинь тред со своим желанием юзать оригинальный репозиторий, она собсна никак текущему проекту не помогает, было бы куда лучше, если бы ты влепил обработчик исключений с выводом всей нужной инфы для анализа и после краша закинул её сюда, и тебе не придется по 10 раз перезапускать свой инжектор
 
артём диджитал дизайнер
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
489
Реакции[?]
472
Поинты[?]
61K
DisableThreadLibraryCalls и CreateThread работали через раз. Поэтому мне этого хватило с головой, что-бы вернуться к основной библиотеки..
как жаль терять настолько ценного и отличного юзера, не уходи в орегинальную библиотеку, пожалуйста...
я честно сказать твои сообщения в этом треде уже вообще не воспринимаю, я не удивлюсь если твои краши возникают либо из-за того что ты не заменил старый хеадер на обновлённый), или ты где-то проебался в своём коде)))
удачи.

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


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

в проекте это солвится проверкой на то является ли импорт "forwarded", если он является таковым то по адресу процедуры вынимается строка и обрезается всё после ".", после чего остаток строки после "." хэшируется и выполняется рекурсивный вызов, после чего находится уже адрес настоящего импорта. так что ты вполне можешь вызывать и все нужные тебе импорты по привычным, документированным именам.
 
Начинающий
Статус
Оффлайн
Регистрация
13 Май 2023
Сообщения
135
Реакции[?]
26
Поинты[?]
26K
Ну ты или помогай проекту, или покинь тред со своим желанием юзать оригинальный репозиторий, она собсна никак текущему проекту не помогает, было бы куда лучше, если бы ты влепил обработчик исключений с выводом всей нужной инфы для анализа и после краша закинул её сюда, и тебе не придется по 10 раз перезапускать свой инжектор
Я то не против этого, но как это сделать?
 
артём диджитал дизайнер
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
489
Реакции[?]
472
Поинты[?]
61K
более не поддерживается. для дальнейшего использования переходите на более новую версию -
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Сверху Снизу