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

Xhayla

Пользователи
  • Публикаций

    44
  • Зарегистрирован

  • Посещение

Репутация

0 Навыки не прокачены

Информация о Xhayla

  • Звание
    Продвинутый пользователь

Посетители профиля

383 просмотра профиля
  1. Спасибо, если не сложно, скажите пожалуйста, я изменяю Protect памяти на нужный мне, но, я указываю 5 байт, а он изменят защиту на всей странице, можно ли сделать так, чтобы он изменял защиту только 5 байт, которые я указал. Если нет, то как программно узнать с какого адреса он изменил защиту? VirtualProtect(reinterpret_cast<void*>(from_addr), 5, PAGE_EXECUTE_READWRITE | PAGE_GUARD, &dwOld);
  2. Получаю нужные мне адреса. DWORD from_addr = (DWORD)GetModuleHandle(L"Game.dll") + 0x36143B; DWORD jmp_original = (DWORD)GetModuleHandle(L"Game.dll") + 0x361440; В массив jmp записываю адрес прыжка обратно jmp_original, в оригинальный код. BYTE jmp[5] = { 0xE9 }; memcpy(jmp + 1, (const void*)jmp_original, 4); Далее выделяю память в размере 10 байт. 5 байт для нужной мне инструкции + 5 дня прыжка обратно. DWORD alloc_addr = (DWORD)malloc(10); // выделяю память. memcpy((void*)alloc_addr, (void*)from_addr, 5); // в первые 5 байт выделенной памяти записываю инструкцию размером 5 байт из оригинала. memcpy((void*)(alloc_addr + 0x5), (void*)&jmp, 5); // в оставшиеся 5 байт, записываю адресс прыжка обратно. После инъекции DLL в процесс, нахожу выделенную память, в итоге нужная инструкция скопировалась нормально, а вот прыжок обратно указывает совсем на другой адрес. СКРИНШОТ ИЗ CE выделенной памяти
  3. Нашел как в видео инструкцию проверяющую нужный мне адрес, зашел в x64dbg(x86) в "Карта памяти" нашел его, ставлю бряк на доступ 1 байт, снимаю паузу с игры, он показывает поток основной. Разумеется если убить основной - краш игры будет.
  4. @partoftheworlD, а как получить список всех потоков в чужом приложении?
  5. Пробовал с помощью кода выше с копии прыгнуть обратно на оригинал, не получилось. (У меня:) )
  6. код который Вы скинули мне выше, это для того чтобы с копии прыгать в нужный мне адрес?
  7. Игра называется Warcraft 3 TFT, возможно в CE StealthEdit это реализовано по другому.
  8. А хотя если подумать, есть ли смысл копировать из оригинального адреса байты в выделенную память, потом оттуда прыгать на оригинальный код, если Вы( @partoftheworlD ), показали другой способ. Просто при срабатывании нужного хука, буду переводить туда оригинальный код. pExceptionInfo->ContextRecord->Eip = reinterpret_cast<DWORD>(&patch); Вот только странно, почему в CE когда изменяешь байты через StealthEdit, игры не зависает и не идет рывками, а через PugaGuard на С++ наоборот, зависает. Хотя и там и там тот же адрес хукается.
  9. Мне нужно из копии в конце прыгнуть на вот этот адрес 0x6F361395, то-есть чтобы в копии был оригинальные байты + прыжок обратно.
  10. @partoftheworlDя Вас уже замучал 😅, скажите пожалуйста. Как вписать в copyAddress, чтобы от туда в конце прыгать на оригинальный код, а именно на jmp_back.
  11. Ну смотрите, я изменил INS_SIZE с 10 на 5. А в value вписал следующий код - Ну и конечно же поменял адреса начала прыжка и обратный прыжок, странно почему он так зависает.(Если что адрес прыжка состоит из 5 байт, поэтому в INS_SIZE вписал 5). То-есть, если выше адреса, который жду в исключении, будет очень много инструкций будет - зависать? Насколько я понимаю, там где вешается Protect: PAGE_GUARD он тоже будет отлавливаться, тогда как сделать так, чтобы VirtualProtect ставил PAGE_GUARD только на те кол-во байт, которые я указал, а не на всю страницу, можно ли с этим что-то сделать? Ведь в CE не виснет как тут, хотя он там тоже выставляет на всю страницу PAGE_GUARD.
  12. @partoftheworlD, еще раз огромное спасибо Вам, все получилось, переделал когда под игру, изменил адрес прыжка и адрес возврата, так же код изменил на нужный, вот только тут проблема, игра стала зависать, fps упал до 30 и начал идти рывка, в меню игры все хорошо, но как только игра начинается, сразу начинает идти рывками что-ли, не связано ли это с тем, что PageGuard Hooking сам по себе медленный? Поскольку в виндовс на отлов исключений нужно какое-то время.
  13. и сразу после того как копия выполнится, прыгнуть в jml_original? Если к примеру у меня копия не 1 инструкция, а к примеру 1000 строк, если прыгнуть в jmp_original он все равно в правильный адрес прыгнет? Как у Вас в видео, Вы сперва из 0x0042578C прыгаете на свою функцию, после возвращаетесь на 2 инструкцию после 0x0042578C, а если к примеру, прыгать из 0x0042578C и выполнять 5 инструкций, чтобы правильно приземлиться после хука, нужно jmp_original так вычислять - jpm_original = (DWORD)(pExceptionInfo->ContextRecord->Esp + 5; ? На счет защиты, как только мне перестанет быть нужен ХУК, нужно вернуть старую защиту и снять отлов исключений?
  14. К примеру у меня есть участок скопированного кода, размером 300 байт, я перевожу код на копию, и в конце чтобы вернутся нужно к оригинальному адресу прибавить 300(размер копии оригинала) + 1(след инструкция), верно?
  15. @partoftheworlD, огромное спасибо, а откуда Вы взяли значение INS_SIZE = 10, почему 10? А еще, если я вместо value() укажу адрес указывающий на копию памяти, после того код ее выполнит, в конце нужно будет возвращаться на оригинал?
×

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

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