![]() |
eXeL@B —› Оффтоп —› Разбор флешки |
Посл.ответ | Сообщение |
|
Создано: 17 сентября 2011 22:36 · Поправил: Isaev · Личное сообщение · #1 Цель сего бреда достать базу русских существительных из флеш-приложения (ссылка в след. посте) В нём есть снизу справа ссылка "Слова", нажав на которую показывается вся база А значит она грузится, а значит её можно стянуть Ценность базы в том, что она тщательно формируется автором приложения уже в течении более 3х лет (за что почёт ему и уважуха), почитав темы в группе игры невольно приходишь в ужас от проделанной работы. Я сам долгое время собирал похожую базу, но у меня она меньше раз в 10. Пробовал просто спросить, но похоже его действительно достали и к таким вопросам он очень неадекватно относится. Флешка чистая без деобфускаторов и т.д. но откуда оно читает слова при запуске, так и не нашёл (убил вчера вечер, но никаких идей... (GET и POST для этого явно не используется) Может кто глянуть на досуге? Покажите хотя бы где это во флешке, дальше я сам поковыряю ![]() ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 18 сентября 2011 02:11 · Личное сообщение · #2 |
|
Создано: 18 сентября 2011 03:04 · Поправил: Isaev · Личное сообщение · #3 Vovan666 пишет: Выложи чтоль саму флешку, неохото регаться. да, не подумал зы: он их даже в offline показывает... видимо я вообще слепой буду искать в ней ![]() зы2: В Res есть MakeSlovar(0), там создаётся словарь Code:
ниже читается побайтно с помощью _loc_12.readUnsignedByte(), расшифровывается и заполняет массив SLOVAR_ARR. Но где источник данных? По идее это должно быть где-то в Embed прописано (но я не нашёл). Из описания Если берётся весь SWF, то с какого смещения? Из следующего кода получается, что с самого начала до самого конца ища пробелы, как разделители слов... но это же бред! пробел в бинарнике может быть где угодно. Code:
И сигнатура там CWS, это же с компрессией. А используя файл как источник данных он его берёт в оригинале или уже расжатый? ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 18 сентября 2011 05:27 · Личное сообщение · #4 Isaev пишет: Но где источник данных? В Sothink SWF decompiler плохо видно, но если посмотреть в Flash Decompiler Trillix, то видно что в разделе Binary, есть ресурсы похожие на что-то зашифрованное. ![]() |
|
Создано: 18 сентября 2011 06:03 · Поправил: Isaev · Личное сообщение · #5 Vovan666 пишет: если посмотреть в Flash Decompiler Trillix, то видно что в разделе Binary, есть ресурсы похожие на что-то зашифрованное. у меня на семёрке все версии, что нашёл падают ![]() вот, твоя версия с руборда заработала да, похоже... по объёму Binary32 похож, только разделителей таких не видно... Как задаётся что это Binary, если в доке стоит, что "Встраивание байтов определенного ресурса из файла SWF недопустимо, но возможно встраивание всего файла SWF."? ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 19 сентября 2011 04:07 · Поправил: 4kusNick · Личное сообщение · #6 Вот сам эмбед Res_SlovarEmbed: Создаётся меременная с этими бинарными данными тут: 79 строка: Code:
Далее там же заполняется массив SLOVAR_ARR в цикле чтения данных из этого бинаря - если встречается UnsignedByte 32, то в SLOVAR_ARR добавляют пустой массив: Code:
если не встречается - то заполняется уже добавленный в SLOVAR_ARR массив -_local7 : Code:
В _local7 похоже уже готовые слова пишут. Думаю за пару-тройку часов можно восставноить и переписать алго, либо прямо так и рипнуть не парясь. Как используется SLOVAR_ARR можно посмотреть тут: в методе MakeSlovar. Удачи! ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. ![]() |
|
Создано: 19 сентября 2011 04:14 · Поправил: Isaev · Личное сообщение · #7 |
|
Создано: 19 сентября 2011 05:28 · Поправил: 4kusNick · Личное сообщение · #8 Попробую описать поподробней и немного дополнить то, что писал в личку. Чтобы всем доступно было, наверняка кому-то сможет помочь данная инфа. Итак, часто во флэшку эмбедят (читай встраивают, вкомпиливают) какие-нибудь двоичные данные - будь то "зашифрованный" словарь, как в данном случае, или "зашифрованная" другая флэшка или что угодно ещё бинарное. Так вот, в случае, когда эмбедят что-то двоичное, для этих данных обязательно создаётся обычный пустой класс с названием, которое указал разработчик рядом с Выглядит в декомпиляторах такой класс примерно так: Code:
Теперь о том, как и где искать то, что находится непосредственно в этом заэмбеденном "ресурсе". Помимо вышеприведённого класса, также во флэшку включаются сами двоичные данные в чистом виде и кладутся в тэг DefineBinaryData. Также добавляется запись, связывающая название класса с тэгом DefineBinaryData в другой тэг - в SymbolClass, в поле symbols. Выглядит такая запись там примерно так: Code:
или так: Code:
В зависимости от программы, в которой Вы ковыряете флэшку. Вот тут важно - 32 и "Res_SlovarEmbed". Далее достаточно просто просмотреть все тэги DefineBinaryData и найти тот, у которого characterId = 32 в нашем случае. Для наигации по флэшке, поиска тэгов и т.д. рекомендую использовать бесплатные утилитки типа SWFWire Inspector или Swix. Надеюсь, это поможет лучше понять как встраиваются двоичные данные во флэшки и где они находятся. ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. ![]() |
|
Создано: 19 сентября 2011 22:27 · Поправил: Isaev · Личное сообщение · #9 Vovan666 пишет: В Sothink SWF decompiler плохо видно, но если посмотреть в Flash Decompiler Trillix... Вообще раньше пользовал Sothink, теперь похоже буду Trillix Sothink мало того, что не всё показывает, ещё и не правильно декомпилит... Часто путается, особенно в арифметике. В данном случае, при рипе алго с него, расшифровка не пашет! При рипе из Trillix всё отлично работает. 1. Какой op-code у команды nop во флеше? 2. Есть нормальные дебагеры? чтобы можно было отследить значение переменных... пробовал SWFWire Debugger, ничего им увидеть не получилось ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 20 сентября 2011 14:03 · Поправил: LIZARD · Личное сообщение · #10 4kusNick, я массив с данными <DefineBinaryData CharacterId="32"> тоже нашел, но чем он закодирован? На SHA256 не очень похоже... И еще из сотника: Code:
Тут к _loc_12.position присваивается позиция первого символа первого слова и далее идет чтение, а какая это позиция? ![]() |
|
Создано: 20 сентября 2011 15:11 · Личное сообщение · #11 Isaev пишет: 1. Какой op-code у команды nop во флеше? 0x02 https://bitbucket.org/vinilios/swftools/src/3e9edb6b8241/lib/as3/opcodes.h ![]() |
|
Создано: 20 сентября 2011 17:44 · Поправил: Isaev · Личное сообщение · #12 LIZARD пишет: я массив с данными <DefineBinaryData CharacterId="32"> тоже нашел, но чем он закодирован? На SHA256 не очень похоже... Он не закодирован вообще, открытым текстом всё лежит Code:
перед именем CharacterId в word: 20 00 ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 20 сентября 2011 17:56 · Личное сообщение · #13 |
|
Создано: 20 сентября 2011 21:56 · Личное сообщение · #14 LIZARD о разном словарь криптуется просто Code:
----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 23 сентября 2011 15:12 · Личное сообщение · #15 |
|
Создано: 28 сентября 2011 19:36 · Личное сообщение · #16 Isaev Для анализа кода очень рекомендую использовать что-нибудь Burak'овское. Наприер AS3 Sorcerer, последнюю версию которого на борде запостили не так давно. Сотники, трилликсы и т.д. на защищённых файлах показывают себя не с лучшей стороны. ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. ![]() |
![]() |
eXeL@B —› Оффтоп —› Разбор флешки |