Сейчас на форуме: subword, rtsgreg1989, zds (+9 невидимых) |
![]() |
eXeL@B —› Основной форум —› Универсальный UnWrapper для игр |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 09 апреля 2008 20:53 · Поправил: geograph · Личное сообщение · #1 Универсальный UnWrapper для игр. В последнее время очень популярными стали небольшие логические игры от Reflexive, Alawar, LoloGames, NevoSoft и др. Объясняется это, на мой взгляд, тем, что игрушки эти относительно небольшие, что позволяет скачивать их большому количеству пользователей, порой даже интересные, а так же они являются хорошим способом убить время, сидя дома, а особенно на работе ![]() Сегодня мы попробуем взломать некоторые из этих игрушек, а также написать для них универсальный кряк. Практически все эти игры используют для защиты, так называемый wrapper. Под эти словом подразумевается программа, которая из себя запускает одну или несколько других программ. В данном случае, имеется файл игры (.rwg – в Reflexive, .wrp или .wrp.exe – в Alawar), который специально поврежден и при обычном запуске выдает ошибку или просто не запускается. Wrapper запускает этот файл и уже в памяти восстанавливает байты необходимые для работоспособности файла. Для того, чтобы убрать этот wrapper совсем, оставив только саму игру, нам нужно узнать куда и какие байты записываются. Reflexive. Начнем с игр от Reflexive. В примере будет использована игра Astrobatics, но вы можете взять любую другую (т.к. принцип один и тот же) или вообще ничего не брать, а просто посмотреть, что у меня получилось ;) И так берем отладчик (я взял OllyDbg) и запускаем из под него Astrobatics.exe. Ставим бряк на CreateProcess, т.к. именно эта функция используется для запуска файла игры: bp CreateProcessA Нажимаем F9 (Debug>Run) появляется окно для запуска игры, где показано сколько нам осталось играть. Кстати забыл сказать, что для успешного взлома у Вас должна остаться хотя бы минута времени ![]() И так нажимаем “Play Game” и оказываемся в отладчике. Нажимаем Ctrl-F9 (Debug>Execute till return) пока не окажемся в основном модуле (в строке заголовка должно быть написано “module Astrobat”). Тут видим, что открывается процесс (OpenProcess) и из него читаются данные (ReadProcessMemory). Трейсим программу по F8 до ReadMemory попутно запоминаем/записываем адрес буфера (Buffer), куда читаются данные, и размер буфера (BytesToRead). У меня Buffer = 0A30910, а BytesToRead = 3C. Теперь откроем буфер в дампе: d 0A30910 Сейчас можно выделить это дело от 0A30910 до 0A30910+3C и куда-нибудь скопировать, чтобы потом по этим данным найти место в файле куда пишутся данные, но это делать не обязательно, т.к. адрес в файле можно было увидеть выше (pBaseAddress) хотя и его запоминать не обязательно, т.к. данные записываются с точки входа (EntryPoint). Дальше по коду идет расшифровка прочитанных байт. Это все можно пропустить и поставить бряк на функцию записи в процесс (WriteProcessMemory), которая находится чуть ниже. Теперь жмем F9 (Debug>Run), проходим WriteProcessMemory и видим в нашем буфере (0A30910) уже расшифрованные данные, те самые, которые мы должны записать в файл. Выделяем их в дампе от 0A30910 до 0A30910+3C и копируем (Binary>Binary Copy). Теперь можно используя любой HEX-редактор открыть наш .RWG-файл, начиная с точки входа записать эти данные. А можно прямо здесь, используя OllyDbg: после того как скопировали буфер, открываем в отладчике .RWG-файл, после загрузки курсор должен стоять на точке входа, если в настройках не указано иное. У меня он равен 491AB4, переходим по этому адресу в дампе: d 491AB4 Выделяем байты от 491AB4 до 491AB4+3C (размер данных) и вставляем то, что было скопировано (Binary>Binary Paste). Теперь нужно это дело сохранить – в контекстном меню дампа, выбираем “Copy to executable file” откроется наш файл, там в контекстном меню выбираем “Save File” и сохраняем его под новым именем например Astrobatics_new.exe. Теперь если все сделано верно, игра должна работать ![]() Можно взломать проще пропатчив 2 байта в самом wrapper’е, там где проверка на регистрацию. Открываете оригинальный .EXE в любом HEX-редакторе и ищите последовательность байт: 84 C0 74 0E 8B CE Что соответствует командам: test eax,eax je XXXXXXXX mov ecx,esi Заменяем это на 84 C0 90 90 8B CE Т.е. убираем переход. Должно работать, правда теперь после закрытия игры Вы будете лицезреть окошко с благодарностями за регистрацию ![]() Как реализовать данный unwrapper в программе Вы можете увидеть обратившись к исходникам в конце статьи. Alawar. Теперь возьмемся за игры от Alawar. Я буду ковырять игру «Маленькие бомберы возвращаются», принцип тот же самый, правда wrapper защищен ASProtect’ом и не поддается автораспаковщику Stripper. Ну что же, снимем дамп с запущенного игрового файла (.WRP или .WRP.EXE) и будем сравнивать с оригиналом. Начнем сравнение с точки входа, точка входа у дампа переместилась несколько ниже, чем у оригинала и содержит следующие команды: push XXXXXXXX; у меня push 004C22F0 ret Программа при запуске сразу же переходит по адресу XXXXXXXX, скорее всего, это оригинальная точка входа. Не будем добавлять переход в .WRP-файл, а просто изменим точку входа на адрес XXXXXXXX отняв ImageBase и посмотрим что получится (в моем случае 4C22F0-400000=C22F0). EntryPoint можно поменять например утилитой PETools. Вуаля, игровой файл запустился!!! (если конечно Вы все правильно сделали и принцип зашиты не поменялся). Вот и вся защита ![]() ![]() ![]() NevoSoft. Ну что же, теперь рассмотрим игры от NevoSoft, я взял “Legends of Pirates”. Здесь все довольно просто. Сама игра находится в папке “game” все остальное, то что снаружи, это файлы наг-скрина и «защиты». Файл игры называется game.dll и находится в папке “game”, если переименовать его в .EXE можно увидеть значок игры, а также увидеть что файл не запускается ![]() ![]() Теперь можно удалить все файлы и папки, которые находятся рядом с папкой “game”, а содержимое папки “game” вынести наружу. Вот, пожалуй, и все. К статье прилагаются исходники unwrapper’а на Си. По идеи unwrapper должен ломать все игры трех вышеприведенных компаний. Исходники писались на скорую руку, поэтому наверняка там есть недочеты, не точности, ошибки, баги, переполнения... В общем, если найдете баги в коде буду очень благодарен, если сообщите об этом мне. Скомпилированный UnWrapper http://coder-club.in/download/unwrapper.rar Исходники http://coder-club.in/download/unwrapper_src.rar by Geograph © 2008 ![]() |
|
Создано: 17 апреля 2008 13:13 · Личное сообщение · #2 |
|
Создано: 17 апреля 2008 18:29 · Личное сообщение · #3 Beitz пишет: У меня не сработал анврапер от доктора карбона ни на Reflexive ни на Game House играх. Возможно, дело в том, что ты выставил маленькие тайминги. По крайней мере не Рефлексиве он работает четко, на Геймхаусе возможны сбои. Kiev78 пишет: Дай ссыль на скачку, штоб я долго не искал. Вот прямой линк gamecenter.oberon-media.com/exe/CaveDays-setup.exe?RefId=&origin=pcat_gm_pl&ext=CaveDays-setup.exe ----- Программист SkyNet ![]() |
|
Создано: 25 апреля 2008 15:27 · Личное сообщение · #4 |
|
Создано: 25 апреля 2008 17:13 · Поправил: Kiev78 · Личное сообщение · #5 |
|
Создано: 26 апреля 2008 12:10 · Личное сообщение · #6 Появился еще один универсальный анвраппер от [KLKS], написанный на C++. Поддерживаются следующие издатели: - Reflexive Arcade - Alawar Games - Playrix - GameHouse - PopCap В аттаче сырцы. ![]() ![]() ----- Программист SkyNet ![]() |
|
Создано: 28 апреля 2008 12:01 · Личное сообщение · #7 |
|
Создано: 03 мая 2008 16:34 · Личное сообщение · #8 Dr. Carbon конвертировал исходники своего анвраппера с асма на C++. В аттаче сырцы + exe-файл. ![]() ----- Программист SkyNet ![]() |
|
Создано: 18 мая 2008 18:33 · Личное сообщение · #9 А зачем мучиться, если можно просто изменить значение в реестре. ![]() Например с вот этой прогой можно бесконечно играть в игры от Alawar ![]() ![]() ![]() |
|
Создано: 18 мая 2008 19:46 · Личное сообщение · #10 |
|
Создано: 18 мая 2008 20:24 · Личное сообщение · #11 |
|
Создано: 18 мая 2008 20:46 · Личное сообщение · #12 Leatherfase пишет: кто нибудь может подсказать с новой защитой игр Невософт,в какую сторону копать? там в самой защите xor-ится часть файла и в зависимости от id враппер разксоривает эту часть. Смотри в сторону SetFileAttributesA, дальше идет сама процедура разксоривания. Анвраппер rapidshare.com/files/112902271/UnWrapper.rar ![]() |
|
Создано: 18 мая 2008 20:52 · Личное сообщение · #13 |
<< . 1 . 2 . |
![]() |
eXeL@B —› Основной форум —› Универсальный UnWrapper для игр |