![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
всем привет.
ситуация такая: написал античит для онлайн игрушки. античит периодично с сервера запрашивает инфу из БД известных читов(имя_файла + CRC_сумму + текст_заголовка_окна), периодично сканит систему на предмет поиска известных читов, и, если находит - прибивает. это все отлично работает. но попался очень хитрый чит. а хитер он тем, что он доступен в исходниках, т.е. тупая перекомпиляция разными версиями компиляторов тупо произведет exe`шники с разной CRC-суммой. в добавок, в опциях можно самому настраивать/указывать текст заголовка. вопрос: как идентифицировать такой чит? всем спасибо. Это сообщение отредактировал(а) boostcoder - 15.7.2011, 06:51 |
|||
|
||||
ZVano |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: 1 Всего: 4 |
Предположение: контрольная сумма названий экспортируемых функций в верхнем регистре и отсортированых по алфавиту. -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
вариант ![]() а не подскажите случайно, как имена можно извлечь без использования "инструмента" ? Добавлено через 9 минут и 27 секунд хотя... если чит доступен в исходниках, значит набор/имена экспортируемых функций могут часто меняться.. |
|||
|
||||
ZVano |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: 1 Всего: 4 |
Могу дать только направление. Нужно прочитать таблицу импорта из заголовка PE -файла. Тут исходник. Тут поисковый запрос гугла. -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
спасибо. ушел читать.
Добавлено через 28 секунд может кто-то подкинет еще какую-то идею... |
|||
|
||||
ASMatic |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
количество\относительное расположение окон(дочерных)...
С импортом - не особо хорошо считать контрольную сумму, я бы проверял на наличие некоторых ключевых импортируемых фунок + окна(например) - если все сошлось 99% что можно бить) Но это все ничего не даст - до сраки, поправили код и уже нету фунок в импорте = поможет вам только ядро и неплохая логика, дабы читу не дать открыть процесс и т.п. в2. - инжект во все создаваемые процессы и там уже перехват NtOpenProcess(), NtWriteVirtualMemory, etc = опять таки можно на ваши перехваты забить) Вот сорс на си, почти что вам нужно...(по поводу импорта)
Это сообщение отредактировал(а) ASMatic - 15.7.2011, 23:06 |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
||||
|
||||
ASMatic |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
||||
|
||||
Dik0n |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 11.5.2011 Репутация: 1 Всего: 10 |
такая защита только от пионеров, даже если написать драйвер хукающий эти и другие функции, что мешает заинжектить свою DLL в игру и работать изнутри процесса, в общем способов море, обхода всяческих защит. Защита Frost еще как-то справляется, да и то ее переодически нагибают, хотя ее разрабатывают действительно профессионалы своего дела.
Увы, что правда то правда.
Наверное так-же, как это делают антивирусные программы ![]() --------------------
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ◄◄◄ Сотри монеткой защитный слой |
||||||
|
|||||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
boostcoder, если есть исходники чита, нужно копать их.
Там к чему нибудь можно наверное прикрепиться. Самое простое - возможно есть какие-то текстовые строки. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
volatile, уже работаю в этом направлении. еще беда(для меня) в том, что чит написан на дельфе
![]() Это сообщение отредактировал(а) boostcoder - 16.7.2011, 00:17 |
|||
|
||||
ASMatic |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
Dik0n, все зависит что и как хучить. Если в ядре строить защиту = можно создать чот вполне приемлимое, но с читами трудно боротся, т.к. юзер сам заинтересован в "трояне")
понятно что от лома нет приёма, тут никто не спорит - но задачка опенсорс чит деактивировать.. |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
В данном конкретном случае это даже лучше. Если бы было на С++, то код очень сильно отличался бы в зависимости от компилятора. А Дельфи - один. И код будет примерно одинаковым. Можно попробовать выделить какую-нибудь сигнатуру ... |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
кстати я не подумал об этом ![]() значит нужно нагуглить как можно больше бинарей этого чита, и каким-то бинарным diff`ом выделить одинаковые участки. и их уже можно анализировать на предмет поиска связи с исходниками. ![]() |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
Ну, да. Как 1 из вариантов можно попробовать ![]() Для сигнатуры в принципе достаточно не очень длинной последовательности. байт 16...32 Антивирусы примерно так работают. Но байты сигнатуры могут идти не подряд. например: C2 BE F3 ?? ?? ?? ?? 01 2A ?? ?? ?? 3E Ну вы меня поняли. Попробуйте.. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |