Перейти к содержанию

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

Всем привет, многие знаю что есть плагин для 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: А как скопировать?)

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

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
Ссылка на комментарий
Поделиться на другие сайты

Спойлер

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
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

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