| RSS



Меню

Bookmark and Share


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





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

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

Облако тэгов
ОС написать свою операционную систему os видио сторона Обратная Tor антенна Файлики НаХ 4.6 php libc rand() а mt_rand() эксплоит Windows Server 2008 VoIP-телефония QIP Virtual openvz kernel sysctl Tune proc freeBSD Disk GEO Bluetooth game Wine emulator Python Shell червь Conficker вирус троян лаборатория касперского пиратство Apple iPhone Microsoft twitter социальная сеть анонимность лицензия Open Source уязвимость MySQL база данных Закон Франция Пират Skype мобильный Deutsche Telekom хакер trend micro кибератака Германия робот Персональные данные Ноутбук Интернет китай цензура windows vista acer Linux патент браузер Firefox Internet Explorer Opera Safari Intel цахал Oracle патч Банкомат IBM США прокси-сервер Dell Ford MAC контроль кибербезопасность приговор Mozilla Chrome безопасность Госдума СМИ Windows 8 взлом Пентагон Украина Facebook Cisco Windows XP нетбук торрент музыка Биометрический Nokia ФБР IP-адрес sms RSA java Google Captcha Symantec Спам Антивирус тест Windows 7 операционная система windows провайдер авторское право rapidshare UNIX свиной грипп шантаж Дети копирайт McAfee HTTPS icann студент WebMoney Норвегия New York Times YouTube Warner Music КНДР Ubuntu касперский Россия РФ сервер хостинг Wi-Fi суд пароль блог фишинг одноклассники Медведев контрафакт зарплата мошенник sony Gps по JavaScript Хакеры Yahoo фас компьютер софт Минкомсвязи Сбой Toshiba мошенничество Доктор ВЕб Вконтакте ie8 исходный код Прослушка МВД фильтр порнография свобода слова казахстан Universal Music сисадмин Autodesk Gmail кредитная карта LiveJournal шифрование банк Нанотехнологии wikipedia выборы DNS bind Android Simple атака Mac OS X клик домен ФСБ прокуратура уголовное дело ICQ Visual Basic Sophos Google Voice ошибка DARPA военные сайт турция конференция спамер Полиция Koobface Великобритания белоруссия Грузия Bittorrent Европа Билл Гейтс Стив Джобс спецслужбы ес Royal Bank of Scotland смартфон F-Secure Symbian трафик фильм милиция Новая Зеландия Adobe Австралия IDC новости Internet Explorer 9 руткит iPad Ирландия поиск финляндия МТС Реклама слежка компьютерные игры Office 2010 Zeus личные данные eset Вымпелком Будущее защита Defcon виртуализация Черный список BlackBerry индия Москва социальные сети flash player paypal BitDefender планшет сертификат Молдавия Евросоюз Гражданский кодекс Anonymous QIWI платежные терминалы технологии техника Чипы наркотик Ассанж передача данных Оптоволокно Сколково арест Samsung Иск конкуренция учетная запись Корея Сирия оборудование исследование Поломка Санкт-Петербург мошенники SOPA PIPA событие пользователь Megaupload отчет приложение правительство Инвестиции олимпийские игры платформа роскомнадзор сигнал

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

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

Казуальная игра — компьютерная игра, предназначенная для широкого круга пользователей. Сам термин "казуальная" происходит от латинского слова "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)
Просмотров: 3094 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
    Главная      
...
На службе : дней

13:35
Обновить


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

Поиск


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