//-------------- Взлом FLASH игр 2: война с разработчиками --------------\\
ВСТУПЛЕНИЕ
Итак, прочитав статью о взломе ActionScript, мне захотелось поломать .swf файлы... Если бы было все так просто, как описано в той статье, то я бы переломал их кучу, НО большинство современных игр используют защиту, которую просто взломать с помощью хорошего декомпилятора... Но мне, к сожалению, сразу хорошие не попались (описанные в той статье дэкомпиляторы (не дизассемблерыотображали код неправильно) и мне приходилось долго и нудно лазить по форумам и искать их... В этой статье изложен мой накопленный опыт взлома и мои обертки-защиты для игры, которую мне разрешил использовать Ilya112.
Под FLASH играми(и программами) я понимаю любой .swf файл, воспроизводимый Adobe Flash Player (c)
В статье я не буду вдаваться в теорию, а мы просто рассмотрим насколько заготовленных мной(на скорую руку) файлов и попытаемся понять, как вламываются такие приложения... Я с вами разберу только 2 файла, 2 других вы можете разобрать сами... И еще: я немного модифицировал игру от Ilya112 (прости), изменив там одну строку, которую вы сможете найти, взломав файл (на до же стимул иметь, тем более что в каждом файле она разная). Приступим....
Файл №1 (простой)
Я прям даже и не знаю с чего начать, все файлы по-своему "защищенные"... Пожалуй, начну с первого сделанного...
Итак, я расскажу только про четыре программы, две из которых как минимум должны быть для просмотра, а для редактирования придется использовать этакий "дизассемблер" (рекомендую asAsmGUI или asDec, их использование описано тут)... Все, о чем я упоминаю, приложено в файле...
Пожалуй, для первого файла я использовать буду asDec, так как ActionScript Viewer не может нормально прочитать файл (это очень редкий случай),а Sothink SWF Decompiler отображает имена вот так:
[Ссылки могут видеть только зарегистрированные пользователи. ]
и по ним нельзя искать( это хорошо что у меня файл маленький, а если в нем было бы куча кода? )...
Для начала я отрываю файл в asDec (заметьте, он автоматически предлагает поменять на читаемые слова эти непонятные буквы)
[Ссылки могут видеть только зарегистрированные пользователи. ]
Обычно все "матрешки" выглядят именно так, т.е пакет mx.* и 2 файла распаковки (один с ByteArray - флэш файлом, а другой с самим загрузчиком)... Нас интересует загрузчик, как скрипт для распаковки, ну и, конечно, сам массив байтов... Сначала я всегда выдергиваю этот массив. К сожалению, кроме ASV это нормально ничто сделать не может...
[Ссылки могут видеть только зарегистрированные пользователи. ]
ПКМ --> сохранить Binary Data
После всего этого, надо вытащить скрипт и создать что-то типа расшифровщика... К огромному сожалению для разработчиков, это сделать очень просто...
Я создал болванку для быстрой расшифровки ~3 минуты(а то и быстрее!)
Код:
package
{
import flash.events.*;
import flash.utils.*;
import flash.display.*;
import flash.net.*;
public class Main extends MovieClip
{
private var byteArray:ByteArray=new ByteArray;
private var fileRef:FileReference = new FileReference ;
public function Main()
{
var buttonShape:Shape = new Shape ;
buttonShape.graphics.beginFill(0x33ff33);
buttonShape.graphics.drawCircle(30,30,30);
var button = new SimpleButton(buttonShape,buttonShape,buttonShape,buttonShape);
addChild(button);
var buttonShape2:Shape = new Shape ;
buttonShape2.graphics.beginFill(0x33ff33);
buttonShape2.graphics.drawCircle(90,30,30);
var button2 = new SimpleButton(buttonShape2,buttonShape2,buttonShape2,buttonShape2);
addChild(button2);
button.addEventListener(MouseEvent.CLICK,onButtonClick);
button2.addEventListener(MouseEvent.CLICK,onButtonClick2);
}
private function onButtonClick(e:MouseEvent):void
{
fileRef.addEventListener(Event.SELECT,onFileSelected);
fileRef.browse([new FileFilter("Bin","*.*")]);
}
private function onFileSelected(e:Event):void
{
fileRef.addEventListener(Event.COMPLETE,onFileLoaded);
fileRef.load();
}
private function onFileLoaded(e:Event):void
{
fileRef.removeEventListener(Event.COMPLETE,onFileLoaded);
fileRef.removeEventListener(Event.SELECT,onFileSelected);
byteArray = e.target.data as ByteArray;// Переменная - массив байтов
init();//Функция дешифровки, использующая массив ByteArray
}
private function onButtonClick2(e:MouseEvent):void
{
fileRef.save(byteArray);//Переменная - массив байтов
}
private function init():void{
//сюда вставляем код вызова дешифровщика или сам дешифровщик
}
}
}
Создаем проект (если не создан) и в init() копируем код расшифровщика из декомпилированного файла:
Код:
private function init():void{
_name7(byteArray);
}
private function _name7(param1:ByteArray) : void {
var _loc2_;
_loc2_=0;
_loc2_=0;
param1[param1.length-1] = param1[param1.length-1]^param1[0];
_loc2_=0;
while(_loc2_<param1.length-1)
{
param1[param1.length-_loc2_-2] = param1[param1.length-_loc2_-2]^param1[param1.length-_loc2_-1];
_loc2_=_loc2_+1;
}
return;
}
Как видите, мы оттуда только скопировали расшифровщик. Теперь осталось это скомпилировать и расшифровать ранее сохраненный бинарный файл. (левая зеленая кнопка - выбрать файл, ждем ~5 сек и правая зеленая кнопка - сохранить файл). Можно, конечно, написать более лучшую болванку, но зачем лишние проблемы?
После того как файл расшифрован, я открываю любой декомпилятор и исследую код(обычно я использую ASV, он мне больше нравится). Не забыли, что мы ищем? Мы ищем- спрятанную мной строку. На примере ASV: я захожу в раздел скриптов, нажимаю ctrl+e и просматриваю все строки (я же "не знаю" что ищу).
[Ссылки могут видеть только зарегистрированные пользователи. ]
Вот она: "You Win!!! Numbe: 49884947848877389090390"
Мы вскрыли защиту, УРА!
Файл 2
Вот мы подобрались ко второму файлу. Откроем его в asDec:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Мдаа... незадача... он нам даже не предложил поменять имена.
Sothink SWF Decompiler опустил часть имен
[Ссылки могут видеть только зарегистрированные пользователи. ]
Конечно, может показаться, что Sothink SWF Decompiler бесполезен, но зато он может по нормальным именам (переименовать можно в ASV и более быстрый способ я покажу потом) делать поиск, причем по всем файлам.
Теперь открываю я ASV, перехожу в скрипты и :
[Ссылки могут видеть только зарегистрированные пользователи. ]
он нам сам сменил имена, теперь осталось только вытащить бинарник и расшифровщик, который надо поместить в болванку.
Код расшифровщика:
Как я его нашел? - просто посмотрел код и проанализировал что делает каждая функция. Дальше повторяем, что мы делали и с первым файлом...
В итоге, во втором файле строка : "You Win!!! Numbe: 837282375810392875192793"
Третий файл и четвертый (финальный) сделайте сами.
Подсказка для четвертого: там "матрешек" много их
Переименование
Итак, мне известно 2 легких способа сменить имена в файле .swf
ПЕРВЫЙ: (и самый быстрый) - больше подходит для того, чтобы все работало, т.е. чтобы выдернуть расшифратор.
открываем в SWF Reader файл
идем Edit-->String Indetifier
выбираем Regular Rename
вводим слева имя (например, _var_)
Внизу выбираем идентификаторы, которые нужно сменить(обычно стоит по-максимуму, иначе он может неправильно их изменить(работать не будет в итоге приложение, но нам и не надо)
отмечаем галочками rename vars & constants и rename methods
жмем кнопку rename
[Ссылки могут видеть только зарегистрированные пользователи. ]
закрываем переименовку
File-->save as
выбираем куда сохранить и ставим сжатие в 0 (у меня ври сжатии выше просто не работало приложение, даже декомпилятор не считывал )
открываем сохраненное в декомпиляторе и вытаскиваем что нам нужно
ВТОРОЙ: больше подходит для разбора и восстановления кода
Открываем в ASV файл
перейдите на вкладку скриптов, разберитесь в скрипте, придумайте имя и нажмите ctrl+e
найдите интересующюю вас строку и смените ее имя на более подходящее
[Ссылки могут видеть только зарегистрированные пользователи. ]
сохраните файл и вытащите интересующее (зачем напрасный труд?)
ПОСЛЕДНЕЕ
Я вам, наверное, уже надоел, но, написав статью про взлом, я вооружил юных хакеров и крэкеров (опытные это уже все знают ), я обезоружил
программистов. Поэтому, я решил подвести для них некий итог и дать подсказку.
Не все декомпиляторы все хорошо декомпилируют, например, если в том же SWF Reader изменять переменные используя Random rename, Unreadable и Key statements (а главное, совмещая их) можно запутать взломщиков (мы убедились : где один хорошо показывает декомпилятор, там другой покажет плохо... вообщем у них имеются свои ошибки), а
если еще и запутать код, то в нем будет сложно разобраться. Например,
когда я взламывал одну игру, asDec полностью подвел меня, не распознав
код, тогда я и полюбил ASV...
КОНЕЦ
Вот мы и сделали этот не сложный путь. Надеюсь, вы узнали для себя что-то новенькое.
Так же вы можете почитать [Ссылки могут видеть только зарегистрированные пользователи. ] и [Ссылки могут видеть только зарегистрированные пользователи. ]
Успехов вам в дальнейшем взломе ( и защите), оставляйте комментарии и вопросы, я постараюсь на них ответить ( только ПОМНИ: ) с вами был Bots' Maker. Мир интереснее, чем нам кажется!
И не забывайте говорить Кнопка спасибо появляется после набора 10 сообщений на форуме. и тыкать в репу
Всем добра!
При копировании статьи или переносе на другой сайт, оставляйте ссылку на саму статью и никнейм автора, все таки он ее написал!
ФАЙЛЫ ТАМ
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]
UPD N1. Все файлы, представленные выше, распространяются на правах ознакомления. Пользователь имет право на выбор: скачивать данные программы или нет. Скачав любую из данных программ, конечный пользователь сам несет ответсвенность за свои действия ( в том числе и нарушение авторских прав).
Последний раз редактировалось Bots'Maker; 03.08.2012 в 22:14.
Причина: Добавил картинки прямо в текст
У меня такой вопрос. Например я нашел в Sothink SWF Decompiler нужную страницу с флеш кодом. Как мне ее найти в ASV декомпиляторе? у меня такое ощущение что он меньше инфы показывает О__о
Кстати. Как вариант (если невозможно корректно сохранить swf) можно писать патчеры RAM памяти куда загружена флешка. Например таким образом можно убивать нужную картинку преграждающую обзор чего-либо. Или что-то еще по мелочам не требующего увеличения размера флеш кода.
У меня такой вопрос. Например я нашел в Sothink SWF Decompiler нужную страницу с флеш кодом. Как мне ее найти в ASV декомпиляторе? у меня такое ощущение что он меньше инфы показывает О__о
Кстати. Как вариант (если невозможно корректно сохранить swf) можно писать патчеры RAM памяти куда загружена флешка. Например таким образом можно убивать нужную картинку преграждающую обзор чего-либо. Или что-то еще по мелочам не требующего увеличения размера флеш кода.
Инфы он показывает не меньше, там есть поиск только определенной строки или по названию файла... В твоем случае поможет поиск по имени файла, содержащий этот код...
Можно написать и патчер, но надо учитывать, что некоторые приложения зпшифрованы и ксорами и орами и т.п. ... И это при патче надо тоже учитывать ( я встречал файлы и те, которые меняли местами байты, поэтому надо сначала определить что где заменить, потом эти новые байты нужно зашифровать и уже зашифрованными патчить....) А если надо вставить лишний код? - тогда надо уже для всех байтов в файле все пересчитывать.... Читали статью про монстер дебаг? Нет - почитайте... Там используется оболочка - мне кажется оболочкой удобнее ( темболее, что методы открыты обычно)
Насчет сохранения кода, то только для себя, об этом хотя бы никто знать не будет, а значит меньше шансов ответить перед законом...
Добавлено через 2 минуты
Цитата:
Сообщение от lexa1992s
Спасибо)
Да незачто... Когда пишешь статью - углубляешься в свои знания... Да и другие пользователи узнают новое, а может для них эта статья станет отправной точкой... Вообщем - одни плюсы)
________________
Мои статьи:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
С зашифрованными можно было бы поступить куда проще - сдампить расшифрованную swf из памяти, не разбираясь в алгоритмах расшифровщика.
Оба способа друг друга дополняют. Разбираться в рашифровщике может быть придется, если флэшка не будет запускаться в вашей среде или если будут использованы всякие антидамп приемы (типа мусора в памяти), а в остальных случаях - выручит дамп (и заодно кучу времени сэкономит, если например воспользоваться какими-нибудь утилитами для этого или написать свою, которая бы искала CWS/FWS/ZWS заголовки в памяти.
3,4 игры:
[Ссылки могут видеть только зарегистрированные пользователи. ]
PS: про распаковку можно еще почитать тут: [Ссылки могут видеть только зарегистрированные пользователи. ]
Последний раз редактировалось focusnick; 13.08.2012 в 21:36.
Причина: Добавил линк на статью по распаковке
"сдампить расшифрованную swf из памяти" - здесь подразумевается память Flash Player'a или cache браузера?
Пожалуйста, Вы могли бы описать подробно как получить и потом анализировать дамп?
Для дампа флэша из памяти - SWFMemoryDumper вот эта чудесная прога...Выбираешь нужный флэш и указываешь директорию для сэйва, а потом приступаешь к изучению
я вот не много путаюсь в назначениях каждой из прог,поправьте если что не так понял.. Sothink SWF Decompiler
-декопмилирует *.swf файл
-можно просматривать псевдо-код
Flash scalpel
- Можно перекомпилировать *.swf файл с изменёнными данными
asdec_beta1 - эм....то же самое что и Сотник?да и Action Script Viewer не понятно что и как в нём...
Fiery Dragon, ASV позволяет просматривать action script 3 ( сейчас большинство пишут на нем), но не компилировать его... Я его использую только для просмотра, потому что он лучше декомпилирует, чем остальные (да и редактировать флешку мне не надо - это незаконно)... Я просто смотрю понятный код...
________________
Мои статьи:
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).