C++ Исходник Shadow syscalls (x64, MASM branch, Shellcode branch)

Начинающий
Статус
Оффлайн
Регистрация
2 Фев 2022
Сообщения
68
Реакции[?]
14
Поинты[?]
19K
Гуд темка, в будущем можешь добавить спуф калл стека либо индирект вызов как
Пожалуйста, авторизуйтесь для просмотра ссылки.
чтоб прям вообще ваааай, но это больше к хакингу относится :roflanEbalo:
 
Последнее редактирование:
артём диджитал дизайнер
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
489
Реакции[?]
472
Поинты[?]
61K
Гуд темка, в будущем можешь добавить спуф калл стека либо индирект вызов как
Пожалуйста, авторизуйтесь для просмотра ссылки.
чтоб прям вообще ваааай, но это больше к хакингу относится :roflanEbalo:
спасибо
по поводу коллспуфера и прочей шняги - репозиторий больше для ознакомления с сисколлами как таковыми, ну и офк для стабильного, простого и удобного использования. при желании это всё довольно просто можно модифицировать под себя
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
644
Реакции[?]
102
Поинты[?]
65K
NtCreateThreadEx( &t, THREAD_ALL_ACCESS, NULL, (HANDLE)-1, (LPTHREAD_START_ROUTINE)startroutine, nullptr, FALSE, NULL, NULL, NULL, NULL );


но я уже походу понял в чем проблема, чувак выше написал
в ObjectAttributes, StackZeroBits, SizeOfStackCommit, SizeOfStackReserve, lpBytesBuffer nullptr вместо NULL передать
проверил, даже так не работает, только теперь не ERROR_ACCESS_DENIED возвращает, а 0 и поток просто не создается
upd забыл в flags nullptr вместо нулл передать, все ок ща
 
Последнее редактирование:
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,500
Реакции[?]
560
Поинты[?]
104K
проверил, даже так не работает, только теперь не ERROR_ACCESS_DENIED возвращает, а 0 и поток просто не создается
upd забыл в flags nullptr вместо нулл передать, все ок ща
нихуя се, а в чём разница в поведении нуллптр и буквально нулевого инта
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
нихуя се, а в чём разница в поведении нуллптр и буквально нулевого инта
Буквально нужно читать прежде чем щитпостить
 
артём диджитал дизайнер
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
489
Реакции[?]
472
Поинты[?]
61K
Обновлено.

shadow syscall shellcode.hpp :
[+] - Удалены почти все включаемые заголовки, конкретный список:
<Windows.h>
<
vector>
<
cstdint>
<
stdexcept>

[+] - Добавлена поддержка стандарта cpp 14 ("/std:c++14")
[+] - Появилась возможность совершать как кэшированные вызовы, так и обычные, вкратце - добавлена функция .cached_call().
[+] - Добавлена "рандомизация" ключевого значения хэша, основанная на времени компиляции

[+] - Убрана лишняя зависимость от stl классов, таких как std::initializer_list, std::vector и прочего.
[+] - Удален дефайн shadowsyscall_ из ненадобности.

Репозиторий:
[+] - Обновление README
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,500
Реакции[?]
560
Поинты[?]
104K
[+] - Удалены почти все включаемые заголовки, конкретный список:
<Windows.h>
<
vector>
<
cstdint>
<
stdexcept>
std::unordered_map остался как будто бы из принципа; если ребилдить стл то ребилдить стл по черному мне кажется
 
артём диджитал дизайнер
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
489
Реакции[?]
472
Поинты[?]
61K
std::unordered_map остался как будто бы из принципа; если ребилдить стл то ребилдить стл по черному мне кажется
возможно в будущей обнове поставлю вместо std::unordered_map свою реализацию простейшей мапы :seemsgood:
 
Начинающий
Статус
Оффлайн
Регистрация
2 Фев 2022
Сообщения
68
Реакции[?]
14
Поинты[?]
19K
возможно в будущей обнове поставлю вместо std::unordered_map свою реализацию простейшей мапы :seemsgood:
C++:
template <typename key, typename _ty> class unordered_map
{
    private:
        struct value_t
        {
            key m_key;
            _ty m_val;
        };

        value_t* m_map;
        uint32_t m_size;

    public:
        __forceinline unordered_map()
        {
            m_map = nullptr;
            m_size = 0;
        }

        __forceinline bool empty()
        {
            return m_size == 0;
        }

        __forceinline bool find(key search_key)
        {
            for (uint32_t i = 0; i < m_size; ++i)
            {
                if (m_map[i].m_key == search_key)
                    return true;
            }

            return false;
        }

        __forceinline _ty& operator[](key search_key)
        {
            if (empty())
            {
                m_map = reinterpret_cast<value_t*>(malloc(sizeof(value_t)));
                ++m_size;

                m_map[0].m_key = search_key;
              
                return m_map[0].m_val;
            }

            if (find(search_key))
            {
                for (uint32_t i = 0; i < m_size; ++i)
                {
                    if (m_map[i].m_key == search_key)
                        return m_map[i].m_val;
                }
            }

            m_map = reinterpret_cast<value_t*>(realloc(reinterpret_cast<uintptr_t>(m_map), sizeof(value_t) * ++m_size));

            value_t new_entry{ search_key, _ty {} };

            m_map[m_size - 1] = new_entry;

            return m_map[m_size - 1].m_val;
        }

        __forceinline void shutdown()
        {
            free(m_map);
        }
};
 
rgb(24, 205, 154)
Пользователь
Статус
Оффлайн
Регистрация
9 Фев 2019
Сообщения
282
Реакции[?]
77
Поинты[?]
72K
C++:
template <typename key, typename _ty> class unordered_map
{
    private:
        struct value_t
        {
            key m_key;
            _ty m_val;
        };

        value_t* m_map;
        uint32_t m_size;

    public:
        __forceinline unordered_map()
        {
            m_map = nullptr;
            m_size = 0;
        }

        __forceinline bool empty()
        {
            return m_size == 0;
        }

        __forceinline bool find(key search_key)
        {
            for (uint32_t i = 0; i < m_size; ++i)
            {
                if (m_map[i].m_key == search_key)
                    return true;
            }

            return false;
        }

        __forceinline _ty& operator[](key search_key)
        {
            if (empty())
            {
                m_map = reinterpret_cast<value_t*>(malloc(sizeof(value_t)));
                ++m_size;

                m_map[0].m_key = search_key;
             
                return m_map[0].m_val;
            }

            if (find(search_key))
            {
                for (uint32_t i = 0; i < m_size; ++i)
                {
                    if (m_map[i].m_key == search_key)
                        return m_map[i].m_val;
                }
            }

            m_map = reinterpret_cast<value_t*>(realloc(reinterpret_cast<uintptr_t>(m_map), sizeof(value_t) * ++m_size));

            value_t new_entry{ search_key, _ty {} };

            m_map[m_size - 1] = new_entry;

            return m_map[m_size - 1].m_val;
        }

        __forceinline void shutdown()
        {
            free(m_map);
        }
};
а на кой черт везде пихать __forceinline, разве компилятор сам не оптимизирует?
 
Начинающий
Статус
Оффлайн
Регистрация
24 Окт 2017
Сообщения
52
Реакции[?]
6
Поинты[?]
0
C++:
template <typename key, typename _ty> class unordered_map
{
    private:
        struct value_t
        {
            key m_key;
            _ty m_val;
        };

        value_t* m_map;
        uint32_t m_size;

    public:
        __forceinline unordered_map()
        {
            m_map = nullptr;
            m_size = 0;
        }

        __forceinline bool empty()
        {
            return m_size == 0;
        }

        __forceinline bool find(key search_key)
        {
            for (uint32_t i = 0; i < m_size; ++i)
            {
                if (m_map[i].m_key == search_key)
                    return true;
            }

            return false;
        }

        __forceinline _ty& operator[](key search_key)
        {
            if (empty())
            {
                m_map = reinterpret_cast<value_t*>(malloc(sizeof(value_t)));
                ++m_size;

                m_map[0].m_key = search_key;
             
                return m_map[0].m_val;
            }

            if (find(search_key))
            {
                for (uint32_t i = 0; i < m_size; ++i)
                {
                    if (m_map[i].m_key == search_key)
                        return m_map[i].m_val;
                }
            }

            m_map = reinterpret_cast<value_t*>(realloc(reinterpret_cast<uintptr_t>(m_map), sizeof(value_t) * ++m_size));

            value_t new_entry{ search_key, _ty {} };

            m_map[m_size - 1] = new_entry;

            return m_map[m_size - 1].m_val;
        }

        __forceinline void shutdown()
        {
            free(m_map);
        }
};
что-то странная у тебя реализация хэш таблицы)))
если что unordered_map - это хэш таблица. В ней поиск происходит за O(1), а не за O(n) как у тебя.
В корне неверная реализация. То что у тебя получилось, далеко не то, что именуется unordered_map в stl. Даже идея не та...
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,500
Реакции[?]
560
Поинты[?]
104K
а на кой черт везде пихать __forceinline, разве компилятор сам не оптимизирует?
потенциально делает работу для реверсера/декомпилятора труднее. других причин для абуза форсинлайна я не вижу.
 
Начинающий
Статус
Оффлайн
Регистрация
7 Мар 2023
Сообщения
3
Реакции[?]
0
Поинты[?]
0
Thank you for this library.

Shellcode branch has undefined behavior where across compilations it sometimes cant find export address to common calls like "NtQuerySystemInformation". MASM branch works.
 
Сверху Снизу