Сейчас на форуме: asfa, Rio, _MBK_, Adler (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Откупорить SWF-шку
Посл.ответ Сообщение

Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 января 2013 10:21
· Личное сообщение · #1

Привет, товарищи!

Пытаюсь снять ограничения на SWF-файл.

Там была защита по рефереру, а также матрешка, один файл внутри другого, зашифрованный. Эти две защиты я обошел и достал сам главный файл.

Но и в нем защита через crossdomain.xml - если открываешь на неразрешенном сайте, вместо анимации выводит дурацкий баннер со ссылкой на оффсайт.

Попробовал я в Hex-редакторе поменять ссылку crossdomain.xml на свой сервер, и разумеется добавил в туда свой домен. Но почему-то ничего не изменилось, по-прежнему выводится баннер.

Помогите, плиз!!! )))

Вот, собственно, он:
http://rusfolder.com/34759184




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 30 января 2013 11:07
· Личное сообщение · #2

Если вы внимательно посмотрите на исходник, то все будет понятно.
Там во-первых есть такое:

if (root.loaderInfo.url == root.loaderInfo.loader.root.loaderInfo.loaderURL)

Вот тут оно уже выдаст эксепшн, котороый отловится try...catch'ем во внешнем методе и выведет баннер.
А выпадет в эксепшн оно потому, что root.loaderInfo.loader == null, ибо при запуске SWF напрямую у неё понятное дело нет никакого лоадеара (он будет, если у SWF есть прелоадер).

То есть в этой строке проверяются две вещи - есть ли у флэшки прелоадер и совпадает ли URL у прелоадера и флэшки.

Уже после этого подгружается XML с разрешёнными доменами с их сайта: http://elite.cards.imgsmail.ru/crossdomain.xml

И после этого происходит проверка, причем в коде явно добавляется http:// ко всем элементам из XML.

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

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.


| Сообщение посчитали полезным: nety

Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 января 2013 11:24 · Поправил: nety
· Личное сообщение · #3

4kusNick, спасибо за совет, вот я разворотил SWF RABCDasm'ом, а есть какой-то инструмент для редактирования полученных .asasm файлов в удобочитаемом виде, или надо вручную разбираться?



Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 января 2013 11:28
· Личное сообщение · #4

Если не трудно, поясните, что именно нужно отредактировать в MainTimeline.class.asasm, чтобы убрать проверку наличия лоадера.




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 30 января 2013 11:59 · Поправил: 4kusNick
· Личное сообщение · #5

Ну, полученные файлы легко редактируются любым текстовым редактором.
На счет пояснить - мне проще сделать это за вас (что тут я делать не буду, не по правилам форума это =P), чем пояснять как, зачем и почему надо редактировать тот или иной участок байткода.

Рекомендую поковырять что-то простое чтобы понять что к чему. Попробуйте сами написать что-то элементарное, скомпилировать в swf и поковыряться, попробовать что-то поменять - думаю, это самый быстрый способ разобраться в байткоде.

Ну а если сами не хотите разбираться и вам это вообще разово нужно - то обращайтесь в запросы на взлом или поиск специалистов - вам там быстро все почикают.

И да, пользуйтесь Правкой, не плодите посты подряд (а для спасиб тут предусмотрена специальная кнопка - Полезное сообщение).

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 января 2013 12:10
· Личное сообщение · #6

Что редактируются я вижу, только не разберусь, что вырезать, а что оставить )
Про "запросы" в курсе, только вот сам хотел разобраться, хоть и с подсказкой.
Я не халявщик, но хотя бы приблизительно ткните, что резать )

loaderInfo я там вижу, а вот что делать дальше - ???

Предполагаю, что можно заменить

Code:
  1. if (root.loaderInfo.url == root.loaderInfo.loader.root.loaderInfo.loaderURL)


на

Code:
  1. if (root.loaderInfo.url == null)


Но как это написать правильно на байткоде?




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 30 января 2013 12:18
· Личное сообщение · #7

Нет, если вы замените на
Code:
  1. if (root.loaderInfo.url == null)

условие не будет выполняться, ведь root.loaderInfo.url не null.

Замените это на

Code:
  1. if (root.loaderInfo.url == root.loaderInfo.url)

Чтобы условие проходило.

На самом деле там еще до этой строки есть обращение к root.loaderInfo.loader.root.loaderInfo.loaderURL, его можно тоже сократить до root.loaderInfo.url, чтобы оно не падало.

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

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 января 2013 12:30 · Поправил: nety
· Личное сообщение · #8

То есть, получается

Code:
  1.       getlex              QName(PackageNamespace(""), "root")
  2.       getproperty         QName(PackageNamespace(""), "loaderInfo")
  3.       getproperty         QName(PackageNamespace(""), "url")
  4.       getlex              QName(PackageNamespace(""), "root")
  5.       getproperty         QName(PackageNamespace(""), "loaderInfo")
  6.       getproperty         QName(PackageNamespace(""), "loader")
  7.       getproperty         QName(PackageNamespace(""), "root")
  8.       getproperty         QName(PackageNamespace(""), "loaderInfo")
  9.       getproperty         QName(PackageNamespace(""), "loaderURL")


Меняем на

Code:
  1.       getlex              QName(PackageNamespace(""), "root")
  2.       getproperty         QName(PackageNamespace(""), "loaderInfo")
  3.       getproperty         QName(PackageNamespace(""), "url")
  4.       getlex              QName(PackageNamespace(""), "root")
  5.       getproperty         QName(PackageNamespace(""), "loaderInfo")
  6.       getproperty         QName(PackageNamespace(""), "url")


Правильно?

UPD:

Поменял как указано выше, теперь в декомпиляторе вижу, что условие соответственно изменилось на:

Code:
  1. if (root.loaderInfo.url == root.loaderInfo.url)


URL к crossdomain.xml указал свой, но по-прежнему баннер. Что-то еще упущено?




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 30 января 2013 13:05
· Личное сообщение · #9

Да, вы посмотрите на код, там же все понятно.

Во-первых как я уже писал, там ещё выше есть обращение к root.loaderInfo.loader.root.loaderInfo.loaderURL (до того сравнения что вы правили) - там пытаются протрейсить это значение и на этом оно понятное дело падает.

Ну и дальше по ходу кода - после загрузки XML там сравнивается текущий URL с http://+URL из XML.
Если флэшку запускаете локально, то понятное дело в текущем URL никаких http:// не будет.

Я там вообще поправил все так, чтобы не заморачиваться, и выглядит оно в итоге так:
Code:
  1. public function loadDone(_arg1):void
  2. {
  3.     var _local4:XML;
  4.     this.traceLog(_arg1.toString());
  5.     this.loadCard();
  6.     return;
  7. }


Я просто поднял вызов this.loadCard(); и returnvoid в начало метода, чтобы они вызывались до инициализации двух булевых локальных переменных.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 1.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 января 2013 14:45
· Личное сообщение · #10

Ура )))) Получилось.


 eXeL@B —› Вопросы новичков —› Откупорить SWF-шку
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати