Доброго всем дня. Сомневаюсь, что кто-то поможет, но мб кто подкинет годную идейку.
Итак, есть игруха, накрытая фемидой. Защита BlackCypher. После запуска игры, секция кода исполняемого файла расшифровывается и я сразу же просто для теста правлю в нём 1 байт.
Через минут 5 игры меня вышибает, т.е. игра, видимо, через эти 5 минут сканит память, считает CRC и сверяет с каким-то, который лежит где-то (локально, на сервере - не известно).
Вопрос в том, как спалить процесс вычисления чексуммы секции кода?
1. Ставил хуки на NtQueryVirtualMemory (он ведь должен сначала карту памяти составить), NtReadVirtualMemory - нет результата (плюсом я ставил хук на GetProcAddress, чтобы спалить, что возможно Native API дёргаются из какого-то подгруженного клона ntdll)
2. У игрухи есть дочерний процесс, который общается с ней пайпами. Поэтому ставил хук на CreateFileMapping и co, дабы спалить создание разделённой памяти (мб второй процесс следит за чексуммой). По адресу секции кода ничего такого не создаётся.
3. Даже тупо искал по этим двум процессам один и тот же исполняемый код, вдруг они дубликат сверяют - нет такого.
4. В СЕ юзал бряк на чтение/запись того правленного байта. Т.е. при определении чексуммы секции кода, этот байт определённо должен быть прочитан и должен сработать бряк. Нифига подобного.
Вот собственно и всё. Вопросы следующие.. как ещё можно поймать чтение памяти? Как ещё она может осуществляться? В сторону драйвера, кстати, я не смотрел, но вроде она работает без него.
ЗЫ Задача вообще хукнуть одну из внутриигровых функций. И как-то не представляю как это сделать без редактирования секции кода игры.
Последний раз редактировалось dark; 09.08.2019 в 15:15.
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
1. Использование ядерной функции для косвенного чтения памяти
2. Использование драйвера ядра
3. Использование SGX анклава, его исполнение не тригерит бряки
4. Индексы сусколов получаются хз как и потом генерируются собственные трамплины в обход ntdll, это кстати можно зачекать поиском страниц памяти на исполнение но не сопоставленных с загруженными модулями, либо оно переписывает какой-то участок секции кода и это можно попробовать спалить антируткитом который чекает целостность страниц кода.
Кстати не все используют GetProcAddress для поиска функций, обход по функциям может быть реализован самостоятельно.
Могу ошибаться но BlackCypher это вроде аналог Xigncode а там второй процесс и выполнял все проверки и сбор информации.
1. Использование ядерной функции для косвенного чтения памяти
2. Использование драйвера ядра
3. Использование SGX анклава, его исполнение не тригерит бряки
4. Индексы сусколов получаются хз как и потом генерируются собственные трамплины в обход ntdll, это кстати можно зачекать поиском страниц памяти на исполнение но не сопоставленных с загруженными модулями, либо оно переписывает какой-то участок секции кода и это можно попробовать спалить антируткитом который чекает целостность страниц кода.
Кстати не все используют GetProcAddress для поиска функций, обход по функциям может быть реализован самостоятельно.
Могу ошибаться но BlackCypher это вроде аналог Xigncode а там второй процесс и выполнял все проверки и сбор информации.
Таки делает копии ntdll.dll и других библиотек, откуда дёргает нужные api. Так ещё и восстанавливает их в случае правки. Защита понятна, осталось найти решение.
Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.