[转]保护你的flash(as3)程序基于socket方式传送swf文件

前段时间在flashseer看到有人提到:可以通过socket方式传送swf文件,让用户无法获取到swf文件...
当时还没有出as3的反编译,所以对程序的保护没有在意.随着反编译程序的平民化,不希望别人看到源代码的朋友就比较着急...

通过socket方式传送swf文件来避免泄漏源代码的思路(只适用as3):
让主程序的loader(前台swf)通过socket连接到后台程序,然后请求需要的主程序文件.后台读取主程序数据通过socket发送给主程序的loader.前台swf适用Loader.loadBytes方法显示主程序文件.

下面是测试的源程序:

前台loader:

//-------------
//Base64和StringUtil在网上自己找吧
import Base64;
import StringUtil;
var socket = new Socket();
socket.connect("localhost", 11915);

socket.addEventListener(Event.CLOSE, closeHandler);
socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);

var response:String;

function writeln(str:String):void {
 str += "";
 try {
  socket.writeUTFBytes(str);
 } catch (e:IOError) {
  trace(e);
 }
}

function sendRequest():void {
 trace("sendRequest");
 response = "";
 writeln('bin');
 socket.flush();
}

function readResponse():void {
//接受数据
 var str:String = socket.readUTFBytes(socket.bytesAvailable);
 response += str;
//当数据以end结束的时候,数据传输结束
 if(StringUtil.endsWith(str,'end'))
 {
  response = response.substr(0,response.length-3);
//把字符串转换为ByteArray
  var ba = Base64.decodeToByteArray(response);
  //trace('bytearray=====',ba);
  var l:Loader = new Loader();
//从 ByteArray 对象中所存储的二进制数据中加载。
  l.loadBytes(ba);
  //trace(l.content);
  addChild(l);
 }
}

function closeHandler(event:Event):void {
 trace("closeHandler: " + event);
}

function connectHandler(event:Event):void {
 trace("connectHandler: " + event);
 sendRequest();
}

function ioErrorHandler(event:IOErrorEvent):void {
 trace("ioErrorHandler: " + event);
}

function securityErrorHandler(event:SecurityErrorEvent):void {
 trace("securityErrorHandler: " + event);
}

function socketDataHandler(event:ProgressEvent):void {
 trace("socketDataHandler: " + event);
 readResponse();
}

//后台scoket程序,由于适用php写比较简单,就用php写了.

<?php
//error_reporting(E_ALL);
error_reporting(0);
set_time_limit(0);

ob_implicit_flush();

$address = 'localhost';
$port = 11915;

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
echo "socket_create() failed: reason: " . socket_strerror($sock) . ""n";
}

if (($ret = socket_bind($sock, $address, $port)) < 0) {
echo "socket_bind() failed: reason: " . socket_strerror($ret) . ""n";
}

if (($ret = socket_listen($sock, 5)) < 0) {
echo "socket_listen() failed: reason: " . socket_strerror($ret) . ""n";
}
echo "connect.";
do {
if (($msgsock = socket_accept($sock)) < 0) {
echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . ""n";
break;
}

do {

  socket_recv($msgsock, $buf, 2048, 0);
  if ($buf == '') {
socket_close($msgsock);
    echo "some one quit";
break;
}
  else if($buf == 'bin')
  {
//读取主程序数据
   $f = fopen('main.swf','r');
   $data = fread($f,filesize('main.swf'));
   fclose($f);
//转换为字符串
   //echo base64_encode($data);
   $talkback = base64_encode($data).'end';
  }
//发送
socket_send($msgsock, $talkback, strlen($talkback),0);
} while (true);
socket_close($msgsock);
} while (true);

socket_close($sock);
?>

时间: 2024-09-20 23:06:32

[转]保护你的flash(as3)程序基于socket方式传送swf文件的相关文章

Android平台基于Pull方式对XML文件解析与写入方法详解_Android

本文详细讲述了Android平台基于Pull方式对XML文件解析与写入方法.分享给大家供大家参考,具体如下: XML技术在跨平台的情况下的数据交互中得到了广泛的应用,假如我们需要开发一个Android应用程序,需要同服务器端进行数据交互,通过XML文件可以很方便的在Android平台和服务器之间进行数据传输,具体实现涉及到对XML文件进行解析及写入的技术.本文实现在Android平台上基于Pull方式对XML文件解析的技术. XmlPullParser是一个Java实现的开源API包(源码下载地

Android平台基于Pull方式对XML文件解析与写入方法详解

本文详细讲述了Android平台基于Pull方式对XML文件解析与写入方法.分享给大家供大家参考,具体如下: XML技术在跨平台的情况下的数据交互中得到了广泛的应用,假如我们需要开发一个Android应用程序,需要同服务器端进行数据交互,通过XML文件可以很方便的在Android平台和服务器之间进行数据传输,具体实现涉及到对XML文件进行解析及写入的技术.本文实现在Android平台上基于Pull方式对XML文件解析的技术. XmlPullParser是一个Java实现的开源API包(源码下载地

基于socket和javaFX简单文件传输工具_java

本文实例介绍了基于socket和javaFX简单文件传输工具,分享给大家供大家参考,具体内容如下 package application; import java.io.File; import org.james.component.ButtonBox; import org.james.component.FileReceiverGrid; import org.james.component.FileSenderGrid; import javafx.application.Applica

php与flash as3 socket通信传送文件实现代码_php技巧

前段时间在flashseer看到有人提到:可以通过socket方式传送swf文件,让用户无法获取到swf文件- 当时还没有出as3的反编译,所以对程序的保护没有在意.随着反编译程序的平民化,不希望别人看到源代码的朋友就比较着急- 通过socket方式传送swf文件来避免泄漏源代码的思路(只适用as3): 让主程序的loader(前台swf)通过socket连接到后台程序,然后请求需要的主程序文件.后台读取主程序数据通过socket发送给主程序的 loader.前台swf适用Loader.load

flash as3 设置文件框焦点focus方法

flash as3 设置文件框焦点focus方法 lash文件和ActionScript文件要放到同一目录下,并且注意ActionScript文件名为类名,在flash文件的属性面板的类中填写focus. package {   import flash.display.Sprite;   import flash.text.TextField;   import flash.text.TextFieldType;   import flash.events.MouseEvent;   publ

Flash AS3.0构建简单的声音可视化程序(波型图)

本例为Flash AS3.0实例教程,在教程中我们将学习运用SoundMixer.computeSpectrum() 方法来构建简单的声音可视化程序(即波形图),希望能给朋友们带来帮助~~ AS3.0构建简单的声音可视化程序(波型图): 开发"> 使用 SoundMixer.computeSpectrum() 方法来显示声音波形图: import flash.display.Graphics; import flash.events.Event; import flash.media.So

使用PHP程序来保护你的flash作品

本文的保护是指防止用户将swf文件保存到本地,其实这种方法在很久之前就有人使用过了.主要的保护措施就是在php后台读取$_SERVER数组,如果是用IE里面的ActiveX控件来加载影片,将会有一个$_SERVER["HTTP_X_FLASH_VERSION"]参数,如果是用其它下载软件来下载,则不会有这个参数,纳闷的是用Firefox的ActiveX竟然没有这个参数.     这样一来就可以通过这个参数来判断用户的获取方式是否合法了.如果检测到没有$_SERVER["HTT

Flash AS3日积月累之三

http://as3blog.com/as3/as3tip-take-care-of-resource 摒弃了attachMovie之后的AS3,采用了类似DOM的操作方式.addChild.removeChild.getChildAt等方法开始成为AS3中显示(在屏幕上渲染).操作图形的主要方法.由于AS1.AS2完全是依赖于attchMovie的思想,因此对于传统Flash开发人员来说,转变到新的addChild的确需要下一番功夫. 由于新的"DisplayObject"在内存的使

Flash AS3 相对于AS2 新的特性和改动

本文介绍了ActionScript 3 相对于 ActionScript 2 有哪些新的特性和改动.并在文章的最后一步步的教大家如何利用 Flex Builder 来编译并运行第一个 AS3 程序.语法方面的增强和改动: 引入了 package(包) 和 namespace(命名空间) 两个概念.其中 package 用来管理类定义,防止命名冲突,而 namespace 则用来控制程序属性方法的访问. 新增内置类型 int (32比特整数),uint(非负32比特整数),用来提速整数运算: 新增