Siv*_*der 1 flash actionscript-3
在反编译混淆的 Adobe Flash 应用程序时,我注意到其中许多都包含加密的二进制组件:
我的问题是,如何在应用程序中包含二进制组件(如上所述)以及如何使用 ActionScript 加载它以进一步处理它?
注意:我的 IDE 是 Flash Builder,我正在使用 Adobe AIR 应用程序。
只是为了扩展@Denis-Kokorin 的答案并消除您的担忧......
我注意到其中许多包含加密的二进制组件:
请注意,“DefineBinaryData”是 SWF 格式的标准段(称为标签),而不是反编译器技巧。要让它存在,您只需[embed]通过 AS3 代码创建一个文件即可。这将成为标签中定义的二进制数据。
我的问题是,如何在应用程序中包含二进制组件(如上所述)以及如何使用 ActionScript 加载它以进一步处理它?
加载取决于您嵌入的文件格式。用于Bitmap图像(jpg、png 等)和movieClipSWF,用于Sound将 MP3 数据解码为可播放 (PCM) 声音。NetstreamAppendBytes将解码视频字节。如果您想要“加密”任何内容,请在嵌入之前执行此操作。您必须决定使用哪种加密方法或发明自己的加密方法,当然,您的 AS3 应用程序在尝试处理它之前必须具有“解密”代码。
在下面的代码中,我展示了加载不同格式内容的示例。从那里您可以照常处理它(例如:bitmapdata编辑像素或sound.extract编辑音频样本等)。我还展示了如何将字节放入 incase 中ByteArray(如果您要编辑字节值)。阅读处理ByteArray的手册。本指南也可能对您有所帮助。
package
{
import flash.display.MovieClip;
import flash.utils.*;
import flash.display.*;
import flash.events.*;
import flash.media.*;
public class embed_test extends MovieClip
{
[Embed(source="image.jpg")] private var emb_Image : Class;
[Embed(source="track.mp3")] private var emb_MP3 : Class;
[Embed(source="vctest.swf")] private var emb_SWF : Class;
//# for access to bytes (binary data)
[Embed(source="image.jpg", mimeType="application/octet-stream")] private var emb_Bytes : Class;
public function embed_test()
{
var my_Pic : Bitmap = new emb_Image();
addChild(my_Pic); //# display image on stage
var my_Snd : Sound = new emb_MP3();
my_Snd.play(); //# play sound
var my_Swf : MovieClip = new emb_SWF();
addChild(my_Swf); //# display SWF on stage
var my_BA : ByteArray = new emb_Bytes as ByteArray;
trace("bytes length : " + my_BA.length); //# check bytes total is correct
trace("bytes (HEX) : " + bytes_toHex(my_BA) ); //# check bytes in hex format
}
private function bytes_toHex (input : ByteArray) : String
{
var strOut : String = ""; var strRead:String = "";
var input_Size : uint = input.length;
input.position = 0;
for (var i:int = 0; i < input_Size; i++)
{
strRead = input.readUnsignedByte().toString(16);
if(strRead.length < 2) { strRead = "0" + strRead; } //# do padding
strOut += strRead ;
}
return strOut.toUpperCase();
}
}
}
Run Code Online (Sandbox Code Playgroud)