Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.21.162.87] |
|
Сообщ.
#1
,
|
|
|
Приветствую. Есть следующий код
//ActionScript 3.0 // class Fr package { import flash.display.*; import flash.external.*; import flash.net.*; import flash.system.*; import flash.text.*; public class Fr extends flash.display.Sprite; { public function Fr() { super(); trace("Started!"); var loc1:* = null; var loc2:* = null; flash.system.Security.allowDomain("*"); if (flash.external.ExternalInterface.available) { flash.external.ExternalInterface.addCallback("getData",getData); flash.external.ExternalInterface.addCallback("setData",setData); } var loc3:* = this.loaderInfo.parameters["clb"]; var loc4:* = []; var loc5:* = 0; var loc6:* = 0; var loc7:* = flash.text.Font.enumerateFonts(true); for each (loc1 in loc7) { loc4[loc5] = loc1.fontName; loc5 = loc5 + 1; } loc2 = {"fonts":loc4,"version":flash.system.Capabilities.version,"lso":getData()}; if (flash.external.ExternalInterface.available) { flash.external.ExternalInterface.call(loc3,loc2); } return; } public static function getData():String { var obj_value:String; var lso:flash.net.SharedObject; var loc1:*; obj_value = null; lso = null; try { lso = flash.net.SharedObject.getLocal("dtawztrf"); if (lso.data.value != null) { obj_value = lso.data.value; } return obj_value; } catch (e: * ) { return "0"; } return "0"; } public static function setData(arg1:String):void { var param1:String; var lso:flash.net.SharedObject; var value:*; var loc1:*; lso = null; param1 = arg1; value = param1; try { lso = flash.net.SharedObject.getLocal("dtawztrf"); lso.data.value = value; lso.flush(); } catch (e:Error) { trace(((("Error: " + e.message) + "\n") + e.getStackTrace())); } return; } } } В чем его суть, если кто понимает, сам я к сожалению в as не силен... |
Сообщ.
#2
,
|
|
|
Разбираться лень, но код принимает параметры извне, вызывает внешние интерфейсы (например javascript функции) и работает со шрифтами. А какова задача? Здесь видно, что это декомпилированный кусок. Но зачем?
|
Сообщ.
#3
,
|
|
|
Цитата piksel @ Разбираться лень, но код принимает параметры извне, вызывает внешние интерфейсы (например javascript функции) и работает со шрифтами. А какова задача? Здесь видно, что это декомпилированный кусок. Но зачем? Знакомому сайт заразили, на подключали кодов, вот меня попросили глянуть, что и как. Сразу вызвал интерес нулевой размер swf файла, начал его ковырять и вот что получил в итоге. Этому файл передается параметр flashvars <object type="application/x-shockwave-flash" data="http://eohkgqc.about-home.info/js/img/fr.swf?v=1" width="1" height="1" id="plshldr_1393783449126" style="visibility: visible;"><param name="quality" value="high"><param name="bgcolor" value="#F7F7F7"><param name="allowscriptaccess" value="always"><param name="scale" value="noscale"><param name="salign" value="tl"><param name="align" value="l"><param name="wmode" value="opaque"><param name="flashvars" value="clb=frcb_plshldr_1393783449126"></object> |
Сообщ.
#4
,
|
|
|
Я прокомментировал код. Хотя это вряд ли чем-то поможет. Сама флешка относительно безобидна имхо (разве что выдает список всех шрифтов пользователя в javascript и дает доступ до локального хранилища LocalStorage через javascript). По моему мнению надо искать в js вызовы getData, setData, frcb_plshldr_1393783449126, чтобы понять корень зла.
package { import flash.display.*; import flash.external.*; import flash.net.*; import flash.system.*; import flash.text.*; public class Fr extends flash.display.Sprite { public function Fr() { // выполняется конструктор родительского класса super(); trace("Started!"); var loc1:* = null; // сслужебная переменная var loc2:* = null; // параметры передаваемые во вне // разрешает выполнение кода из любого домена внутри текущего flash.system.Security.allowDomain("*"); // регистрирует методы getData и setData для вызова извне (javascript'а) if (flash.external.ExternalInterface.available) { flash.external.ExternalInterface.addCallback("getData",getData); flash.external.ExternalInterface.addCallback("setData",setData); } // читается значение переменной со страницы HTML // clb=frcb_plshldr_1393783449126 var loc3:* = this.loaderInfo.parameters["clb"]; var loc4:* = []; // имена всех шрифтов var loc5:* = 0; var loc6:* = 0; // все шрифты пользователя (flash.text.Font), даже не системные var loc7:* = flash.text.Font.enumerateFonts(true); for each (loc1 in loc7) { loc4[loc5] = loc1.fontName; loc5 = loc5 + 1; } loc2 = { "fonts":loc4, // имена всех шрифтов "version":flash.system.Capabilities.version, // версия флеш-плеера пользователя "lso":getData() // значение, сохраненное у пользователя на диске в LocalStorage }; if (flash.external.ExternalInterface.available) { // вызывает внешнюю функцию на странице (js), // название которой должно быть frcb_plshldr_1393783449126 // с параметрами в loc2 flash.external.ExternalInterface.call(loc3,loc2); } return; } // вычитывает переменную dtawztrf, сохраненную у пользователя на диске public static function getData():String { var obj_value:String; var lso:flash.net.SharedObject; var loc1:*; obj_value = null; lso = null; try { lso = flash.net.SharedObject.getLocal("dtawztrf"); if (lso.data.value != null) { obj_value = lso.data.value; } return obj_value; } catch (e: * ) { return "0"; } return "0"; } // сохраняет переменную dtawztrf пользователю на диск (извне) public static function setData(arg1:String):void { var param1:String; var lso:flash.net.SharedObject; var value:*; var loc1:*; lso = null; param1 = arg1; value = param1; try { lso = flash.net.SharedObject.getLocal("dtawztrf"); lso.data.value = value; lso.flush(); } catch (e:Error) { trace(((("Error: " + e.message) + "\n") + e.getStackTrace())); } return; } } } |
Сообщ.
#6
,
|
|
|
Очень много букв в скрипте. Пристально смотреть не стал. Но могу предположить, что он размещает у клиента всякие разные баннеры. Может накрутчик какой? Не проще эффект в браузере посмотреть со включенным отладчиком например?
PS: а флешка действительно нужна для сбора дополнительной инфы (основная собирается js) с компа пользователя (список шрифтов). Странно, что они больше инфы флешкой не собирают. Инфа эта возможно используется для идентификации компа пользователя. |
Сообщ.
#7
,
|
|
|
Цитата piksel @ Очень много букв в скрипте. Пристально смотреть не стал. Но могу предположить, что он размещает у клиента всякие разные баннеры. Может накрутчик какой? Не проще эффект в браузере посмотреть со включенным отладчиком например? PS: а флешка действительно нужна для сбора дополнительной инфы (основная собирается js) с компа пользователя (список шрифтов). Странно, что они больше инфы флешкой не собирают. Инфа эта возможно используется для идентификации компа пользователя. Это не накрутчик, а видимо, скрипт какой то баннерной сети. Непонятно, зачем флешке передается параметр plshldr_1393783449126 insertBanner: function(div, renderInfo, event) { var bnrCntnr = doc.createElement('div'); div.appendChild( bnrCntnr ); bnrCntnr.style.width = renderInfo['width'] + 'px'; bnrCntnr.style.height = renderInfo['height'] + 'px'; bnrCntnr.className += 'br-cntnr'; if (!this.flashInstalled && renderInfo['stubSrc']) { bnrCntnr.style.background = "url(" + bannerBlock.initData['imgDomain'] + renderInfo['stubSrc'] + ") no-repeat 50% 50%"; } if (renderInfo['iframeUrl']) { this.embedFrm(renderInfo['iframeUrl'], encodeURIComponent(renderInfo['trackingDomain'] + utils.escapeURI(renderInfo['clickUri'] )), bnrCntnr, renderInfo['width'], renderInfo['height']); } else { if (utils.endsWith( renderInfo.src, '.swf' )) { var swfReplacer = doc.createElement('div'); swfReplacer.id = 'swf' + new String(Math.random()).slice(2); bnrCntnr.appendChild(swfReplacer); this.embedSWF(renderInfo['src'], swfReplacer.id, encodeURIComponent(renderInfo['trackingDomain'] + utils.escapeURI(renderInfo['clickUri'] )), swfReplacer.id, renderInfo['width'], renderInfo['height']); } else { bnrCntnr.style.background = "url(" + bannerBlock.initData['imgDomain'] + renderInfo['src'] + ") no-repeat 50% 50%"; } } } }; |
Сообщ.
#8
,
|
|
|
Цитата pov8 @ не накрутчик, а видимо, скрипт какой то баннерной сети Ну, это я и имел в виду. Т.е. они накручивают себе просмотры за счет незаинтересованных сайтов. Цитата pov8 @ зачем флешке передается параметр параметр - id текущего элемента и в коде он есть (строка 700). Т.е. каждый раз генерится новый элемент, видимо чтобы подсчитать уникальные. Цитата pov8 @ неясна данная часть похоже на вставку баннера this.embedSWF(renderInfo['src'] или если его нет, то размещение сборщика статистики. Но безусловно, необходимо разбирать детально для полного понимания. Я не вижу в этом большого смысла. |
Сообщ.
#9
,
|
|
|
Цитата piksel @ Цитата pov8 @ не накрутчик, а видимо, скрипт какой то баннерной сети Ну, это я и имел в виду. Т.е. они накручивают себе просмотры за счет незаинтересованных сайтов. Цитата pov8 @ зачем флешке передается параметр параметр - id текущего элемента и в коде он есть (строка 700). Т.е. каждый раз генерится новый элемент, видимо чтобы подсчитать уникальные. Цитата pov8 @ неясна данная часть похоже на вставку баннера this.embedSWF(renderInfo['src'] или если его нет, то размещение сборщика статистики. Но безусловно, необходимо разбирать детально для полного понимания. Я не вижу в этом большого смысла. Пытаюсь разобраться детально, дабы выявить левые ссылки, непонятно так сразу, откуда они берутся. Нигде явно их нету, только этот скрипт... Убрал его, они опять лезут и скрипт снова перезаписывается. Видимо он с ротатора какого то приходит... Добавлено Вот еще, что хотел спросить, как в swf передается параметр flashvars, ведь явно его не видно, get или post запроса не видно. Однако он передается, или, я не прав? |
Сообщ.
#10
,
|
|
|
Цитата pov8 @ Пытаюсь разобраться детально Я бы предложил ставить инструкцию debugger в код javascript в процессе отображения страницы (и использовать например firebug), так можно быстрее поймать нужное, чем вычитывать все скрипты. Цитата pov8 @ как в swf передается параметр flashvars как же? <param name="flashvars" value="clb=frcb_plshldr_1393783449126"> и в js коде я видел, сейчас уже не скажу. Цитата pov8 @ get или post запроса не видно из флеша если идет, то его и не будет видно без специальных инструментов. Но во флешке из 1 поста нет прямых внешних запросов (может бы в других флешках). |
Сообщ.
#11
,
|
|
|
Дебаггер то я хромовый вроде освоил, интересно, что флешка и правда передает шрифты, плагины и прочее...
Далее, эта строка передается в функцию паковки md5_hex, где на выходе уже идет md5 сумма. Но смысл то всей этой бороды, если исходная строка (до преобразования со всеми плагинами и прочем) никуда не отсылается! md5 то обратно не распакуешь, например, как base64, к чему все это, если проверить не удасться, md5 хеш сумму чего нам прислали. Какой то дебильный код, если быть честным |
Сообщ.
#12
,
|
|
|
Возможно у них флешевые баннеры вычитывают эту инфу и шлют куда-нибудь. А может просто код не полный получилось поставить, что называется не доломали. Вариантов как грязи.
|
Сообщ.
#13
,
|
|
|
Цитата piksel @ Возможно у них флешевые баннеры вычитывают эту инфу и шлют куда-нибудь. А может просто код не полный получилось поставить, что называется не доломали. Вариантов как грязи. А что за инструментами можно поснифать флеш данные, почему то они не видны в обычном http трафике |
Сообщ.
#14
,
|
|
|
Цитата pov8 @ почему то они не видны в обычном http трафике Потому что они идут не через апи браузера, а через апи плагина. Цитата pov8 @ А что за инструментами можно поснифать флеш данные Любой снифер их увидит - обычные http запросы же. Можно, опять же, для FF использовать Flashbug какой-нибудь... |
Сообщ.
#15
,
|
|
|
Вот появилось время, снова сижу с этим скриптом. По поводу debugger, как его лучше ставить? Можно ли вывести данные всего скрипта?
А swf отладить так и не получилось, то ли у меня руки не из того места ростут, то ли FlashBug криво реализован. Вместо данных пустое окошко.... |