Перейти к содержанию
Авторизация  
Xhayla

StealthEdit на C++\C#

Рекомендуемые сообщения

Всем привет, многие знаю что есть плагин для CE под названием StealthEdit, так вот, как это сделать на С++\C#, очень хочется посмотреть как все это делается на любом из этих языков, возможно уже есть готовые функции на форуме, но я пытался поискать, увы ничего не нашел :(,может кто поделится, буду безмерно благодарен.:unsure:

Изменено пользователем Xhayla

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Находишь адрес нужного участка памяти по которому находится место инжекта

2. Делаешь копию этого участка

3. Перенаправляешь оригинальный участок памяти на копию за счет изменения EIP/RIP.

Спойлер

DWORD OldProt = 0;
SYSTEM_INFO system_info = { 0 };
GetSystemInfo(&system_info);
VirtualProtect(reinterpret_cast<void*>(<оригинальный адрес>), system_info.dwPageSize, PAGE_EXECUTE | PAGE_GUARD, &OldProt);
 
LONG WINAPI UnhandledExceptionFilter(EXCEPTION_POINTERS *pExceptionInfo)
{
    if (pExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_GUARD_PAGE_VIOLATION && pExceptionInfo->ContextRecord->Eip == <оригинальный адрес>)
    {
        pExceptionInfo->ContextRecord->Eip = reinterpret_cast<DWORD>(CopyAddress);   
        pExceptionInfo->ContextRecord->EFlags |= 0x100;     
        return EXCEPTION_CONTINUE_EXECUTION;
    }
     
    if (pExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_SINGLE_STEP)
    {
        DWORD OldProt = 0;
        SYSTEM_INFO system_info = { 0 };
        GetSystemInfo(&system_info);
        VirtualProtect(reinterpret_cast<void*>(<оригинальный адрес>), system_info.dwPageSize, PAGE_EXECUTE | PAGE_GUARD, &OldProt);
        return EXCEPTION_CONTINUE_EXECUTION;
    }     
    return EXCEPTION_CONTINUE_SEARCH;
}

 

4. Делаешь с копией все что угодно.

 

или можешь просто убить проверку.

 

  • Плюс 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 минут назад, partoftheworlD сказал:

1. Находишь адрес нужного участка памяти по которому находится место инжекта

2. Делаешь копию этого участка

3. Перенаправляешь оригинальный участок памяти на копию за счет изменения EIP/RIP.

Первый три пункта, это и есть код который Вы мне дали?

 

 

16 минут назад, partoftheworlD сказал:

4. Делаешь с копией все что угодно.

Адрес уже скопированного участка, находится в "OrigCopy"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Xhayla сказал:

Первый три пункта, это и есть код который Вы мне дали?

Нет, только 3-й пункт, остальное сам.

 

Только что, Xhayla сказал:

Адрес уже скопированного участка, находится в "OrigCopy"?

Да

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
36 минут назад, partoftheworlD сказал:

1. Находишь адрес нужного участка памяти по которому находится место инжекта

DWORD_PTR Function = (DWORD_PTR)GetProcAddress(GetModuleHandle("USER32.dll"), "MessageBoxA");

 

38 минут назад, partoftheworlD сказал:

2. Делаешь копию этого участка

:unsure: А как скопировать?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Xhayla сказал:

А как скопировать?)

malloc и memcpy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, Xipho сказал:

malloc и memcpy

Спойлер

static DWORD_PTR mFunction = (DWORD_PTR)GetProcAddress(GetModuleHandle("USER32.dll"), "MessageBoxA");
int len = sizeof(mFunction);
LPSTR origCopy = (LPSTR)malloc(len);
memcpy(origCopy, &mFunction, len);

 

Верно ли?

Изменено пользователем Xhayla

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 минут назад, Xhayla сказал:

Верно ли?

Нет. Ты получишь размер указателя с помощью sizeof, а не размер всей функции

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спойлер

static DWORD_PTR mFunction = (DWORD_PTR)GetProcAddress(GetModuleHandle("USER32.dll"), "MessageBoxA");
LPSTR STRC = strchr(mFunction, '.');
int len = STRC - mFunction;
LPSTR origCopy = (LPSTR)malloc(len);
memcpy(origCopy, &mFunction, len);

 

 

Изменено пользователем Xhayla

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.