![]() |
Модераторы: 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 Ну вы меня поняли. Попробуйте.. |
|||
|
||||
boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: нет Всего: 110 |
угу. нужно пробовать.
|
|||
|
||||
Dik0n |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 11.5.2011 Репутация: 1 Всего: 10 |
Ну дак я написал
Так-как в коде присутствуют определенные участки кода, которые не меняются при перекомпиляции, например ключевая функция чита, без которой он не будет работать, главное найти ее и составить сигнатуру. Вывод: берем OpenSource антивирус и ковыряем как там и что... Вот например моя прога с исходниками, можно посмотреть (правда на Delphi), определяет по сигнатурам на чем написана программа или чем упакована. http://my-soft.ucoz.ru/pe_sniffer.html --------------------
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ◄◄◄ Сотри монеткой защитный слой |
|||
|
||||
ASMatic |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
запаковал чемнить безоплатным, выложил на форум и опять ищи сигнатуру = тупая аверская "работа" от которой толку на пол дня.
добавляем WND_CTRL_COMPARE_WND1_LONGER и т.п. (количество окон по типам и т.п. и с какими стилями) + вашу тулзу по определению компалера == делфик?отдыхай_радимый:и пусть те дельфекомпиляторщики поймут что нужно добавить окно на форму дабы детект снять.) |
|||
|
||||
Dik0n |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 11.5.2011 Репутация: 1 Всего: 10 |
ASMatic, Они как раз и поймут так и сделают, потому как любят добавлять всякие кнопки и надписи типа (этот чит сделал мега крутой ламер вася пупкин) да и стили могут подправить графики накидать что-бы круче смотрелось) и это только для отдельного случая а читов то вагон что для каждого свой способ придумывать, тут надо что-то универсальное!!! Это сообщение отредактировал(а) Dik0n - 16.7.2011, 03:00 --------------------
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ◄◄◄ Сотри монеткой защитный слой |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 13 Всего: 85 |
||||
|
||||
ASMatic |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 254 Регистрация: 14.3.2009 Репутация: 1 Всего: 1 |
||||
|
||||
bass |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 315 Регистрация: 5.8.2007 Репутация: 2 Всего: 2 |
А как чит к твоей игрушке обращаеться???? Мне кажеться туда надо копать..... Например если через окошко то менять его название переодически..... Если в код длл инжектит то проверять на список модулей , можно конечно длл внедрить чтоб в списке модулей не торчала(тут пока не чего в голову не приходит...)..... Если создает сокет поковыряться в списке открытых хендолов программы......
|
|||
|
||||
ZVano |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 259 Регистрация: 11.12.2006 Где: Украина, Кривой Р ог Репутация: 1 Всего: 4 |
Действительно, дельный вопрос. Если чит представляется модулем игры (плагином или аддоном), то достаточно встроить систему верификации. Мне видится такой ход событий: 1. Игра грузит плагин-чит 2. Игра инициализирует плагин. 3. Игра идентифицирует плагин 3.1. Игра: Плагин, ты хто? 3.2. Плагин: Я плагин X системы такой то, версии такой то, мой приватный ключ имеет ID Y. 3.3. Игра: Подтверди свой статус. Вот тебе рандомная строка для проверки. 3.4. Плагин: Подтверждение. Вот тебе твоя строка, зашифрованая моим приватным ключем. 3.5. Игра: Такс, посмотрим что нам тут прислали... Берем публичный ключ для плагина X, расшифровываем сообщение, сверяем с первичным... 3.6.1. Игра: проверка успешна: Плагин, проходи. 3.6.2. Игра: проверка неудачна: Таксс... где то у меня были мои любимые бозар и гаусовка... PS: публичные ключи нужно поставлять вкомпиленые в exe. В новых версиях exe следует добавлять невалидные ключи, которые злоумышленники сумели отыскать в бинарнике и использовать в своих читах. PPS: зачем геморится с кючами? Потому что злоумышленнику сложно будет взламывать такую защиту. Попробуйте найти в памяти кусок данных, который соответствует ключику ![]() -------------------- НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению. Гуглим "Как правильно задавать вопросы" |
|||
|
||||
shara |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
boostcoder,
Поддерживаю, сия инфа будет весьма не лишней в процессе выработки коллективного решения проблемы. Еще неплохо было бы услышать в чем именно заключается "читерство"... Игрушка ведь как я понял он-лайн -> значитцо метод аля ArtMoney некатит
А я вот нисагласен ![]() Всевозможные отладчики с реверсинжинирингом никто не отменял. Но соглашусь что многим кулцхакерам такая защита заметно остудит пыл. -------------------- с точки зрения аэродинамики шмель не может летать |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |