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

partoftheworlD

Помогаторы
  • Публикаций

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

  • Посещение

  • Победитель дней

    157

partoftheworlD стал победителем дня 18 августа

partoftheworlD имел наиболее популярный контент!

Репутация

779 Advanced Gamehacker

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

  • Звание
    инженер проектирующий свалки

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

11387 просмотров профиля
  1. Да, это странно, потому что, вчера когда писал пример проверял на скайриме никаких проблем не было, фпс не просаживал, все так же плавно было. Могу предположить, что проблема в алгоритме, либо в самой игре, возможно у неё есть собственный обработчик исключений, который что-то с ними делает. И наверное было бы лучше просто убить эту защиту. Способ с asm вставками не будет работать если игра x64
  2. Возможно, это подойдет. На счет VirtualProtect не уверен, но вроде он здесь нужен.
  3. Да, но не настолько медленный, так же еще зависит от того сколько кода вторая часть обработчика проверяет(которая SINGLE STEP). Явно, если пошаговая отладка будет работать для 10000 инструкций в поиске той самой на которую повешен хук, то быстродействия ждать не стоит.
  4. Хоть тысячу, хук работает как в CE, главное чтобы состояние измененных регистров не приводило к крашу. Это не так работает, советую посмотреть основы о том как работает стек. Да
  5. Лучше так вообще не делать, а отлавливать исключения и делать возврат на оригинал сразу как копия становится не нужной, чем скорее управление вернется в оригинальный код тем лучше. Чтобы посчитать адрес возврата достаточно воспользоваться стеком, например так, сразу перед записью нового EIP. jmp_original = (DWORD)(pExceptionInfo->ContextRecord->Esp);
  6. 10 байт размер инструкций, но защита все равно поставится на весь регион памяти. Да, хотя не уверен, проблем не должно быть, ведь по идее ведь код одинаковый везде будет, но желательно вернуть управление оригинальному коду.
  7. https://pastebin.com/4tXXM0av Думаю подставить вместо &value адрес указывающий на копию куска памяти не составит труда. Нет
  8. По тому коду, который ты используешь оно даже работать не будет. Сейчас код напишу и закомментирую.
  9. Было бы интересно про это более подробное узнать. Просто мне кажется, что даже если отреверсишь алгоритм генерации хеша для проверки, в любом случае придется его брутить, чтобы найти пароль. Ладно, можно обойти проверку хеша, чтобы открыть контейнер, но если в нем все файлы упакованы архиватором и запаролены, то без пароля и делать нечего.
  10. нет, это код из обработки исключений отладчиком. Почему бы просто не убивать поток с проверкой целостности? Вроде так, думаю переписать на C++ не составит труда тут все тоже самое за исключением скобок
  11. Можно отлавливать события с помощью WaitForDebugEvent, после открывать поток при срабатывании события, через хендл потока можно получить его контекст со всеми регистрами, а дальше все как в коде. Сейчас пример накатаю.
  12. EXCEPTION_POINTERS* pExceptionInfo Без понятия, ведь ты не указал какую ошибку выдает твой код или какое поведение у кода, что говорит отладчик? Если так с ходу, то не работает потому, что где-то ошибка или не правильный отлов исключения. UnhandledExceptionFilter вообще написан странно у тебя в коде и не будет ничего отлавливать. Кусок кода с подменой адресов должен быть примерно такой.
  13. CopyGame(тут хранится начало скопированного модуля) + 0x13263B, возможно не учитывается заголовок.
  14. По правде, это бесполезная защита, которая защитит, разве что от школьников увидевших впервые отладчик. Лучше использовать шифрованный с помощь ключа контейнер, где ключ состоит из соли + железа, который сверяет ключ по хешу, например тому же SHA-1, а файлы сжаты каким-нибудь lzma2 с ключом. https://www.codeproject.com/Tips/5098831/Reading-Compressed-LZMA-Files-on-the-fly-using-a-C
  15. Может для начала стоит изучить основы и прочитать про динамическое выделение памяти? ASLR не имеет никакого отношения к тому что на скрине и не понятно, зачем надо было его приплетать, а на скрине глобальный адрес указывающий на структуру, указатель на которую выделяется в куче, а как происходит выделение? Функция просматривает список занятых/свободных областей памяти, размещённых в куче, в поисках свободной области подходящего размера; В случае нехватки свободной памяти может запросить дополнительную память у ОС; Добавляет найденную область в список занятых областей (или помечает область как занятую); Возвращает указатель на начало области памяти; Записывает данные по этому указателю.
×

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

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