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

partoftheworlD

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

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

  • Посещение

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

    157

Весь контент partoftheworlD

  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 не имеет никакого отношения к тому что на скрине и не понятно, зачем надо было его приплетать, а на скрине глобальный адрес указывающий на структуру, указатель на которую выделяется в куче, а как происходит выделение? Функция просматривает список занятых/свободных областей памяти, размещённых в куче, в поисках свободной области подходящего размера; В случае нехватки свободной памяти может запросить дополнительную память у ОС; Добавляет найденную область в список занятых областей (или помечает область как занятую); Возвращает указатель на начало области памяти; Записывает данные по этому указателю.
  16. partoftheworlD

    Cheat Engine 7.0 Beta

    RC3: https://cheatengine.org/download/beta/08132019/CheatEngine70RC3.exe
  17. partoftheworlD

    Отладка сайта на iOS

    Тогда это очень странно. Вот все что делал от установки до подключения, вне видео открываю сайты в Safari.
  18. partoftheworlD

    Отладка сайта на iOS

    Глупый вопрос, но все же на Inspect нажимал, который под Target?
  19. partoftheworlD

    Отладка сайта на iOS

    В настройках Safari включен Web Inspector?
  20. partoftheworlD

    Отладка сайта на iOS

    На винде вообще не стоит ничего отлаживать(горький опыт), когда-то надо было сайт отладить, делал по этой статье на убунте в виртуалке. https://medium.com/@nikoloza/how-to-debug-remote-ios-device-using-chrome-devtools-f44d697003a7 Все работало. До сих пор работает.(без джейлбрейка)
  21. partoftheworlD

    Отладка сайта на iOS

    а debugserver не подходит, тот что в статье? Я его специально приложил, чтобы не надо было шаманить с виртуалкой.
  22. Однажды я уже рассказывал как обойти проверку целостности руками, но это долго, нудно, да и кому вообще надо?! Для начала необходимые утилиты: x64dbg, CrySearch/CE, любой компилятор. Нашли адрес отвечающий за патроны, ставим на него бряк на запись, выходим на пишущую инструкцию, ставим бряк на доступ размером 1 байт в памяти на эту инструкцию и ждем срабатывания. После срабатывания в заголовке x64dbg будет написан ID потока. Переходим во вкладку "Потоки", здесь нам необходим только адрес начала: Теперь переходим к автоматизации, вся суть этого обхода в получении всех потоков и сравнении адреса начала, т.е если адрес начала равен 0x7FF730E2449D, то убиваем поток. Вот и весь обход. if (reinterpret_cast<DWORD64>(thread->Win32StartAddress) == (reinterpret_cast<DWORD64>(mainModule) + 0x4490)) { HANDLE hThread = OpenThread(THREAD_TERMINATE, FALSE, threadId); TerminateThread(hThread, 1); CloseHandle(hThread); } 0x4490 это относительный виртуальный адрес адреса начала потока.
  23. Реверсить. Имея размер пакета, можешь найти участок кода, который вычисляет размер пакета, имея участок кода для вычисления пакета, можешь найти функцию, которая формирует пакет.
×

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

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