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

[Фрагория] Направьте на правильную стезю игра на Flash MMORPG


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

Привет, не знал куда написать топик в браузерные игры или в ММО, потому что она работает как с браузера так и клиент есть у нее. Игра назвается Фрагория Flash MMORPG, есть swf файл. я его разобрал и изучал, но названия файлов и методов зашифрованы
https://prnt.sc/sliz7e
Еще и в ActionScript 3 нужно было разбираться. Изучал передачу пакетов

https://prnt.sc/slizrs

и насколько понял вот пример:

"FRTP. - заголовок

18.0 - 18 длина команды

IGCP - системный код команды а именно IG - скажем так  системный код по лутам (то что выпало из животного), а CP - забрать лут.
1188 -
3734488"

Далее не знаю что и как.

Пробовал CE использовать чтоб понять что и как у них там изменяется, но понял что у них всё динамически работает, если я отслеживаю деньги, они исчезают потом, всё исчезает.
Я изучал пакеты, шарился в коде, но не знаю каким образом мне дойти до того чего я хочу.
А я хочу если это возможно: попробовать изменить значения параметров (деньги, сила, количество вещей), написать ботов или внедрить длл-ку, или что там еще можно)

Знаю джаву, асм - PIC контроллры программировал. 

Попрошу не стебатся, а направить в правильною русло для изучения, а то много времени трачу, на то что может оказаться под ногами с вашей помощью. Спасибо

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

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

Можно посмотреть по поводу анализа пакетов во время события. Но ты, похоже, это и так уже делал, раз у тебя есть информация по коду команды. 

Можешь попробовать сам сделать отправку такого пакета, но для этого тебе нужно будет внедриться в пространство игры.

Один из наших участников для флеш игр написал инструмент, который позволяет находить сущности и все такое. Поищи по форуму тему FlashPlayerHack.

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

Только что, Xipho сказал:

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

Можно посмотреть по поводу анализа пакетов во время события. Но ты, похоже, это и так уже делал, раз у тебя есть информация по коду команды. 

Можешь попробовать сам сделать отправку такого пакета, но для этого тебе нужно будет внедриться в пространство игры.

Один из наших участников для флеш игр написал инструмент, который позволяет находить сущности и все такое. Поищи по форуму тему FlashPlayerHack.

 Спасибо за наводку, нашел, кстати в воскресенье залили, а я не увидел), отпишу если нужна будет помощь

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

Всё что выдала там программа:

Спойлер

1754
{Font} - {flash.text:Font}
{FontAsset} - {mx.core:FontAsset}
{CodecsEmbeder_FONT_CINZEL_BOLD} - {Embedings:CodecsEmbeder_FONT_CINZEL_BOLD}
{CodecsEmbeder_FONT_TINOS_REGULAR} - {Embedings:CodecsEmbeder_FONT_TINOS_REGULAR}
{CodecsEmbeder_FONT_TINOS_BOLD_ITALIC} - {Embedings:CodecsEmbeder_FONT_TINOS_BOLD_ITALIC}
{CodecsEmbeder_FONT_TINOS_BOLD} - {Embedings:CodecsEmbeder_FONT_TINOS_BOLD}
{CodecsEmbeder_FONT_CINZEL_REGULAR} - {Embedings:CodecsEmbeder_FONT_CINZEL_REGULAR}
{CodecsEmbeder_FONT_TINOS_ITALIC} - {Embedings:CodecsEmbeder_FONT_TINOS_ITALIC}
{Vector.<Number>$} - {__AS3__.vec:Vector$double}
{Vector.<uint>$} - {__AS3__.vec:Vector$uint}
{Vector.<int>$} - {__AS3__.vec:Vector$int}
{Vector.<*>$} - {__AS3__.vec:Vector$object}
{String$} - {String}
{Number} - {Number}
{int} - {int}
{uint} - {uint}
{Array$} - {Array}
{FragoriaClass} - {FragoriaClass}
{String} - {String}
{Function} - {Function}
{MethodClosure} - {builtin.as$0:MethodClosure}
{Namespace} - {Namespace}
{QName} - {QName}
{ApplicationDomain$} - {flash.system:ApplicationDomain}
{x8S4g2g7} - {Fragoria.L6c2n8u4:x8S4g2g7}
{Function$} - {Function}
{Error} - {Error}
{DefinitionError} - {DefinitionError}
{EvalError} - {EvalError}
{RangeError} - {RangeError}
{ReferenceError} - {ReferenceError}
{SecurityError} - {SecurityError}
{SyntaxError} - {SyntaxError}
{TypeError} - {TypeError}
{URIError} - {URIError}
{VerifyError} - {VerifyError}
{UninitializedError} - {UninitializedError}
{ArgumentError} - {ArgumentError}
{IOError} - {flash.errors:IOError}
{EOFError} - {flash.errors:EOFError}
{MemoryError} - {flash.errors:MemoryError}
{IllegalOperationError} - {flash.errors:IllegalOperationError}
{EventDispatcher$} - {flash.events:EventDispatcher}
{Loader$} - {flash.display:Loader}
{Number$} - {Number}
{Array} - {Array}
{P0n6s8e4$} - {Fragoria.h4T5E8N5:P0n6s8e4}
{Vector} - {__AS3__.vec:Vector}
{Vector.<*>} - {__AS3__.vec:Vector$object}
{Vector.<int>} - {__AS3__.vec:Vector$int}
{Vector.<uint>} - {__AS3__.vec:Vector$uint}
{Vector.<Number>} - {__AS3__.vec:Vector$double}
{XML} - {XML}
{XMLList} - {XMLList}
{Error$} - {Error}
{s8u4k5A0} - {[error]}
{ByteArray$} - {flash.utils:ByteArray}
{Font$} - {flash.text:Font}
{UninitializedError$} - {UninitializedError}
{ArgumentError$} - {ArgumentError}
{IOError$} - {flash.errors:IOError}
{EOFError$} - {flash.errors:EOFError}
{MemoryError$} - {flash.errors:MemoryError}
{IllegalOperationError$} - {flash.errors:IllegalOperationError}
{CodecsEmbeder_FONT_TINOS_ITALIC$} - {Embedings:CodecsEmbeder_FONT_TINOS_ITALIC}
{CodecsEmbeder_FONT_CINZEL_REGULAR$} - {Embedings:CodecsEmbeder_FONT_CINZEL_REGULAR}
{CodecsEmbeder_FONT_TINOS_BOLD$} - {Embedings:CodecsEmbeder_FONT_TINOS_BOLD}
{FocusDirection$} - {flash.display:FocusDirection}
{DisplayObject$} - {flash.display:DisplayObject}
{InteractiveObject$} - {flash.display:InteractiveObject}
{DisplayObjectContainer$} - {flash.display:DisplayObjectContainer}
{Stage$} - {flash.display:Stage}
{Sprite$} - {flash.display:Sprite}
{MovieClip$} - {flash.display:MovieClip}
{Rectangle$} - {flash.geom:Rectangle}
{FocusDirection} - {flash.display:FocusDirection}
{V5d7e4P1$} - {V5d7e4P1}
{DisplayObjectContainer} - {flash.display:DisplayObjectContainer}
{Sprite} - {flash.display:Sprite}
{EventDispatcher} - {flash.events:EventDispatcher}
{ApplicationDomain} - {flash.system:ApplicationDomain}
{DisplayObject} - {flash.display:DisplayObject}
{InteractiveObject} - {flash.display:InteractiveObject}
{Stage} - {flash.display:Stage}
{MovieClip} - {flash.display:MovieClip}
{Rectangle} - {flash.geom:Rectangle}
{CodecsEmbeder_FONT_TINOS_BOLD_ITALIC$} - {Embedings:CodecsEmbeder_FONT_TINOS_BOLD_ITALIC}
{CodecsEmbeder_FONT_TINOS_REGULAR$} - {Embedings:CodecsEmbeder_FONT_TINOS_REGULAR}
{CodecsEmbeder_codecsAsset$} - {Embedings:CodecsEmbeder_codecsAsset}
{ByteArrayAsset$} - {mx.core:ByteArrayAsset}
{IDataOutput2$} - {[error]}
{IDataInput2$} - {[error]}
{CompressionAlgorithm$} - {flash.utils:CompressionAlgorithm}
{CodecsEmbeder_FONT_CINZEL_BOLD$} - {Embedings:CodecsEmbeder_FONT_CINZEL_BOLD}
{FontAsset$} - {mx.core:FontAsset}
{ExternalInterface$} - {flash.external:ExternalInterface}
{A5d8q1V1} - {Fragoria.h4T5E8N5:A5d8q1V1}
{b1W6L7o6} - {Fragoria:b1W6L7o6}
{R5y1P0U3} - {Fragoria.K7f1k1Q7:R5y1P0U3}
{ExternalInterface} - {flash.external:ExternalInterface}
{o6h7A0o6} - {Fragoria.h4T5E8N5:o6h7A0o6}
{S7i6M3y3} - {Fragoria:S7i6M3y3}
{v8w1l1F3} - {Fragoria.W1J7o2I3:v8w1l1F3}
{v8w1l1F3$} - {Fragoria.W1J7o2I3:v8w1l1F3}
{Security$} - {flash.system:Security}
{P7i1y5y6$} - {V7U3f8X2.W3I5Q3F6:P7i1y5y6}
{CompressionAlgorithm} - {flash.utils:CompressionAlgorithm}
{Security} - {flash.system:Security}
{Capabilities} - {flash.system:Capabilities}
{P0n6s8e4} - {Fragoria.h4T5E8N5:P0n6s8e4}
{FragoriaClass$} - {FragoriaClass}
{a2L6r3A2} - {V7U3f8X2.W3I5Q3F6.g4w0h7u1:a2L6r3A2}
{a2L6r3A2$} - {V7U3f8X2.W3I5Q3F6.g4w0h7u1:a2L6r3A2}
{G3c2i5O8} - {V7U3f8X2.W3I5Q3F6.g4w0h7u1:G3c2i5O8}
{G3c2i5O8$} - {V7U3f8X2.W3I5Q3F6.g4w0h7u1:G3c2i5O8}
{b7J7r2M5} - {V7U3f8X2.W3I5Q3F6.g4w0h7u1:b7J7r2M5}
{b7J7r2M5$} - {V7U3f8X2.W3I5Q3F6.g4w0h7u1:b7J7r2M5}
{U2B4S1U6} - {V7U3f8X2.W3I5Q3F6.g4w0h7u1.v6W8G7g4:U2B4S1U6}
{U2B4S1U6$} - {V7U3f8X2.W3I5Q3F6.g4w0h7u1.v6W8G7g4:U2B4S1U6}
{ByteArray} - {flash.utils:ByteArray}
{ByteArrayAsset} - {mx.core:ByteArrayAsset}
{CodecsEmbeder_codecsAsset} - {Embedings:CodecsEmbeder_codecsAsset}
{u1A5e1c2$} - {Fragoria.L6c2n8u4:u1A5e1c2}
{x8S4g2g7$} - {Fragoria.L6c2n8u4:x8S4g2g7}
{s8u4k5A0$} - {[error]}
{LoaderInfo$} - {flash.display:LoaderInfo}
{o3G0D7P4} - {V7U3f8X2.W3I5Q3F6.g4w0h7u1:o3G0D7P4}
{A5d8q1V1$} - {Fragoria.h4T5E8N5:A5d8q1V1}
{o3G0D7P4$} - {V7U3f8X2.W3I5Q3F6.g4w0h7u1:o3G0D7P4}
{o6h7A0o6$} - {Fragoria.h4T5E8N5:o6h7A0o6}
{b1W6L7o6$} - {Fragoria:b1W6L7o6}
{u1A5e1c2} - {Fragoria.L6c2n8u4:u1A5e1c2}
{LoaderInfo} - {flash.display:LoaderInfo}
{V5d7e4P1} - {V5d7e4P1}
{Loader} - {flash.display:Loader}
{P7i1y5y6} - {V7U3f8X2.W3I5Q3F6:P7i1y5y6}
{Capabilities$} - {flash.system:Capabilities}
{XML$} - {XML}
{Class} - {Class}
{Class$} - {Class}
{MethodClosure$} - {builtin.as$0:MethodClosure}
{Namespace$} - {Namespace}
{Boolean} - {Boolean}
{Boolean$} - {Boolean}
{int$} - {int}
{uint$} - {uint}
{Vector$} - {__AS3__.vec:Vector}
{XMLList$} - {XMLList}
{QName$} - {QName}
{DefinitionError$} - {DefinitionError}
{EvalError$} - {EvalError}
{RangeError$} - {RangeError}
{ReferenceError$} - {ReferenceError}
{SecurityError$} - {SecurityError}
{SyntaxError$} - {SyntaxError}
{TypeError$} - {TypeError}
{URIError$} - {URIError}
{VerifyError$} - {VerifyError}
{Object$} - {Object}
{S7i6M3y3$} - {Fragoria:S7i6M3y3}
{R5y1P0U3$} - {Fragoria.K7f1k1Q7:R5y1P0U3}

 

 Черный экран и только классы, ну классы я так понял и сам нашел и вместимое в них изучал, но ты писал что

41 минуту назад, Xipho сказал:

Можешь попробовать сам сделать отправку такого пакета, но для этого тебе нужно будет внедриться в пространство игры.

можешь направить? Куда идти?

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

27 минут назад, hoster сказал:

можешь направить? Куда идти?

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

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

8 минут назад, Xipho сказал:

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

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

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

Я так и не могу понять, как мне от имени моей игры отправить пакеты, облазил забугор форум топовый по взлому игр, ничего не нашел там только о том как взламывать single player игры где расковыривают .swf файл и изменяют значение, а это фигня и кому они нужны) а вот ММО на flash вот что интересно. Только где инфу найти не могу понять... 

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

https://prnt.sc/sm6qh2
Походу здесь стоит, хорошая защита или мне кажется?
Я не могу отследить память и понять что происходит там. Скажите это защита? WPE не видит этот процесс вообще, может вместе с .exe есть библиотеки которые защищают все?

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

13 минут назад, Hack сказал:

WPE PRO не работает с 64bit процессами.

Могу скачать х32 на х64 она заработает?

1 минуту назад, Xipho сказал:

@hoster, ты говорил, что у этой игры есть обычный клиент. Он тоже использует Flash?

https://prnt.sc/sm7amr
Вот распакованная игра так выглядит

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

1 минуту назад, Xipho сказал:

чот какой-то коктейль невнятный. Все исследования из первого поста ты в браузерном клиенте проводил, или же в декстопном?

Пакеты изучал через клиент. 

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

Ну вот насколько я понял. Мне нужно создать прокси сервер, через него будут идти на клиент пакеты, потом пакеты которые в ответку будут идти на сервер, идут через прокси, а я их там модифицирую или подсовываю свои покеты которые хочу, но теперь стоит задача как это сделать? Кто то может направить? А то уже не знаю, что делать

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

21 час назад, hoster сказал:

Мне нужно создать прокси сервер

Для начала, тебе нужно понять, как ходят запросы на сервер - по http(s) протоколу, или же используют какую-то свою систему обмена. И от этого уже отталкиваться. Если http(s), там более-менее несложно прокси реализовать (https://m.habr.com/ru/post/213397/ - ссылочка для размышлений). Если же обмен идет по TCP (то есть, гоняются бинарные данные или строки напрямую через сокет) - тут уже сложнее. Помимо сокет сервера тебе придется писать еще перехватчик пакетов. Ну или использовать какое-то дополнительное ПО, которое умеет такое делать.

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

4 минуты назад, Xipho сказал:

Для начала, тебе нужно понять, как ходят запросы на сервер - по http(s) протоколу, или же используют какую-то свою систему обмена. И от этого уже отталкиваться. Если http(s), там более-менее несложно прокси реализовать (https://m.habr.com/ru/post/213397/ - ссылочка для размышлений). Если же обмен идет по TCP (то есть, гоняются бинарные данные или строки напрямую через сокет) - тут уже сложнее. Помимо сокет сервера тебе придется писать еще перехватчик пакетов. Ну или использовать какое-то дополнительное ПО, которое умеет такое делать.

с http(s) я и сам бы не парился) там общение через socket пакеты TCP 

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

40 минут назад, roma912 сказал:

Хук Send и recv ф-ий в сокете

Это очень сурово, особенно, если пакет уходит за несколько фреймов. Но да, с этого надо начинать, и разматывать до функции, где пакет уже собран и расшифрован.

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

Пакет  на сервер:

465254502e31382e300d0a0d0a494743500a313935320a3631373135323901  

FRTP.18.0

IGCP
1952
6171529

 

Пакет  на клиент :

465254502e31382e300d0a0d0a494743500a313935320a3631373135323901

FRTP.18.0

IGCP
1952
6171529

Такой же наверное отклик или проверка...

На клиент:  465254502e31332e300d0a0d0a303243520a320a323631313801

FRTP.13.0

02CR
2
26118

На сервер тут уже написано tcp payload

46 52 54 50 2e 31 30 2e 30 0d 0040   0a 0d 0a 41 43 43 50 0a 31 39 38 32 01

FRTP.10.0

ACCP
1982

https://prnt.sc/smxmo2
"FRTP." + Длинна битов (или команды) + ".0\r\n\r\n"

первая часть след строки IG - открыть лут например CP забрать из лута и закрыть его

а потом еще какие то данные. но с этим не разобрался, может идентификаторы вещей происходящих...

_loc1_ инициализация и есть шифрование команды, потом идёт отправка через  клас которые наследует Socket и EventDispatcher методом writeByte(param..)

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

3 минуты назад, hoster сказал:

потом идёт отправка через  клас которые наследует Socket и EventDispatcher методом writeByte(param..)

Ну так вот тебе надо подготовить свой пакет, положить его туда, где лежит param, и вызвать этот самый writeByte. 

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

13 минут назад, Xipho сказал:

Ну так вот тебе надо подготовить свой пакет, положить его туда, где лежит param, и вызвать этот самый writeByte. 

? это классно, только как? CE не берёт, x64dbg то же не берёт ее

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

11 минут назад, hoster сказал:

это классно, только как? CE не берёт, x64dbg то же не берёт ее

Ну, как вариант, отреверсить с помощью ida, выяснить, куда класть адрес параметра, и найти адрес начала функции отправки байтов. Потом из внешнего приложения сформировать буфер через WriteProcessMemory с нужными данными, а затем сделать CreateRemoteThread, или же сделать то же самое, но с помощью инжекта длл-ки.

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

19 минут назад, Xipho сказал:

Ну, как вариант, отреверсить с помощью ida, выяснить, куда класть адрес параметра, и найти адрес начала функции отправки байтов. Потом из внешнего приложения сформировать буфер через WriteProcessMemory с нужными данными, а затем сделать CreateRemoteThread, или же сделать то же самое, но с помощью инжекта длл-ки.

Idу тоже пробовал, там всё ???? только в начале программы есть инфа какая то... Можешь глянуть?

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

Ну смотри. На скриншоте есть даже пост запрос
Я бы начал с него. Посмотреть вообще насколько часто игра ими общается
А посмотреть очень просто любым сниффером

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

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

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

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