我一直更了解二进制反转——x86/x64 类型的东西——所以最近我决定尝试反转一些闪存。
使用 SoThink 从 SWF 获取 .AS,但 SWF 正在从服务器提取数据。然后对数据进行去混淆处理并对其进行 .loadBytes 处理。
我已经制作了一个去混淆数据的文件(通过 FileReference.save()),但它不是一个有效的、独立的闪存文件。
我如何去反编译这个动态加载的闪存字节数组,或者至少将它转换成我可以使用的东西?
为清楚起见编辑:
var foo = new Loader(); // 稍后被addChild'ed var bar:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); foo.contentLoaderInfo.parameters.parent = this; foo.contentLoaderInfo.addEventListener(Event.COMPLETE, fooFunc); foo.contentLoaderInfo.addEventListener("securityError", this.onSecurityError); foo.loadBytes(someByteArray, bar); // 'someByteArray' 是来自服务器的反混淆的东西
在上述情况下,永远不会调用 'fooFunc',但根据提供的评论/反馈,一旦 'fooFunc' 发生,文件似乎已经完全加载。
这让我相信“someByteArray”是动态加载到 swf 中的二进制数据,但“someByteArray”数据不是有效的 SWF,如果这是有道理的。