eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: cbr-killer, Nikita1 (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Основной форум —› Универсальный UnWrapper для игр
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 9.5 (гость)
Статус: Участник

Создано: 9 апреля 2008 20:53 · Поправил: geograph New!
Цитата · Личное сообщение · #1

Универсальный UnWrapper для игр.

В последнее время очень популярными стали небольшие логические игры от Reflexive, Alawar, LoloGames, NevoSoft и др. Объясняется это, на мой взгляд, тем, что игрушки эти относительно небольшие, что позволяет скачивать их большому количеству пользователей, порой даже интересные, а так же они являются хорошим способом убить время, сидя дома, а особенно на работе И, конечно, компании не просто так распространяют свои игры, а хотят за это денег (пусть и небольших, но порой быстрее найти кряк для игры, чем возится с ее покупкой). Вам предлагают заплатить за игру и получить серийный номер, иначе вы не сможете играть больше отведенного триального времени. В играх от Reflexive это 60 минут, от Alawar – 30 минут.
Сегодня мы попробуем взломать некоторые из этих игрушек, а также написать для них универсальный кряк. Практически все эти игры используют для защиты, так называемый wrapper. Под эти словом подразумевается программа, которая из себя запускает одну или несколько других программ. В данном случае, имеется файл игры (.rwg – в Reflexive, .wrp или .wrp.exe – в Alawar), который специально поврежден и при обычном запуске выдает ошибку или просто не запускается. Wrapper запускает этот файл и уже в памяти восстанавливает байты необходимые для работоспособности файла. Для того, чтобы убрать этот wrapper совсем, оставив только саму игру, нам нужно узнать куда и какие байты записываются.

Reflexive.

Начнем с игр от Reflexive. В примере будет использована игра Astrobatics, но вы можете взять любую другую (т.к. принцип один и тот же) или вообще ничего не брать, а просто посмотреть, что у меня получилось ;)
И так берем отладчик (я взял OllyDbg) и запускаем из под него Astrobatics.exe. Ставим бряк на CreateProcess, т.к. именно эта функция используется для запуска файла игры:

bp CreateProcessA

Нажимаем F9 (Debug>Run) появляется окно для запуска игры, где показано сколько нам осталось играть. Кстати забыл сказать, что для успешного взлома у Вас должна остаться хотя бы минута времени , если время совсем не осталось до придется пропатчить wrapper, про это я расскажу чуть позже.
И так нажимаем “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. Теперь если все сделано верно, игра должна работать и тогда можно удалить старый .EXE и .RWG. Кстати, в отличие от официально зарегистрированной игры в нашей не открывается окошко после выхода ;)
Можно взломать проще пропатчив 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. Вуаля, игровой файл запустился!!! (если конечно Вы все правильно сделали и принцип зашиты не поменялся). Вот и вся защита Теперь можно файл .WRP переименовать в .EXE, а старый .EXE удалить. Кстати, alawar’ские игрушки хранят информацию о том, сколько Вам осталось играть в реестре. В ветви [HKCU\Software\Aent Sys\pr\], содержатся разделы с названиями игр (только без гласных букв и на английском языке), например игра «Маленькие бомберы возвращаются» сохраняет время в разделе “lttlbmbrsrtrns”. Дальше идет подраздел из шести цифр (обычно «200711» или «200802», наверное, это год и месяц выпуска/изменения защиты), в котором содержится DWORD-параметр “Program”, он то и содержит оставшееся время в миллисекундах С самого начала он равен 1800000, т.е. 1800000/1000/60 = 30 минут. Допустим мы хотим поиграть месяц 30*24*60 = 43200 минут, 43200*60*1000 = 2592000000 ставим это десятичное значение и играем месяц ;). Максимально можно поставить шестнадцатеричное значение 0xFFFFFFFF, после этого будет написано 0 минут, но кнопка «Играть» будет активна.

NevoSoft.

Ну что же, теперь рассмотрим игры от NevoSoft, я взял “Legends of Pirates”. Здесь все довольно просто. Сама игра находится в папке “game” все остальное, то что снаружи, это файлы наг-скрина и «защиты». Файл игры называется game.dll и находится в папке “game”, если переименовать его в .EXE можно увидеть значок игры, а также увидеть что файл не запускается Теперь переименуем обратно и запустим игру. Посмотрим, что у нас в процессах. Помимо самой игры “legends_of_pirates.exe” в процессах появился файл “game\smssrv~1.dll”. Зайдем в папку “game” и скопируем этот файл с другим именем (если Вы не видите этот файл, скорее всего у Вас отключен просмотр скрытых файлов), например, “game.exe” и уберем из атрибутов файла свойство «Скрытый». Завершим основной процесс игры и попробуем запустить наш новый файл “game.exe” – он должен удачно запуститься. Как видите защита от NevoSoft просто копирует файл “game.dll”, ставит файлу атрибут «Скрытый» (для более лучшей «защищенности» ) и патчит его прямо на диске, а потом запускает.
Теперь можно удалить все файлы и папки, которые находятся рядом с папкой “game”, а содержимое папки “game” вынести наружу.

Вот, пожалуй, и все. К статье прилагаются исходники unwrapper’а на Си. По идеи unwrapper должен ломать все игры трех вышеприведенных компаний. Исходники писались на скорую руку, поэтому наверняка там есть недочеты, не точности, ошибки, баги, переполнения... В общем, если найдете баги в коде буду очень благодарен, если сообщите об этом мне.

Скомпилированный UnWrapper http://coder-club.in/download/unwrapper.rar
Исходники http://coder-club.in/download/unwrapper_src.rar

by Geograph
© 2008

Ранг: 107.5 (ветеран)
Статус: Участник

Создано: 9 апреля 2008 21:06 New!
Цитата · Личное сообщение · #2

Гдето я уже это читал на ксакепе чтоли
Ты точно это сам придумал


Ранг: 340.0 (мудрец)
Статус: Участник
THETA

Создано: 9 апреля 2008 21:23 New!
Цитата · Личное сообщение · #3

Есть и от Dr. Carbon'a анвраппер. Тоже с исходниками, только на асме. Если кому интересно, то вот ссыль http://rapidshare.com/files/106174328/Univ_UnWrapper.rar.html
И еще для игр Reflexive Arcade свою тулзу выкладывал Freecod, в соответствущей теме.

Ранг: 39.7 (посетитель)
Статус: Участник

Создано: 9 апреля 2008 23:12 New!
Цитата · Личное сообщение · #4

FrenFolio,
У него тулза на русском алав@ре не работала.

Ранг: 9.5 (гость)
Статус: Участник

Создано: 10 апреля 2008 07:05 New!
Цитата · Личное сообщение · #5

Stack
Правда сам писал

FrenFolio
Просто я не встречал раньше анврапперов с исходниками, и решил сам написать и выложить

Ранг: 67.4 (постоянный)
Статус: Участник

Создано: 10 апреля 2008 17:26 · Поправил: Kiev78 New!
Цитата · Личное сообщение · #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) - это и есть вся защита игры.
Думаю, добавить в свой анвраппер поддержку этих игр не составит труда (достаточно открыть файл игры и по маске найти и занопить нужные команды)


Ранг: 340.0 (мудрец)
Статус: Участник
THETA

Создано: 10 апреля 2008 18:10 New!
Цитата · Личное сообщение · #7

s2003r пишет:
У него тулза на русском алав@ре не работала.

Не совсем. Если речь идет про версию 1.2 (сырцы именно к ней), то там алгоритм был в банальном поиске EP по сигне компилятора, причем в той версии поддерживался только C. Но потом он переработал алго, и стал ставить бряки на создание процесса и чтение из памяти, и тулза стала вроде ничего работать. Однако для русских игр приходилось выставлять довольно большие тайминги для анврапа...
Kiev78 пишет:
Думаю, добавить в свой анвраппер поддержку этих игр не составит труда (достаточно открыть файл игры и по маске найти и занопить нужные команды)

Интересно, а на многих играх проверял такое? Просто раньше был банальный UPX + еще несколько команд до прохода на OEP, чтобы авто-анпакеры не брали. А так, ты прав, можно было бы анвраппер сделать по такому принципу...

Ранг: 9.5 (гость)
Статус: Участник

Создано: 10 апреля 2008 18:29 New!
Цитата · Личное сообщение · #8

Kiev78
Спасибо за предоставленный способ, постараюсь добавить в анвраппер, только сначала потестю на нескольких играх ;)

Ранг: 67.4 (постоянный)
Статус: Участник

Создано: 10 апреля 2008 18:38 · Поправил: Kiev78 New!
Цитата · Личное сообщение · #9

---

Ранг: 9.5 (гость)
Статус: Участник

Создано: 11 апреля 2008 06:59 · Поправил: geograph New!
Цитата · Личное сообщение · #10

[quote]Кстати, только что попробовал скачать анвраппер с исходниками- сайт почему-то в дауне![/quote]
Странно, вроде не замечал, сейчас работает

Ранг: 10.7 (новичок)
Статус: Участник

Создано: 11 апреля 2008 13:05 New!
Цитата · Личное сообщение · #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$.

Ранг: 10.7 (новичок)
Статус: Участник

Создано: 11 апреля 2008 13:06 · Поправил: Gigi New!
Цитата · Личное сообщение · #12

да, "ковырял" я "Веселую ферму".
блин, не до конца дочитал про alawar. я так думаю что искать самому точку входа будет интереснее, чем тупо копировать ее
заодно посмотрите что там в игре есть, можно на читы нарваться )

Ранг: 617.3 (!)
Статус: Участник

Создано: 11 апреля 2008 14:25 New!
Цитата · Личное сообщение · #13

Gigi пишет:
я так думаю что искать самому точку входа будет интереснее, чем тупо копировать ее


Для универсального анврапера, это просто необходимо, (есть спицефические игры flash, zink и тд) в которых exe изначально пакован или отличается от стандартных нормативов и наугад искать OEP это бред.
А для твоего метода, посмотри исходники Dr. Carbon'a, в первых версиях так и делалось, еп искался по сигнатурам (для gamehause он до сихпор использует этот метод).

Ранг: 4.1 (гость)
Статус: Участник

Создано: 11 апреля 2008 19:52 New!
Цитата · Личное сообщение · #14

в принцыпе для ковыряния 3 -- 8 игр не стоит писать анврап (руками интересние и правильние!)
лично моё мнение!
а так тему надо в топку так как в инструменты внести сабж или тутор забабаитъ!

Ранг: 158.7 (ветеран)
Статус: Участник

Создано: 11 апреля 2008 20:05 New!
Цитата · Личное сообщение · #15

G00ba пишет:
в принцыпе для ковыряния 3 -- 8 игр не стоит писать анврап

любой анврап пишется для людей которые с отладчиком на "ОНИ".
G00ba пишет:
руками интересние и правильние!

Интересно смотреть что то новое, а не тупо повторять одни и те же действия. А правильнее всего купить игру у разработчика, ибо он на неё тратил своё время.
G00ba пишет:
а так тему надо в топку так как в инструменты внести сабж или тутор забабаитъ!

А это строку я вообще не понял... Учи русский язык.
ps. не хотелось писать, да сердце не выдержало...

Ранг: 67.4 (постоянный)
Статус: Участник

Создано: 11 апреля 2008 20:21 · Поправил: Kiev78 New!
Цитата · Личное сообщение · #16

---

Ранг: 67.4 (постоянный)
Статус: Участник

Создано: 11 апреля 2008 21:12 · Поправил: Kiev78 New!
Цитата · Личное сообщение · #17

---

Ранг: 4.1 (гость)
Статус: Участник

Создано: 11 апреля 2008 21:48 · Поправил: G00ba New!
Цитата · Личное сообщение · #18

ну оберон ты загнул!

assain~ пишет:
А это строку я вообще не понял... Учи русский язык.
ps. не хотелось писать, да сердце не выдержало...

-- пищу через кпк стилусом так что не пинай! plz!

тут кук раз всё понятно раз уж так много самопальных анвраперов есть
надо просто наваять обший тутор и дело с канцом да и ляпнул так просто вообшем Googli.ru!

!!купить игру у разработчика, ибо он на неё тратил своё время. >
ну прямо таки убедил - я (и все) исследуют не для себя а за знания!

Ранг: 9.5 (гость)
Статус: Участник

Создано: 12 апреля 2008 19:04 · Поправил: geograph New!
Цитата · Личное сообщение · #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

Ранг: 67.4 (постоянный)
Статус: Участник

Создано: 12 апреля 2008 20:04 · Поправил: Kiev78 New!
Цитата · Личное сообщение · #20

---

Ранг: 9.5 (гость)
Статус: Участник

Создано: 12 апреля 2008 21:50 New!
Цитата · Личное сообщение · #21

Kiev78 пишет:
с gamedat.bin твой unwrapper тоже работает

это хорошо
интересно для Oberon получится написать автораспаковщик


Ранг: 340.0 (мудрец)
Статус: Участник
THETA

Создано: 12 апреля 2008 21:59 New!
Цитата · Личное сообщение · #22

geographgeograph пишет:
интересно для Oberon получится написать автораспаковщик

на всех играх Оберон висит Арма (на враппере + на файле игры). К тому же, файл игры имеет дополнительные опции защиты, как правило Debug blocker. И еще встречаются игры с флешем...

Ранг: 67.4 (постоянный)
Статус: Участник

Создано: 13 апреля 2008 10:17 · Поправил: Kiev78 New!
Цитата · Личное сообщение · #23

---

Ранг: 39.7 (посетитель)
Статус: Участник

Создано: 13 апреля 2008 13:40 New!
Цитата · Личное сообщение · #24

Kiev78 пишет:
макромедиа директором
,
Скачай Cave days, от оберона(сигнатура оверлея 10jp)

Ранг: 67.4 (постоянный)
Статус: Участник

Создано: 13 апреля 2008 14:36 · Поправил: Kiev78 New!
Цитата · Личное сообщение · #25

---


Ранг: 340.0 (мудрец)
Статус: Участник
THETA

Создано: 14 апреля 2008 21:30 New!
Цитата · Личное сообщение · #26

Dr. Carbon выложил новую версию своего анврппера, вместе с иходниками, v1.3.4

{ Атач доступен только для участников форума } - UnWrapper by Dr. Carbon v1.3.4.rar

Ранг: 39.7 (посетитель)
Статус: Участник

Создано: 15 апреля 2008 11:27 New!
Цитата · Личное сообщение · #27

Kiev78 пишет:
Дай ссыль на скачку, штоб я долго не искал.


Я смотрю дядя гугл не рулит
www.cavedays.com/files/installcavedays.exe

Ранг: 11.7 (новичок)
Статус: Участник

Создано: 15 апреля 2008 14:57 New!
Цитата · Личное сообщение · #28

FrenFolio пишет:
Dr. Carbon выложил новую версию своего анврппера, вместе с иходниками, v1.3.4

похоже архив битый.

geograph пишет:
в процессах появился файл “game\smssrv~1.dll”.

Вот-вот! И не исчез после применения анвроппера! Подопытный процесс погибает, не удалив за собой мусор, пусть анвроппер тады его грохнет!

Ранг: 69.8 (постоянный)
Статус: Участник

Создано: 15 апреля 2008 18:52 · Поправил: userdom New!
Цитата · Личное сообщение · #29

viiri пишет: похоже архив битый.
похоже криво распаковал. Архив небитый.

Ранг: 11.7 (новичок)
Статус: Участник

Создано: 16 апреля 2008 02:00 New!
Цитата · Личное сообщение · #30

userdom пишет:
похоже криво распаковал. Архив небитый.

ага. стянул из дому. видать на работе прокся шалит.
. 1 . 2 . >>
 eXeL@B —› Основной форум —› Универсальный UnWrapper для игр

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS