Исходник Shadow_syscall | C++20 Syscalls & Runtime DLL Utils

Гуд темка, в будущем можешь добавить спуф калл стека либо индирект вызов как
Пожалуйста, авторизуйтесь для просмотра ссылки.
чтоб прям вообще ваааай, но это больше к хакингу относится :roflanEbalo:
 
Последнее редактирование:
Гуд темка, в будущем можешь добавить спуф калл стека либо индирект вызов как
Пожалуйста, авторизуйтесь для просмотра ссылки.
чтоб прям вообще ваааай, но это больше к хакингу относится :roflanEbalo:
спасибо
по поводу коллспуфера и прочей шняги - репозиторий больше для ознакомления с сисколлами как таковыми, ну и офк для стабильного, простого и удобного использования. при желании это всё довольно просто можно модифицировать под себя
 
  • Мне нравится
Реакции: mj12
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 вместо нулл передать, все ок ща
 
Последнее редактирование:
проверил, даже так не работает, только теперь не ERROR_ACCESS_DENIED возвращает, а 0 и поток просто не создается
upd забыл в flags nullptr вместо нулл передать, все ок ща
нихуя се, а в чём разница в поведении нуллптр и буквально нулевого инта
 
нихуя се, а в чём разница в поведении нуллптр и буквально нулевого инта
Буквально нужно читать прежде чем щитпостить
 
Обновлено.

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

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

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

Репозиторий:
[+] - Обновление README
 
[+] - Удалены почти все включаемые заголовки, конкретный список:
<Windows.h>
<
vector>
<
cstdint>
<
stdexcept>
std::unordered_map остался как будто бы из принципа; если ребилдить стл то ребилдить стл по черному мне кажется
 
std::unordered_map остался как будто бы из принципа; если ребилдить стл то ребилдить стл по черному мне кажется
возможно в будущей обнове поставлю вместо std::unordered_map свою реализацию простейшей мапы :seemsgood:
 
возможно в будущей обнове поставлю вместо std::unordered_map свою реализацию простейшей мапы :seemsgood:
C++:
Expand Collapse Copy
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);
        }
};
 
C++:
Expand Collapse Copy
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, разве компилятор сам не оптимизирует?
 
C++:
Expand Collapse Copy
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. Даже идея не та...
 
а на кой черт везде пихать __forceinline, разве компилятор сам не оптимизирует?
потенциально делает работу для реверсера/декомпилятора труднее. других причин для абуза форсинлайна я не вижу.
 
  • Фейспалм
Реакции: sove
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.
 
Назад
Сверху Снизу