Перейти к содержанию

Взлом Flash-игр с помощью декомпилятора Flasm


aliast

Рекомендуемые сообщения

Сложность: средняя

Необходимые программы: Mozilla Firefox (для простоты скачивания flash-игр с сайтов)

                                             flash-декомпилятор Flasm (http://www.nowrap.de/flasm.html)

                                             flash-плеер AR FlashPlayer (http://www.vector-sk...flashplayer.htm)

Для начала нужно обязательно скачать игру с сайта. Сделать это можно с помощью браузера Firefox как-то так: Правый клик мышкой>View page info или Tools>Page Info. Кликаем на

media. Находим .swf файл игры. Выбираем Save As (сохранить как) и сохраняем файл в папке с установленным декомпилятором flasm.

Теперь давайте запустим игру в плеере AR FlashPlayer и дойдём до того момента, когда на экране появится то, что мы хотим взломать. Я ломал игру Elf Girl Sim Date RPG

Картинка

504bf42abe5a.jpg

Обратите внимание на номер фрейма, отображённый в панели с кнопками: Frame 1101. Это нам пригодится.

Далее, находясь в папке flasm набираем в командной строке: flasm -d ageofwar.swf > aow.txt

Здесь ageofwar.swf - скачанный с сайта файл игры. Замените его на имя своего файла игры

aow.txt - в этот текстовик будут записаны выходные данные (декомпилированный код игры). Имя файла не имеет значения

Как открыть командную строку

Предположим, что flasm находится в папке C:Flasm.

1. Заходим в Пуск-Выполнить, набираем cmd, нажимаем Enter

2. Набираем команду cd c:flasm и переходим в папку с программой

Открываем полученный текстовик. Ищем в тексте строку frame 1101 (номер фрейма взят из окна AR FlashPlayer). Находим что-то похожее на это:

Код фрейма 1101

frame 1101

    constants '_root', 'str', 'cha', 'spe', 'mag', 'per', 'rom', 'available'  

    stop

    push '_root'

    getVariable

    push 'str', 1

    setMember

    push '_root'

    getVariable

    push 'cha', 1

    setMember

    push '_root'

    getVariable

    push 'spe', 1

    setMember

    push '_root'

    getVariable

    push 'mag', 1

    setMember

    push '_root'

    getVariable

    push 'per', 1

    setMember

    push '_root'

    getVariable

    push 'rom', 1

    setMember

    push '_root'

    getVariable

    push 'available', 54

    setMember

  end // of frame 1101

Как можно догадаться, тут происходит инициализация начальных параметров: шесть единичек и 54 очков для распределения. Остаётся лишь изменить эти цифры на желаемые и сохранить изменённый текстовый файл.

Теперь собираем новый swf-файл командой flasm -a aow.txt. Должен появиться новый файл с расширением .$wf. Меняем $ на букву s и можно приступать к игре со взломанными

характеристиками.

Аналогично можно взломать количество здоровья и денег. В том же фрейме 1101, но чуть выше, инициализируются начальные деньги:

Кусок кода

push 'hp', 100

    setMember

    push '_root'

    getVariable

    push 'gold', 100

Меняем их, пересобираем флэшку указанной выше командой и наслаждаемся :)

PS взломать игру с помощью стандартных Artmoney, Cheat Engine я так и не смог...

Ссылка на комментарий
Поделиться на другие сайты

...А искать сканерами памяти, точнее теми которые сейчас существуют бесполезно потому, что с каждым изменением данные (вероятно любой тип данных находящийся в текстовом формате с описанием типа):

а) вероятно меняют своё местоположение в памяти

б) упаковываются и распаковываются при каждом изменении

Изменить данные извне можно специальной функцией зная имя параметра. Только я уже подзабыл что это за функция. Берём любую среду разработки (Delphi,VC++, даже думаю C#...) импортируем ActiveX компонент флеш-плеера, в него загрузим флешку и его функцией изменим некоторый параметр по названию. Когда-то давно я это делал ради эксперимента.

Ссылка на комментарий
Поделиться на другие сайты

Ещё один способ взлома Flash-игр. В этом способе не будет модифицироваться оригинальный файл игры. Вместо этого будем создавать новую флэшку в среде разработки Macromedia Flash Professional 8, получится что-то вроде тренера. Взломанные параметры не просто изменятся, как в предыдущей статье, но и заморозятся, перестанут изменяться.

Необходимые программы: среда разработки Macromedia Flash Professional 8

Открываем Macromedia Flash Professional 8, создаём новый файл (Flash Document)

Внизу в окне Actions - Frame пишем LoadMovieNum ("game.swf ", 1, "POST");

где game.swf - название флэшки с игрой

картинка

aa3a244e9fe1.jpg

Сохраняем получившийся файл в ту же папку, где лежит флэшка с игрой. Можно запустить флэшку, нажав Ctrl+Enter - если всё сделано правильно запустится игра.

Открываем в игре экран, на котором показаны взламываемые характеристики и нажимаем меню Debug->List Objects (Ctrl+L в окошке с игрой). Должно появиться окно Output, а в нём имена наших переменных:

Картинка

36aae07b40b2.jpg

Запоминаем эти имена и закрываем окно с игрой. Создаём мувикклип, нажав Ctrl+F8. Даём мувику некоторое имя, тип ставим "Movie clip".

Теперь нужно перетащить созданный мувик-пустышку на нашу сцену. Для этого нажимаем сверху над шкалой кадров надпись Scene 1, появится белый прямоугольник - экран нашей флэшки. Нажимаем Ctrl+L. Сбоку развернётся компонент Library, в нём должен находиться созданный мувик. Хватаем его и перетаскиваем на белый прямоугольник. На листе появится такое перекрестье прицела.

Нажимаем на прицел и внизу пишем код:

onClipEvent (enterFrame) {

_level1.str = 250;

_level1.cha = 250;

_level1.spe = 250;

_level1.mag = 250;

_level1.per = 250;

_level1.rom = 250;

_level1.available = 0;

}

картинка

20c238a36428.jpg

Имена переменных взяты из окна Output. Строка _level1.available = 0 нужна, чтобы сразу начать игру, иначе придётся ещё распределить 54 очка, а у нас и так уже всё по максимуму.

Опять нажимаем Ctrl+Enter и проверяем, удался ли взлом. В папке с игрой должен появиться созданный файл-тренер .swf. Каждый раз при его запуске все статы будут заморожены на значении 250.

Ссылка на комментарий
Поделиться на другие сайты

Ну и наконец нашлась программа-сканер памяти специально для Flash - Variable engine 2.0 (http://drkgodz.hobo-...og/?page_id=224). Сканер жутко неудобный в использовании, но работает! Сканер умеет искать значения, может выводить список всех переменных и ещё много чего. Но пользоваться им жутковато...

1. Продолжаем ломать elf-girl-sim-date-rpg.swf. Открываем сканер, внизу жмём Browse (1 на картинке), загружаем флэшку, давим Load (2). Открывается игра... по идее можно ломать игры напрямую с сайтов, но что-то у меня не получилось..

2. Доходим до экрана создания персонажа. Ломаем, к примеру 54 очков для распределения. Нажимаем справа сверху вкладку Load hacks (3), вводим 54 в поле под кнопкой Search Value, жмём эту кнопку (4). Нашлась одна переменаая "available". Выделяем её и давим Add to Cheat Table (5).

610cf3601087.jpg

3. Теперь переходим на вкладку Advanced (6). Здесь видим добавленную переменную available. Чтобы её изменить, нужно опять выделить её. При этом снизу появится цифра 54, а рядом флажок Freeze. Ставим этот флажок (1). Теперь можно изменить 54 на что угодно. Или так и оставить 54, как хотите. Флажок заморозки также можно оставить или убрать. В программе есть странный глюк - значение невозможно изменить, не поставив флажка заморозки. Чтобы вернуться в игру, выбираем сверху Invisible (2)

69f46aaea912.jpg

Вроде ещё можно сохранить взломанные переменные в файл. Я пока не разбирался.. аналогично ломаются остальные цифры в игре.

Ссылка на комментарий
Поделиться на другие сайты

С Macromedia Flash Professional 8 хороший вариант, я про него не подумал.

ПО Flash - Variable engine 2.0 все было бы хорошо, но изменённые этой программой значения иногда превращается в текст.

Было "10" очков.

Изменили "10" "Flash - Variable engine 2.0 " на "200".

В игре в процессе игры добавляется 5 и видим не 205, а "205+5"

Ссылка на комментарий
Поделиться на другие сайты

Изменить данные извне можно специальной функцией зная имя параметра. Только я уже подзабыл что это за функция. Берём любую среду разработки (Delphi,VC++, даже думаю C#...) импортируем ActiveX компонент флеш-плеера, в него загрузим флешку и его функцией изменим некоторый параметр по названию. Когда-то давно я это делал ради эксперимента.

А функция эта SetVariable

На ютубе куча видеотуториалов по этому способу. Вставляется на форму объект Shockwave Flash, в его свойствах прописывается ссылка на файл swf на сайте. Ставится кнопка. В событии кнопки OnClick пишется всего одна строка кода:

Call ShockwaveFlash1.SetVariable("_root.str",250);

где ShockwaveFlash1 - имя объекта со вставленной флэшкой; такое имя у него будет по умолчанию (в VB)

_root.str - имя взламываемой переменной

250 - новое значение переменной

Ссылка на комментарий
Поделиться на другие сайты

  • 6 месяцев спустя...

Статья про взлом флеш-игр на английском. Всё что тут написано старо, но можно обратить внимание на пятый и шестой пункт ближе к концу статьи

Hacking flash games with CE

This is a small description on how to find values in flash games generally. It does not cover the tutorial on how to find values, only the part which is unique to flash games.

First of all, flash games are working differently from other games, so the usual pointer, code injection methods etc will not work here (or at least not as You would expect). CE is by far not the best choice to hack a flash game, that is why universal flash trainers were created. I rarely play and hack flash games, so this is not a professional tutorial, just some methods that You may try if You are stuck.

Because most of the users are thinking about Flash games that they work as normal games, I will explain it in a few words what is the difference. If You hack a normal game, You just start the exe file, than You do the usual hacks and when You get back, the code will remain the same. The exe file is not changing. However if You update the game, of course the exe file will change in the new version and You will have to make another trainer based on the new codes (or use AOBscan but that is a "special" method). So how are flash games working? Usually You start the browser, the browser will load the flash player plugin and the flash player plugin will run the swf file. So when You try to hack the game, You try to hack the browser or flash player, which is using the swf file. Now if You try to make a trainer, You will obviously have to think about this question: will other people use exactly the same browser and flash player plugin as me not to mention browser updates and other kind of plugins and system components which is related to the browser? Well, not. Their browser will be different at least in one little thing, the codes and pointers will be different on their computers so the idea of making a working trainer which is based on code injection or pointers is generally screwed. It is just like everyone would use a special version of the game which is different from Yours. All You can do is to make some pointers which will work with Your browser on Your computer at least until You don't update or install anything in it, or You can use AOBscan to write a script which is searching for specific codes and change them with code injection. Using code injection with flash games is much harder so if You choose that method, You have to be really good. Now lets continue...

Important note from CE's creator (DarkByte):

If you're using firefox and want to use Cheat Engine on a browser game, then open plugin-container.exe instead of the firefox process. (That process will only exist when the game has already been started)

If You want to find a value in a flash game with CE, these are the main methods that are usually working:

1. Search for the value as a "4 byte" value. This is simple enough and it is working with most of the new games which has been written in AS3.

2. Search for the value as a "Double type" value. Some older flash games are using double type values to store the variables.

3. Search for the value as a "4 byte" value, but multiply the value with 8 when You search for it. For example You have 100 gold in the game, then You need to search for 800. If You have found it and You want 10000 gold, You need to change it to 80000. If You type in a value which cannot be divided with 8, most likely You will crash the game.

4. Remember there is an option in CE to search for ALL value types, so if You don't have a clue, try it out. It may be Double, 4 byte, whatever.

5. Some games are always changing the address of the values, in this case You need to find the value from 1 search. Most of this games are multiplying the value with 8, so You need to use the 3rd method, but You have only one shot at it to find it and the address will be moved. You also need to pause the game with CE to prevent the game from moving the address elsewhere until You find it and change it. To pause the process, click on "Advanced options" at the bottom of CE and click on the pause button. Then search for the value and if You find it, change it. If not, or You have too many results, try it again. Generally the bigger the number that You search for, the less results will be. For example if You search for 8, You will have tons of results. If You search for 3635384, You will have far less, most likely only a few (or maybe only one result which is the best).

6. Some games are using encryptions to protect the game from hackers. In this case, You can still search for unknown value and changed/unchanged values. Maybe You will find what You seek.

That is all I can recommend for now.

Peace!

Geri

-

Источник: szemelyesintegracio.hu

Ссылка на комментарий
Поделиться на другие сайты

  • 6 лет спустя...
9 минут назад, kolhosnichello сказал:

Можно пожалуйста новую ссылку на variable engine 2.0. Невозможно скачать по указанной ссылке.

Опубликовано: November 15, 2010
Семь лет прошло уже :)

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.