Сейчас на форуме: site-pro, Rio, johnniewalker, vsv1 (+5 невидимых) |
eXeL@B —› Крэки, обсуждения —› Decrypt SWF, подверженный обфускации Amayeta SWF Encrypt |
<< . 1 . 2 . 3 . 4 . >> |
Посл.ответ | Сообщение |
|
Создано: 08 октября 2008 17:40 · Поправил: root-master · Личное сообщение · #1 Доброго времени суток! Я работаю над проектом, задачей которого является получение live статистики матчей на одном из серверов (http://www.atptennis.com/; флешка по адресу http://www.protennislive.com/frameset.asp?year=2008&wkno=39&lang=en&ta bno=1&eventid=M015&ref=www.atptennis.com) по определенным запросам. Проблема заключается в том, что данные с каких-то пор начали шифроваться (раньше они приходили в открытых xml-файлах). Этот вопрос поднимался на cracklab.ru http://www.exelab.ru/f/action=vthread&forum=5&topic=10317 Однако достучаться до человека, который вроде бы нашел алго, не получилось (его ник TamTam). Флешка есть в наличии, но не знаю, как к ней подступиться, чтобы хоть начать копать в нужном направлении на разрешение данного витка вопроса. Проблемы сл характера: SWF подвержен обфускации однозначно. Предположительно Amayeta SWF Encrypt. Попытка решения данного вопроса : - Пробовал пропускать флешку через SWF Protect Remover, но не помогло, только размер вырос. - В сети нашлось пару тем по защитам ActionScript в swf. http://www.woodmann.com/forum/showthread.php?t=11720 http://www.w oodmann.com/forum/showthread.php?t=10300 Однако те методы, которые использовались для снятия защиты уже порядком устарели, либо используется какая-то доп защита. Как следствие, Action Script-ы абсолютно нечитабельны. Среди констант нашлось что-то наподобие используемого словаря для шифрования входящего сообщения. Это было замечено ещё TamTam-ом. 1234567890ABCDEFGHIJKLMNOPQRTSUVWXYZabcdefghijklmnopqrstuvwxyz.,/?!@$% ^&*()_+-=:;~{}<> Пробовал ксорить : alph := '1234567890ABCDEFGHIJKLMNOPQRTSUVWXYZabcdefghijklmnopqrstuvwxyz.,/?!@$ % ^&*()_+-=:;~{}<>'; function GetIndSymb(ch: char): integer; var i: integer; begin for i:=1 to length(alph) do if alph[i] = ch then begin Result := i; Exit; end; end; function XorAlg(s: string): string; var CurIndEl: integer; begin for CurIndEl:=1 to length(s) do begin s[CurIndEl]:=chr(ord(s[CurIndEl]) xor byte(GetIndSymb(s[CurIndEl]))); end; Result := s; end; Однако тоже ничего не вышло. Все попытки вычислений позиций в словаре, побитовые умножения, сложения - ничего толком не дали. Вообще ничего. Запустить каким-либо образом виртуальную машину, чтобы перед тем, как, по идее, выполнялся бы байт-код по распаковки полученных шифр. данных от сервера, тоже понятия не имею Как. Сегодня на утро пришла несовсем здравая мысль конвертировать .swf в .exe - и пропустить через дебагер, однако как и предполагалось раньше, конвертер, судя по всему, создает лишь оболочку для запуска флешки, ни больше, ни меньше. Флешка в приложении (компрессор снял). Может как вариант закачивать эту статистику с др серверов, правда, опять же, насколько я знаю, бесплатным и быстрым, как этот сервер по получению статистики теннисных матчей, нету. Ещё раз напоследок хочу выделить возможные варианты решения проблемы: 1. Попробывать снять обфускацию с флешки 2. Найти подход к запуску виртуальной машины и начать исследовать 3. Пробовать известные алгоритмы шифрации информации и применять их к данной задаче, с учетом того, что предположительные данные, которые можно получить в результате, имеются в наличии. -- AQH18 :+M72JDN"eYV"Ybfp6682_DC8h<uI< 18.>Ou{l"aiy," H%288;5>46"z/xb" P@~LAFCk"p." +JqT"," F6l"hiUhvux" NGKg"Hqws.?Ttse,cqnvhos" ;O1V"tfczJnnhqeUathq.tY"Iv Предположительно начало файла расшифровывается в последовательность: <?xml version="1.0"?><MatchList_Live eventId=" -- Прошу, если кто может помочь в данном вопросе, или хотя бы наставить на истинный путь был бы оч признателен. Я писал модерам данного форума, но, видимо, сообщения не были доставлены до них в силу ранга моего аккаунта. Прошу, если есть возможность связаться с человеком TamTam, отписать в личку. 1024_08.10.2008_CRACKLAB.rU.tgz - de.swf |
|
Создано: 01 сентября 2009 22:52 · Личное сообщение · #2 |
|
Создано: 02 сентября 2009 01:04 · Личное сообщение · #3 |
|
Создано: 02 сентября 2009 17:16 · Личное сообщение · #4 Инструкция по деобфускации сабжа. см. предыдущую инструкцию, здесь только уточнения. 255-й тэг просто удаляем, если видим 253-й тэг, то: - заменяем тип данного тэга на тим следующего тэга - находим, если есть, ворованные байты, они расположены в начале следующего тэга до начала кода "обфускации", сигнатура кода 9B 07 00 04 05 - КОРРЕКТИРОВКА: в конце текущего 253-го тэга находим волшебные 5 байт: 99h 02h 00h XX XX здесь 99h - branch (переход), 02h 00h - длина тела инструкции, XX XX - смещение, куда прыгаем, относительно первого байта после конца данной инструкции. т.е. место начала настоящего кода в данном тэге узнаём по данному смещению. - рядом с найденными 5-ю байтами тоже есть 5 байт 99h 02h XX XX, которые можно грохнуть - таким образом грохаем в конце тэга 10 байт и дописываем 00h - END - в следующем тэге находим список констант, примерно это делается по сингатуре: push 1 96 03 00 00 01 00 push 1 96 03 00 00 01 00 getVariable 1C push ? 96 05 00 07 ?? ?? ?? ?? oldAdd/Sub 0A/0B setVariable 1D constants (size) ... 88 (?? ??) [....] size bytes ну или как-нибудь ещё. Последнее действие - собираем свежеполученный тэг: <украденные байты>+<константы>+<код>+00h Удаляем следующий тэг, корректируем размер текущего тэга и, если тэг внутри спрайта (тип 39 dec), то корректируем размер спрайта. По идее, после данных действий должен получиться рабочий кликабельный swf-ник. |
|
Создано: 02 сентября 2009 19:54 · Личное сообщение · #5 |
|
Создано: 02 сентября 2009 19:59 · Личное сообщение · #6 дай свою версию плз. у меня вот такое выдает. function () { \x03 = 1348 % 511 * 5; return (eval("\x03")); } // End of the function var \x01 = -1489 + \x04\x05(); for (\x01 = eval("\x01") + 247; eval("\x01") == 989; \x01 = eval("\x01") + 718) { \x01 = eval("\x01") - 918; if (false) { continue; } // end if } // end of for if (eval("\x01") == 394) { \x01 = eval("\x01") + 591; } // end if |
|
Создано: 02 сентября 2009 20:12 · Личное сообщение · #7 |
|
Создано: 02 сентября 2009 20:39 · Поправил: Nowar · Личное сообщение · #8 Вот, достаточно криво реализовал то, о чём писал. ВНИМАНИЕ: работает только на незапакованных swf-ках. (если вначале написано CWS, то надо распаковать чем-то, скажем, swfc11) update: Это не декомпилятор, а деобфускатор. Т.е. он приведёт swf-ку в состояние до деобфускации. А дальше её SWF decompiler'ом каким-нибудь можно посмотреть/распаковать 83ce_02.09.2009_CRACKLAB.rU.tgz - nowar_swf_decompiler.exe |
|
Создано: 02 сентября 2009 20:39 · Личное сообщение · #9 |
|
Создано: 02 сентября 2009 20:57 · Личное сообщение · #10 Delphir -А где выдает?В классах или скрипт в фрейме?Ты же выкладывал этот проект и там все читалось. Я не пробовал его править хотя и это возможно там просто объекты не кликабельны т.к. потеряли свойства конпки. декриптором обработай сначала.У меня сотник какой то криво-патченный но я его как то правил сам на других флэшках.Не думаю что это повлияло. |
|
Создано: 03 сентября 2009 00:45 · Личное сообщение · #11 |
|
Создано: 04 сентября 2009 11:07 · Поправил: Nowar · Личное сообщение · #12 |
|
Создано: 05 сентября 2009 12:44 · Поправил: yuB · Личное сообщение · #13 Делайте....я потом выложу флэшку с llvm и будет всем весело Другое дело что на сегодня ни flash ни AIR ни Flex не способны сделать что то достойное внимания.Любой функционал можно создать быстрее а то и лучше - самому чем реверсить всякий отстой.Все что может заслужить внимание это способы оптимизации...но они все известны. Так что там на счет сильверлайт?Но все же лучше заморочиться с натив клиентом от гугла.Это революционная технология и в случае успеха-всем другим грозит-забвение Знакомтесь-http://code.google.com/p/nativeclient/ Примеры в том числе Quake работают в стандалон и в браузере - безупречно.В принципе уже можно создавать проекты но пока не все браузеры поддерживаются. |
|
Создано: 05 сентября 2009 22:29 · Личное сообщение · #14 |
|
Создано: 11 марта 2010 17:54 · Поправил: grozny23 · Личное сообщение · #15 Delphir пишет: function (){ \x03 = 1348 % 511 * 5; return (eval("\x03"));} // End of the functionvar \x01 = -1489 + \x04\x05();for (\x01 = eval("\x01") + 247; eval("\x01") == 989; \x01 = eval("\x01") + 718){ \x01 = eval("\x01") - 918; if (false) { continue; } // end if} // end of forif (eval("\x01") == 394){ \x01 = eval("\x01") + 591; } // end if Расскажи подробнее пжлст, как тебе удалось это победить, что не делаю, всё равно код остаётся в таком виде!!! |
|
Создано: 02 мая 2010 03:18 · Поправил: Модератор · Личное сообщение · #16 бля Nowar!!! спасибо ТЕБЕ!!! не знаю что вообще сделано и как это работает, но декомпилирует, редактирует и работает!!!!!!!! РАБОТАЕТ!!!!!!!!!! правда 1 раз из 5-6 на один и тот же файл рано обрадовался((( подскажите пожалуйста, вот одну флешку обработал - все норм. но после этой флешки - перестал деобфускатор нормально работать - обрабатывает только заголовок и все От модератора: выучи кнопку Правка |
|
Создано: 17 июня 2010 16:40 · Личное сообщение · #17 Чавойто прогоняет, но не деобфусцирует ничего.. во вложении: default.swf - исходный out.swf - после прогона через деобфускат помогите, очень надо f470_17.06.2010_CRACKLAB.rU.tgz - Archive.7z |
|
Создано: 04 октября 2010 19:12 · Поправил: sllh · Личное сообщение · #18 Похоже, что с новой версией 6.0.9 они конкретно изменили алгоритм, до это версии все вскрывается этой утилиткой В 9ке теперь нету "краденных" байт, весь код дописывается внутрь тега, 255ый тег -- просто флаг упаковки флешки. Судя из |
|
Создано: 04 октября 2010 20:01 · Личное сообщение · #19 |
|
Создано: 04 октября 2010 20:30 · Личное сообщение · #20 uncleua, не знаю, если перезальют файл, посмотрю, я юзал триал, но у него (даже не взирая на ограничения) заявлена поддержка только до 6.0.4. Кстати, исходя из него, удалось понять, что добавляется новый метод, в каждый тег кода, с которым проводятся какие-то манипуляции, вот пытаюсь разобраться какие |
|
Создано: 05 октября 2010 02:05 · Личное сообщение · #21 |
|
Создано: 06 октября 2010 10:25 · Личное сообщение · #22 |
|
Создано: 06 октября 2010 15:38 · Личное сообщение · #23 |
|
Создано: 06 октября 2010 16:31 · Личное сообщение · #24 |
|
Создано: 06 октября 2010 19:10 · Личное сообщение · #25 |
|
Создано: 07 октября 2010 00:10 · Личное сообщение · #26 |
|
Создано: 07 октября 2010 01:09 · Личное сообщение · #27 |
|
Создано: 07 октября 2010 13:18 · Личное сообщение · #28 |
|
Создано: 07 октября 2010 15:24 · Личное сообщение · #29 |
|
Создано: 07 октября 2010 23:56 · Личное сообщение · #30 |
|
Создано: 08 октября 2010 01:27 · Поправил: 4kusNick · Личное сообщение · #31 sevenup пишет: SecureSWF лучше остальных флэшовых протов только в том, что обфусцирует красиво - она умеет детектить важные элементы, которые не стоит трогать, чтобы все не сломалось, а так - нет там ничего страшного, кроме обфускации, так что нечего там снимать... Или я не про то? ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. |
<< . 1 . 2 . 3 . 4 . >> |
eXeL@B —› Крэки, обсуждения —› Decrypt SWF, подверженный обфускации Amayeta SWF Encrypt |