Xhayla Опубликовано 14 апреля, 2019 Поделиться Опубликовано 14 апреля, 2019 (изменено) Всем привет, многие знаю что есть плагин для CE под названием StealthEdit, так вот, как это сделать на С++\C#, очень хочется посмотреть как все это делается на любом из этих языков, возможно уже есть готовые функции на форуме, но я пытался поискать, увы ничего не нашел ,может кто поделится, буду безмерно благодарен. Изменено 14 апреля, 2019 пользователем Xhayla Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 14 апреля, 2019 Поделиться Опубликовано 14 апреля, 2019 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xhayla Опубликовано 14 апреля, 2019 Автор Поделиться Опубликовано 14 апреля, 2019 15 минут назад, partoftheworlD сказал: 1. Находишь адрес нужного участка памяти по которому находится место инжекта 2. Делаешь копию этого участка 3. Перенаправляешь оригинальный участок памяти на копию за счет изменения EIP/RIP. Первый три пункта, это и есть код который Вы мне дали? 16 минут назад, partoftheworlD сказал: 4. Делаешь с копией все что угодно. Адрес уже скопированного участка, находится в "OrigCopy"? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 14 апреля, 2019 Поделиться Опубликовано 14 апреля, 2019 Только что, Xhayla сказал: Первый три пункта, это и есть код который Вы мне дали? Нет, только 3-й пункт, остальное сам. Только что, Xhayla сказал: Адрес уже скопированного участка, находится в "OrigCopy"? Да Ссылка на комментарий Поделиться на другие сайты Поделиться
Xhayla Опубликовано 14 апреля, 2019 Автор Поделиться Опубликовано 14 апреля, 2019 36 минут назад, partoftheworlD сказал: 1. Находишь адрес нужного участка памяти по которому находится место инжекта DWORD_PTR Function = (DWORD_PTR)GetProcAddress(GetModuleHandle("USER32.dll"), "MessageBoxA"); 38 минут назад, partoftheworlD сказал: 2. Делаешь копию этого участка А как скопировать?) Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 14 апреля, 2019 Поделиться Опубликовано 14 апреля, 2019 2 часа назад, Xhayla сказал: А как скопировать?) malloc и memcpy Ссылка на комментарий Поделиться на другие сайты Поделиться
Xhayla Опубликовано 14 апреля, 2019 Автор Поделиться Опубликовано 14 апреля, 2019 (изменено) 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); Верно ли? Изменено 14 апреля, 2019 пользователем Xhayla Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 14 апреля, 2019 Поделиться Опубликовано 14 апреля, 2019 7 минут назад, Xhayla сказал: Верно ли? Нет. Ты получишь размер указателя с помощью sizeof, а не размер всей функции Ссылка на комментарий Поделиться на другие сайты Поделиться
Xhayla Опубликовано 14 апреля, 2019 Автор Поделиться Опубликовано 14 апреля, 2019 (изменено) Спойлер 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); Изменено 14 апреля, 2019 пользователем Xhayla Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения