Сейчас на форуме: 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 ![]() |
|
Создано: 09 апреля 2008 21:06 · Личное сообщение · #2 |
|
Создано: 09 апреля 2008 21:23 · Личное сообщение · #3 |
|
Создано: 09 апреля 2008 23:12 · Личное сообщение · #4 |
|
Создано: 10 апреля 2008 07:05 · Личное сообщение · #5 |
|
Создано: 10 апреля 2008 17:26 · Поправил: Kiev78 · Личное сообщение · #6 Ты забыл упомянуть про Lolo games (_http://lolo.ru). Я восполню этот пробел (с любезного разрешения). Итак, берем любую подопытную игруху (например Тайна Фараона - _http://lolo.ru/game/TainaPharaona/ - 11,9 MB) Здесь тоже есть исполняемый файл игры (это либо gamedat.bin либо itpegf.dat - может есть и другие названия, я не проверял все игры). И есть враппер (showcase.exe) который запускает игру. Если тупо переименовать файл игры в *.exe и попробовать запустить, то игра запустившись, через секунду закроется. Я заинтересовался защитой на игре и, поизучав ее недельку, я пришел к следующему результату. Сверху файл накрыт пакером (причем в 2 разных слоя!) DiE сообщил - UPX <Modified> , хотя на упх мало похоже (раз есть какая-то защита), антиотладки никакой нет. Итак взглянем в оле на точку входа: 0055F8D0 > 89C2 MOV EDX, EAX <<<Program entry point 0055F8D2 - E9 881FEAFF JMP ittpegf.0040185F переходим по адресу 0040185F: 0040185F 55 PUSH EBP 00401860 8BEC MOV EBP, ESP 00401862 83C4 C8 ADD ESP, -38 00401865 60 PUSHAD 00401866 E8 00000000 CALL ittpegf.0040186B 0040186B 8F45 FC POP DWORD PTR SS:[EBP-4] 0040186E E8 00000000 CALL ittpegf.00401873 00401873 58 POP EAX пролистав один-два экрана вниз видим конец первого распаковщика и переход на второй распаковщик: 0040197E ^\75 E6 JNZ SHORT ittpegf.00401966 00401980 8D45 CC LEA EAX, DWORD PTR SS:[EBP-34] <<< Отсюда 00401983 50 PUSH EAX 00401984 6A 00 PUSH 0 00401986 6A 00 PUSH 0 00401988 8B45 D4 MOV EAX, DWORD PTR SS:[EBP-2C] 0040198B 50 PUSH EAX 0040198C 68 00100000 PUSH 1000 00401991 6A 00 PUSH 0 00401993 E8 5FFAFFFF CALL ittpegf.004013F7 <<< здесь вызывается КреатеТред (тот самый, который спустя одну-две секунды завершает приложение) 00401998 61 POPAD 00401999 89EC MOV ESP, EBP 0040199B 5D POP EBP 0040199C - E9 2FDF1500 JMP ittpegf.<ModuleEntryPoint> - На самом деле прыжок на второй распаковщик 004019A1 8BE5 MOV ESP, EBP 004019A3 5D POP EBP 004019A4 C3 RETN Я думаю дальнейшие объяснения не нужны: все команды между метками (<<< Отсюда) и (<<< здесь вызывается КреатеТред) необходимо занопить. Вуаля!!! Игра запускается как родная! Заметьте, нам не пришлось её даже распаковывать (а только пропатчить код распаковщика), а вызов вредного КреатеТред (здесь почему-то мне вспомнился EXECryptor) - это и есть вся защита игры. Думаю, добавить в свой анвраппер поддержку этих игр не составит труда (достаточно открыть файл игры и по маске найти и занопить нужные команды) ![]() |
|
Создано: 10 апреля 2008 18:10 · Личное сообщение · #7 s2003r пишет: У него тулза на русском алав@ре не работала. Не совсем. Если речь идет про версию 1.2 (сырцы именно к ней), то там алгоритм был в банальном поиске EP по сигне компилятора, причем в той версии поддерживался только C. Но потом он переработал алго, и стал ставить бряки на создание процесса и чтение из памяти, и тулза стала вроде ничего работать. Однако для русских игр приходилось выставлять довольно большие тайминги для анврапа... Kiev78 пишет: Думаю, добавить в свой анвраппер поддержку этих игр не составит труда (достаточно открыть файл игры и по маске найти и занопить нужные команды) Интересно, а на многих играх проверял такое? Просто раньше был банальный UPX + еще несколько команд до прохода на OEP, чтобы авто-анпакеры не брали. А так, ты прав, можно было бы анвраппер сделать по такому принципу... ----- Программист SkyNet ![]() |
|
Создано: 10 апреля 2008 18:29 · Личное сообщение · #8 |
|
Создано: 10 апреля 2008 18:38 · Поправил: Kiev78 · Личное сообщение · #9 |
|
Создано: 11 апреля 2008 06:59 · Поправил: geograph · Личное сообщение · #10 |
|
Создано: 11 апреля 2008 13:05 · Личное сообщение · #11 Alawar тут все проще. у нас есть файл, запускающий игру и файл .WRP.EXE. написана игра обычно или в дельфи или в ms visual studio. первый файл можно удалить сразу, а второй открываем в Оле, и ищем точку входа. у Дельфи она обычно в самом низу, там несколько CALL-ов и потом команд нет. OEP = первый CALL. у MS С++, она начинается с push <число> (часто push 60h), и дальше идет инициализация среды выполнения. НО! В любом случае там есть CALL к GetVersionExA. Жмем в Оле правой кнопкой, Search For -> All intermodular calls. Жмем в таблице на заголовок "Destination", чем упорядичиваем список функций по алфавиту. Ищем ту GetVersionExA, которая нам нужна, пользуясь поиском push <число>. OEP - адрес push <число>. Вычисляем EP = OEP - ImageBase (обычно 400000h) и записываем в файл новый EP с помощью LordPE (Entry Point). ВСЕ! ИГРА ПАШЕТ!!! временами мне кажется, что или alawar-акбар специально делает такую говенную защиту, чтобы было неинтересно. или же они сами отламывают игры, переводят их и продают нам за символические 5$. ![]() |
|
Создано: 11 апреля 2008 13:06 · Поправил: Gigi · Личное сообщение · #12 |
|
Создано: 11 апреля 2008 14:25 · Личное сообщение · #13 Gigi пишет: я так думаю что искать самому точку входа будет интереснее, чем тупо копировать ее Для универсального анврапера, это просто необходимо, (есть спицефические игры flash, zink и тд) в которых exe изначально пакован или отличается от стандартных нормативов и наугад искать OEP это бред. А для твоего метода, посмотри исходники Dr. Carbon'a, в первых версиях так и делалось, еп искался по сигнатурам (для gamehause он до сихпор использует этот метод). ![]() |
|
Создано: 11 апреля 2008 19:52 · Личное сообщение · #14 |
|
Создано: 11 апреля 2008 20:05 · Личное сообщение · #15 G00ba пишет: в принцыпе для ковыряния 3 -- 8 игр не стоит писать анврап любой анврап пишется для людей которые с отладчиком на "ОНИ". G00ba пишет: руками интересние и правильние! Интересно смотреть что то новое, а не тупо повторять одни и те же действия. А правильнее всего купить игру у разработчика, ибо он на неё тратил своё время. G00ba пишет: а так тему надо в топку так как в инструменты внести сабж или тутор забабаитъ! А это строку я вообще не понял... Учи русский язык. ps. не хотелось писать, да сердце не выдержало... ----- Я ещё не волшебник, я только учусь... ![]() |
|
Создано: 11 апреля 2008 20:21 · Поправил: Kiev78 · Личное сообщение · #16 |
|
Создано: 11 апреля 2008 21:12 · Поправил: Kiev78 · Личное сообщение · #17 |
|
Создано: 11 апреля 2008 21:48 · Поправил: G00ba · Личное сообщение · #18 ну оберон ты загнул! assain~ пишет: А это строку я вообще не понял... Учи русский язык. ps. не хотелось писать, да сердце не выдержало... -- пищу через кпк стилусом так что не пинай! plz! тут кук раз всё понятно раз уж так много самопальных анвраперов есть надо просто наваять обший тутор и дело с канцом да и ляпнул так просто вообшем Googli.ru! !!купить игру у разработчика, ибо он на неё тратил своё время. > ну прямо таки убедил - я (и все) исследуют не для себя а за знания! ![]() |
|
Создано: 12 апреля 2008 19:04 · Поправил: geograph · Личное сообщение · #19 Добавил в unwrapper игры от "LoloGames" (lolo.ru, games.mail.ru). Благодарю Kiev78 Теперь при унврапе Reflexiv не надо нажимать "PlayGame" Скомпилированная программа [15 Кб] http://coder-club.in/download/unwrapper.rar Исходники [17 Кб] http://coder-club.in/download/unwrapper_src.rar Кстати при написании поиска и замены нужной сигнатуры для LoloGames, я проверил унврап на 3-х играх и у всех данная сигнатура располагалась по адресу B06 (файл ittpegf.dat). Но все равно оставил поиск сигнатуры, на всякий случай, т.к. мне не попадалась игра с gamedat.bin ![]() |
|
Создано: 12 апреля 2008 20:04 · Поправил: Kiev78 · Личное сообщение · #20 |
|
Создано: 12 апреля 2008 21:50 · Личное сообщение · #21 |
|
Создано: 12 апреля 2008 21:59 · Личное сообщение · #22 |
|
Создано: 13 апреля 2008 10:17 · Поправил: Kiev78 · Личное сообщение · #23 |
|
Создано: 13 апреля 2008 13:40 · Личное сообщение · #24 |
|
Создано: 13 апреля 2008 14:36 · Поправил: Kiev78 · Личное сообщение · #25 |
|
Создано: 14 апреля 2008 21:30 · Личное сообщение · #26 Dr. Carbon выложил новую версию своего анврппера, вместе с иходниками, v1.3.4 ![]() ----- Программист SkyNet ![]() |
|
Создано: 15 апреля 2008 11:27 · Личное сообщение · #27 |
|
Создано: 15 апреля 2008 14:57 · Личное сообщение · #28 FrenFolio пишет: Dr. Carbon выложил новую версию своего анврппера, вместе с иходниками, v1.3.4 похоже архив битый. geograph пишет: в процессах появился файл “game\smssrv~1.dll”. Вот-вот! И не исчез после применения анвроппера! ![]() ![]() ![]() |
|
Создано: 15 апреля 2008 18:52 · Поправил: userdom · Личное сообщение · #29 |
|
Создано: 16 апреля 2008 02:00 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Основной форум —› Универсальный UnWrapper для игр |