| RSS



Меню

Bookmark and Share


Статистика
Ваш IP: 3.238.107.238
Вы используете: v





Сейчас на сайте:

Тех поддержка ->

Облако тэгов
ОС видио Tor Обратная сторона антенна 4.6 PHP Эксплоит Windows Server 2008 qip Virtual chroot kernel proc sysctl tune FreeBSD bridge Boot Disk Bluetooth GEO game directx Emulator Python Shell DDoS червь Conficker вирус троян Лаборатория Касперского пиратство apple iPhone ИТ-отрасль Щеголев Microsoft экономический кризис Twitter социальная сеть анонимность Лицензия Open Source ASP.NET MVC уязвимость MySQL база данных файлообмен закон франция пират Skype мобильный Deutsche Telekom Хакер киберпреступник Trend Micro кибератака Германия робот утечка данных персональные данные ноутбук интернет Китай цензура ядро Linux Торвальдс Windows Vista Acer Linux патент браузер Firefox Internet Explorer Opera Net Applications Safari Intel Linux Foundation Moblin Oracle патч банкомат кардер HSM IBM X-Force Cofee сша кибервойна Эстония Dell ИТ-специалист хакерские атаки Pirate Bay контроль кибербезопасность язык программирования The Pirate Bay Пиратская партия утечка информации приговор Mozilla Chrome безопасность Госдума СМИ Windows 8 Баллмер взлом Пентагон ботнет Украина Facebook Cisco cloud Windows XP нетбук торрент музыка биометрический nokia ФБР IP-адрес CIPAV Comcast sms RSA java Google CAPTCHA Symantec спам конфиденциальная информация инсайдер Perimetrix антивирус тест Anti-Malware Windows 7 операционная система Windows провайдер авторское право RapidShare UNIX свиной грипп шантаж дети EFF BluWiki копирайт экстремизм Panda Security cloud computing McAfee Cybercrime Response Unit Bottle Domains HTTPS ICANN студент шпионское ПО Норвегия школьник New York Times XSS YouTube Warner Music кибершпионаж КНДР Ubuntu свободное ПО AMD ATI касперский Россия РФ сервер хостинг фальшивый антивирус Comodo CA Wi-Fi D-Link суд пароль блог фишинг Одноклассники медведев контрафакт мошенник штраф Sony GPS по Gumblar JAVASCRIPT хакеры вредоносное ПО Yahoo ФАС компьютер Софт MPAA кибероружие PandaLabs Red Hat Минкомсвязи сбой ASUSTeK Computer мошенничество Доктор Веб ВКонтакте Cyber-Arc исходный код PCI DSS МВД фильтр порнография BREIN свобода слова Казахстан GEMA Autodesk сисадмин Gmail кредитная карта кибермошенник LiveJournal шифрование криптография Deep Purple банк нанотехнологии Wikipedia zero-day ColdFusion выборы кража данных DNS BIND Android BASIC атака Black Hat Mac OS X Click Forensics Clampi домен фсб Прокуратура Уголовное дело icq Barrelfish киберпреступность Sophos AT&T ошибка Electa Gamma Knife OpenBSD DARPA военные Сайт Visual Studio 2010 .NET Framework 4 Chrome OS электронная почта турция конференция спамер FTC полиция российская ОС Koobface Великобритания БЕЛОРУССИЯ грузия BSA Bittorrent облачные вычисления Azure Европа Dr.Web Билл Гейтс спецслужбы Cryzip Живой Журнал Royal Bank of Scotland смартфон Canonical Pwn2Own F-Secure Symbian Hotmail фильм

Главная » Статьи » Общие Статьи

Казуальное вскрытие в полевых условиях: взлом игр НевоСофт

Казуальная игра — компьютерная игра, предназначенная для широкого круга пользователей. Сам термин "казуальная" происходит от латинского слова "casualis", что означает "случайный". Таким образом, казуальная игра — это игра, в которую играют от случая к случаю, между делом, чаще всего, чтобы как-то убить время. Подобными игрушками являются творения компании НевоСофт. Только вот дают они поиграть всего час, а потом просят денег. Сегодня мы с этим разберемся!

Немного теории

Вообще, казуальные игры по своему уровню сложности годятся практически для любой категории пользователей компьютера. Зачастую время на прохождение таких игр невелико, а потому они хорошо подходят для тех, кто не может уделять игре много времени. Компания НевоСофт является одним из ведущих разработчиков казуальных игр в мире (и, в частности, на русском языке). Казалось бы, такая серьезная компания должна уделять повышенное внимание защите своего программного обеспечения, для ее взлома должно понадобиться много сил и времени. Сегодня мы опровергнем этот факт и покажем, как отучить их детище клянчить наши с вами кровные деньги. Разработчики компании НевоСофт держат под своим чутким надзором тысячи игр, при этом дают народу опробовать их детище в течение одного часа. После 60 минут, когда человек только входит во вкус, высвечивается не очень приятная табличка, которая просит денежек. Так уж сложилось, что русский человек не любит платить за софт, но разработчики игр иногда просто не оставляют нам выбора. Для определенной игры нужно найти свой кряк, на поиски которого иногда уходят драгоценные минуты и часы, а если игра новая, то вероятность найти его сводится к нулю.

Подготовка операционного стола

В качестве подопытного для нашего исследования, которого мы будем отучать от "вредной привычки", я выбрал игру "Полцарства за принцессу". Мой выбор пал на нее, потому что именно она и натолкнула меня на мысль об исследовании защиты игр от НевоСофта. Позже выяснилось, что принцип защиты у других игр этого производителя абсолютно идентичен.

Так сложилось, что на момент изучения под моей рукой не было ни одной программы для взлома: ни дизассемблера, ни отладчика; был только набор программ, стоящих на машине практически у каждого пользователя. В этот набор вошли Total Commander и "Диспетчер задач" — именно этими программами мы и будем пользоваться в момент изучения игры. Казалось бы, что можно сделать при помощи этих приложений? Оказалось, что при наличии пытливого ума и капельки внимательности этого вполне достаточно, чтобы заставить игру работать без ограничения по времени. В качестве платформы для написания "таблетки" я выбрал Delphi 7. Все инструменты разложены на операционном столе, пациент крепко привязан — можно  приступать к исследованию. А теперь обо всем по порядку...

Скальпель, тампон, спирт, еще спирт, огурец... Помянем!

Устанавливаем и запускаем игру. Видим красивое окошко, в котором красуется время, отведенное нам для ее тестирования. Смело тыкаем мышкой по кнопке "играть" и начинаем наблюдать, что творится в системе. Свернем игру на время и заглянем в "Диспетчер задач". Взгляд падает на неизвестный нам процесс с расширением *.tmp. Что ж, давай глянем, что это за фрукт, и как он тут оказался. Тыкаем в свойства процесса и вчитываемся в информацию, которую нам выдали. Месторасположение файла говорит о том, что мы на верном пути. Открываем папку с этим файлом и переименовываем его в exe’шник (кстати, файл является скрытым, так что не забудь поставить галочку на "отображать скрытые файлы" в  соответствующих свойствах). Тыкаем в него два раза левой кнопкой мыши и видим прекрасную картину — игра запускается, причем никаких окон для регистрации не выскакивает. Казалось бы, цель нашего эксперимента достигнута, игра больше не требует регистрации и работает без ограничения по времени. Но этот способ слишком нудный и неудобный. Поэтому будем искать способ упростить эти действия.

Вскрытие показало, что пациент умер от вскрытия

Основная наша цель — научится отучать игрушки NevoSoft'a от денег в два клика, поэтому начнем разбираться, откуда берется тот злосчастный файл с расширением *.tmp. Не бойся, читать тонны мануалов не придется, главное – иметь чуточку терпения и капельку внимательности. Искать долго не приходится, ибо в папке с файлом *.tmp лежит непонятно зачем нужный файл nsgame.dat, который по размеру совпадает с нашей игрушкой с точностью до байта. Можно предположить, что ланчер просто переименовывает nsgame.dat в *.tmp и запускает его. Но в процессе проверки нашего предположения тебя ждет большой облом — нас посылают куда подальше, сообщая о том, что приложение не является исполняемым файлом.

Расстраиваться не будем, а вместо этого берем лопату побольше да поострее и начинаем копать поглубже. Первое, что приходит на ум – сравнить эти два файла и посмотреть, в чем же их отличие. Откроем Total Commander и воспользуемся внутренней утилитой для сравнения файлов. Результаты сравнения очень интересные, так как наблюдается красивая картина: с периодичностью в 2 байта идет различие и совпадение. Налицо криптография исполняемого файла, но как провести обратный процесс, ведь мы решили отказаться от отладчиков и дизассемблеров? Ответ очень прост — нужно вспомнить алгоритмы шифрования. Самым простым и одним из самых эффективных (при правильном использовании) криптоалгоритмов является так называемое XOR-шифрование. Напомню, в данном методе побайтно проводится булева операция XOR. Первой переменной является байт для шифрования, а второй — ключ. Но перед нами тут же встает еще один вопрос — где взять ключ для дешифровки? Ответ прост. Нужно только вспомнить булеву алгебру, и ключ нам дадут в открытом виде.

Crypted = uncrypted XOR key;
Key = crypted XOR uncrypted

Попробуем достать заветный ключик. Для этого проведем побитно операцию XOR между исполняемым файлом и временным файлом. По идее, на выходе получим ключ для дешифровки, с помощью которого можно будет щелкать игры как орешки. XOR’ить будем только первые 256 байт, так как мало кто в наше время использует ключи большей длины.

var
i, o: TFileStream;
bi, bo:byte;
x, ii, cc:integer;
begin
if open.Execute then
begin
SetCurrentDir('C:\Игры от NevoSoft\Peacecraft\
game'
);
//Переходим в папку с игрой
if not(fileexists('nsgame.dat')) then exit;
i:=TFileStream.Create('nsgame.dat', fmOpenRead);
o:=TFileStream.Create(open.FileName, fmOpenRead);
x:=0; ii:=0; cc:=0;
//перебираем 256 байт
for x:=0 to 255 do
begin
i.read(bi,1);
o.read(bo,1);
key.Caption:=format('%s %x', [key.Caption, (bi
xor bo)]);
inc(cc);
if cc mod 8 =0 then key.Caption:=key.
Caption+#13#10;
end;
i.Free;
o.Free;
end;

Как оказалось, ключ, используемый для шифрования, не очень-то большой: длина его составляет всего 4 байта. Забегая вперед, скажу, что для каждой игры от компании НевоСофт существует уникальный ключ шифрования. Как же его вычислить?!

Углубляться в дебри не стоит. На самом деле все очень просто — для получения ключа берем от сигнатуры PE-заголовка первые 2 байта и проводим операцию XOR. У многих возникнет вопрос: почему нужно проводить операцию XOR только на 2 байта, ведь длина ключа — 4 байта? Ответ прост — 3-й и 4-й байты в ключе всегда равны $00.

const
ckey = #77#90; // сигнатура PE-файла
begin
i:=TFileStream.Create(FileName, fmOpenRead);
for x:=1 to 2 do
begin
i.Read(tmp,1);
tmp:=ord(ckey[x]) xor tmp;
key:=key+chr(tmp);
end;
key:=key+#0#0;

Теперь в наших руках есть заветный ключ-монтировка, и можно смело приступать к написанию самой программы для взлома.

Мы писали, мы писали, наши пальчики устали...

Мы уже обладаем достаточной информацией для написания универсального взломщика. Что ж, не будем зря терять время. Приступим...

procedure wrap(filename:string);
var
i, o: TFileStream;
bi, bo, tmp:byte;
x, ii:integer;
key:string[4];
buffer:TMemoryStream;
const
ckey = #77#90;//сигнатура PE-заголовка
begin
if not(fileexists(filename)) then exit; // небольшая проверка никогда не повредит =)
i:=TFileStream.Create(filename, fmOpenRead);//открываем на чтение подопытного
o:=TFileStream.Create(ChangeFileExt(filename,
'.exe'), fmCreate);//и на запись новый файл
buffer:=TMemoryStream.Create;
for x:=1 to 2 do // вычисляем крипто-ключ
begin
i.Read(tmp,1);
tmp:=ord(ckey[x]) xor tmp;
key:=key+chr(tmp);
end;
key:=key+#0#0;
i.Seek(0,soFromBeginning);
x:=0; ii:=0;
while i.Position<i.Size do // дешифруем файл с указанным
ключом
begin
inc(ii);
i.Read(bi, 1);
bo:=bi xor ord(key[ii]);
buffer.Write(bo,1);
inc(x);
if ii=4 then ii:=0;
end;
o.Write(Buffer.Memory^, Buffer.size);
i.Free;
o.Free;
buffer.Free;
showmessage('Wrapping done');
end;

Звучит барабанная дробь — запускаем полученный файл... Но почему-то нам снова предлагают пройти в сторону леса. Что, где, когда мы пропустили?! Ведь вроде бы все правильно сделали! Но не будем расстраиваться. Взяв в руки очередную баночку пива, продолжим изучать подопытного и попробуем найти наш промах. Вновь открываем Total Commander и проводим работу над ошибками, сравнивая нормальную игру с файлом, который у нас получился. На первый взгляд файлы одинаковы с точностью до одного байта. Но стоит только нажать кнопку "найти первое различие", Total Commander сообщает, что, начиная со смещения $43000, файлы не совпадают.

Следовательно, можно предположить, что шифруется не весь файл, а только первые $43000 байт. Поэтому берем в руки молоток и зубило и исправляем ошибки в нашем коде, заставив дешифровать только первые $43000 байт.

while i.Position<i.Size do
begin
inc(ii);
i.Read(bi, 1);
if x<$43000 then
begin
bo:=bi xor ord(key[ii]);
buffer.Write(bo,1);
end
else
buffer.Write(bi,1);
inc(x);
if ii=4 then ii:=0;
end;

Запускаем наш "взломщик" (впрочем, эти действия сложно назвать взломом, так как мы не модифицируем ни одного байта, непосредственно относящегося к игре, а лишь восстанавливаем исходное приложение путем дешифрования). Пару секунд ожидания; запускаем игру. Нашей радости нет предела, так как теперь игра абсолютно независима от NevoSoft'овского ланчера, который клянчит у нас деньги. Теперь можно расслабиться и, откинувшись в кресло, наслаждаться любимой игрушкой.

Заключение

Отличие хакера от обычного человека заключается не только в высоком уровне познаний IT-технологий, а в первую очередь в его любознательности и способности находить нестандартный подход к обычным делам. Исследование, которое мы сейчас произвели, доказывает еще один факт — для взлома не всегда нужно часами сидеть в отладчике, выискивая заветные байты, которые нужно пофиксить; иногда можно обойтись и теми программами, которые у нас всегда под рукой. За сим прощаюсь и рекомендую всегда блюсти ст. 272-274 УК РФ — и будет тебе счастье! :)



Источник: http://www.xakep.ru/post/52489/default.asp
Категория: Общие Статьи | Добавил: aka_kludge (10.12.2010)
Просмотров: 2741 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
    Главная      
...
На службе : дней

16:10
Обновить


Пользователи
aka_kludge
qwerty
LeadyTOR
aka_Atlantis
AdHErENt
mAss
Sissutr
hiss
DrBio
tHick

Поиск


Copyright tHR - TeAM 2024 г. admin: aka_kludge (ICQ:334449009) Moderator's: LeadyTOR, ... Яндекс.Метрика