partoftheworlD
-
Постов
2 687 -
Зарегистрирован
-
Посещение
-
Победитель дней
172
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные partoftheworlD
-
-
14 минут назад, Xhayla сказал:
а откуда Вы взяли значение INS_SIZE = 10, почему 10?
10 байт размер инструкций, но защита все равно поставится на весь регион памяти.
14 минут назад, Xhayla сказал:в конце нужно будет возвращаться на оригинал?
Да, хотя не уверен, проблем не должно быть, ведь по идее ведь код одинаковый везде будет, но желательно вернуть управление оригинальному коду.
-
26 минут назад, Xhayla сказал:
@partoftheworlD, Жду, очень нужно, 2 день в тупике, сперва пробовал на игре, ничего не получалось, потом подумал, неужели вообще не работает, решил ТУПА попробовать на приложение где 3 строчки когда, ЦИКЛ - СООБЩЕНИЕ - ЗАДЕРЖКА, даже тут не получилось... Вы хорошо знаете C++?
Думаю подставить вместо &value адрес указывающий на копию куска памяти не составит труда.
26 минут назад, Xhayla сказал:Вы хорошо знаете C++?
Нет
- 1
-
2 часа назад, Xhayla сказал:
Я хочу понять, как делается PageGuard Hooking на C++, а это программа просто для проверка, работает или нет.
По тому коду, который ты используешь оно даже работать не будет. Сейчас код напишу и закомментирую.
-
7 часов назад, Xipho сказал:
Это тоже можно отреверсить
Было бы интересно про это более подробное узнать. Просто мне кажется, что даже если отреверсишь алгоритм генерации хеша для проверки, в любом случае придется его брутить, чтобы найти пароль. Ладно, можно обойти проверку хеша, чтобы открыть контейнер, но если в нем все файлы упакованы архиватором и запаролены, то без пароля и делать нечего.
-
13 минут назад, Xhayla сказал:
Изначально код который Вы мне написали был рассчитан на DLL?
нет, это код из обработки исключений отладчиком.
13 минут назад, Xhayla сказал:Изначально мне нужен был аналог функции StealthEdit на CE
Почему бы просто не убивать поток с проверкой целостности?
Вроде так, думаю переписать на C++ не составит труда тут все тоже самое за исключением скобок
Спойлерif WaitForDebugEvent(&lpDebugEvent,INFINITE): h_thread = open_thread(lpDebugEvent->dwThreadId) context = get_thread_context(h_thread) if lpDebugEvent->dwDebugEventCode == EXCEPTION_DEBUG_EVENT: exception = lpDebugEvent->Exception->ExceptionRecord->ExceptionCode exception_address = lpDebugEvent->Exception.ExceptionRecord->ExceptionAddress if exception == EXCEPTION_GUARD_PAGE: print "Guard page" elif exception == EXCEPTION_SINGLE_STEP: print "Single Stepping." ContinueDebugEvent( lpDebugEvent->dwProcessId, lpDebugEvent->dwThreadId, DBG_CONTINUE )
-
11 минут назад, Xhayla сказал:
UnhandledExceptionFilte в другой вообще никак нельзя?
Можно отлавливать события с помощью WaitForDebugEvent, после открывать поток при срабатывании события, через хендл потока можно получить его контекст со всеми регистрами, а дальше все как в коде. Сейчас пример накатаю.
-
5 часов назад, Xhayla сказал:
еще там аргумент pExceptionInfo, что нужно туда указывать?
EXCEPTION_POINTERS* pExceptionInfo4 часа назад, Xhayla сказал:почему не работает
Без понятия, ведь ты не указал какую ошибку выдает твой код или какое поведение у кода, что говорит отладчик?
Если так с ходу, то не работает потому, что где-то ошибка или не правильный отлов исключения.UnhandledExceptionFilter вообще написан странно у тебя в коде и не будет ничего отлавливать.
Кусок кода с подменой адресов должен быть примерно такой.
СпойлерLONG WINAPI UnhandledExceptionFilter(EXCEPTION_POINTERS *pExceptionInfo) { if(pExceptionInfo->ExceptionRecord->ExceptionCode == UNK) //или if(pExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_GUARD_PAGE_VIOLATION) { if(pExceptionInfo->ExceptionRecord->ExceptionAddress == (DWORD)GetModuleHandle("Game.dll")+0x13163B) { pExceptionInfo->ContextRecord->Eip = (DWORD)address; return EXCEPTION_CONTINUE_EXECUTION; } } return EXCEPTION_CONTINUE_SEARCH; }
-
40 минут назад, Xhayla сказал:
CopyGame(тут хранится начало скопированного модуля) + 0x13163B
CopyGame(тут хранится начало скопированного модуля) + 0x13263B, возможно не учитывается заголовок.
-
2 часа назад, DabBoGame сказал:
В с++ для проверки железа, прописал чтобы, после совпадения железа, открывался чит.
По правде, это бесполезная защита, которая защитит, разве что от школьников увидевших впервые отладчик.
Лучше использовать шифрованный с помощь ключа контейнер, где ключ состоит из соли + железа, который сверяет ключ по хешу, например тому же SHA-1, а файлы сжаты каким-нибудь lzma2 с ключом.
В 19.08.2019 в 20:18, DabBoGame сказал:Буду благодарен, если кто-то в комментариях напишет небольшой отрывок кода как это сделать.
https://www.codeproject.com/Tips/5098831/Reading-Compressed-LZMA-Files-on-the-fly-using-a-C
-
В 18.08.2019 в 16:27, nRaiver сказал:
а судя по скрину из CE, то "client.dll" находится далеко за адресным пространством игры.
Может для начала стоит изучить основы и прочитать про динамическое выделение памяти? ASLR не имеет никакого отношения к тому что на скрине и не понятно, зачем надо было его приплетать, а на скрине глобальный адрес указывающий на структуру, указатель на которую выделяется в куче, а как происходит выделение?
- Функция просматривает список занятых/свободных областей памяти, размещённых в куче, в поисках свободной области подходящего размера;
- В случае нехватки свободной памяти может запросить дополнительную память у ОС;
- Добавляет найденную область в список занятых областей (или помечает область как занятую);
- Возвращает указатель на начало области памяти;
- Записывает данные по этому указателю.
-
-
Только что, Vlad2 сказал:
Да?
Тогда это очень странно. Вот все что делал от установки до подключения, вне видео открываю сайты в Safari.
-
4 минуты назад, Vlad2 сказал:
Конечно, иначе бы даже адреса вкладок не отображались
Глупый вопрос, но все же на Inspect нажимал, который под Target?
-
1 час назад, Vlad2 сказал:
Не понимаю что я делаю не так
В настройках Safari включен Web Inspector?
-
1 час назад, Vlad2 сказал:
error.iosAdapter.getTargets.getDeviceVersion.failed.fallback, device=[object Object]
На винде вообще не стоит ничего отлаживать(горький опыт), когда-то надо было сайт отладить, делал по этой статье на убунте в виртуалке.
https://medium.com/@nikoloza/how-to-debug-remote-ios-device-using-chrome-devtools-f44d697003a7
Все работало.50 минут назад, partoftheworlD сказал:Все работало.
До сих пор работает.(без джейлбрейка)
- 1
-
15 часов назад, Vlad2 сказал:
Виртуалка не ставится) иначе такой вопрос не возник бы)
а debugserver не подходит, тот что в статье? Я его специально приложил, чтобы не надо было шаманить с виртуалкой.
-
11 минут назад, Alex2411 сказал:
при создание структуры как задать тип значений структуры ?
Использовать Reclass
-
-
5 часов назад, TheErel сказал:
я не знаю что с этим делать, ну тоже хорошо.
Реверсить. Имея размер пакета, можешь найти участок кода, который вычисляет размер пакета, имея участок кода для вычисления пакета, можешь найти функцию, которая формирует пакет.
-
3 часа назад, Japonamat сказал:
Можешь помочь с таким скриптом?
addr = 0x1581500 result = readInteger(addr) print(string.format('[0x%x] = %d', addr, result)) for i = 0x01, 0xFFFFFFFF do writeInteger(addr, i) --print(string.format('%d written at address 0x%x', i, addr)) end
Спойлер- 1
-
2 часа назад, Japonamat сказал:
Можно ли с помощью Cheat Engine автоматизировать процесс?
Да, напиши обычный CE скрипт запихни туда цикл и перебирай в отдельном потоке. Если не хочется возиться с asm, используй lua.
-
18 часов назад, C4ke сказал:
WorldPTR
\x48\x8B\x05\x00\x00\x00\x00\x45\x00\x00\x00\x00\x48\x8B\x48\x08\x48\x85\xC9\x74\x07
-
Отличная попытка, ФСБ.
- 2
-
Page Guard Hooking на С++
in Высокоуровневое программирование
Опубликовано
Лучше так вообще не делать, а отлавливать исключения и делать возврат на оригинал сразу как копия становится не нужной, чем скорее управление вернется в оригинальный код тем лучше.
Чтобы посчитать адрес возврата достаточно воспользоваться стеком, например так, сразу перед записью нового EIP.