Flash Proxy

yurij

Lt. Commander
Registriert
Jan. 2008
Beiträge
1.064
So, ich versuche jetzt einen Flash Proxy zu schreiben.

Zweck: Normalerweise wenn man fertig kompillierte swf Files lädt,
kann man nur auf diejenigen internen Funktionen und Werte zugreifen, welche mit flash.external.ExternalInterface exportiert sind.

Ich will auf alle internen Funktionen und Variablen zugreifen.
Dafür versuche ich einen Flash Proxy zu schreiben.
Ich bin in Flash leider ein Laie. Ich weiss nicht mal ob mein Ansatz richtig ist.
Bis jetzt konnte ich meine eigene perparierte Testdatei "TestMe.swf"
in den Flash Proxy laden und erfolgreich auf interne Funktionen und Variablen zugreifen.

Unten ist der Testcode dazu:

Die eigentliche Client swf Datei besteht aus taussenden .as files welche wiederum weitere .swf files Laden, alles voll mit "Packages" und "Klassen".

Ich will nun wissen was ein Flash "Package" ist und wie man auf seine "Member" nativ zugreifen kann.

Weiterhin kennt jemand eine Methode alle Eigenschaften eines Flash Objekts generisch aufzulisten (zu enumerieren)?

Alles AS3.0

Code:
trace("Loading...");
TestButton.label = "Test";
var MainLoader:Loader = new Loader();
var Target:URLRequest=new URLRequest("TestMe.swf");
addChild(MainLoader);
MainLoader.load(Target);

TestButton.addEventListener(MouseEvent.CLICK, TestButtonEvent, false, 0, true);
function TestButtonEvent(event:Event):void {
  var Movie: *= MainLoader.content;
  var Clip: MovieClip = Movie;

  Clip.TestMeInternalFunction();
  Clip.InternalTestValue = "Test123";
  trace(Clip.InternalTestValue);
  // die oberen Zugriffe liefern korrekte Ergebnisse.

}
 
Zuletzt bearbeitet:
So, nach Tagen ich konnte alle Sicherheitsmechanismen (Security Boxen) aushebeln und das Ziel endlich erreichen.

Dafür musste ich ein Doppelproxy schreiben (ein HTTP Proxy in C# und ein SWF Proxy in Flash AS3).
Und noch einiges mehr machen.

Damit kann ich beliebige (auch fremde) Remote SWF Files laden und habe Zugriff auf die gesammte Instanz und Klassenhierarchie.

Übrigens habe ich auch lernen müssen, dass es sogar Wege gibt internal, protected und private Klassendeklarationen in externen Flashes zu überschreiben.

Dieses "Framework" kann ich zwar nicht veröffenlichen, aber für interessierte Flash Programmierer habe ich ein Tip:


Wenn man dynamisch externe SWF lädt und auf deren Klassen und statische Member zugreiffen möchte, ohne im Loader SWF alle externen Packages vor Kompilierungszeit importiert zu haben, gibt es eine nette Möglichkeit:

Das sind gerade zwei Zeilen Code, und schon habt ihr externe Klasse Instatiert, ohne import!

Code:
import flash.system.ApplicationDomain;
var MyRuntimeClassReference:Class = MyClipLoaderInstance.contentLoaderInfo.applicationDomain.getDefinition("ExternalPackage.ExternalClassName") as Class;

Danach könnt ihr mit der Klasse alles machen als ob es die eigene wäre:
var MyInstanceOfExternalClass:Object = new MyRuntimeClassReference();
trace(MyRuntimeClassReference.ExternalStaticProperty);

usw...
 
Zuletzt bearbeitet:
Zurück
Oben