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


Posted in PHP onAugust 16, 2014

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

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

下面是测试的源程序:

package {
import flash.display.Sprite;
import flash.net.Socket;
import flash.events.*;
import flash.errors.IOError;
import flash.display.Loader;

public class SocketTest extends Sprite {
  public function SocketTest() {
  var socket = new Socket();
  socket.connect("localhost", 5277);
  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(e:Event):void {
   trace("Socket closed! ");
  }
  function connectHandler(e:Event):void {
   trace("Socket connected!");
   sendRequest();
  }
  function ioErrorHandler(e:IOErrorEvent):void {
   trace("IOError!");
  }
  function securityErrorHandler(e:SecurityErrorEvent):void {
   trace("SecurityError!");
  }
  function socketDataHandler(e:ProgressEvent):void {
   trace("Socket have data!");
   readResponse();
  }

  }
}
}

PHP:

//后台scoket程序,由于适用php写比较简单,就用php写了.
//error_reporting(E_ALL);
error_reporting(0);
set_time_limit(0);
ob_implicit_flush();
$address = 'localhost';
$port = 5277;
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);
PHP 相关文章推荐
十天学会php之第九天
Oct 09 PHP
用PHP实现维护文件代码
Jun 14 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
mysql,mysqli,PDO的各自不同介绍
Sep 19 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
preg_match_all使用心得分享
Jan 31 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
PHP操作文件的一些基本函数使用示例
Nov 18 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
php+mysql实现简单的增删改查功能
Jul 13 PHP
php中请求url的五种方法总结
Jul 13 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 #PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 #PHP
php上传图片之时间戳命名(保存路径)
Aug 15 #PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 #PHP
PHP反向代理类代码
Aug 15 #PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 #PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
Aug 15 #PHP
You might like
非常好用的两个PHP函数 serialize()和unserialize()
2012/02/04 PHP
深入php self与$this的详解
2013/06/08 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
php实现每日签到功能
2018/11/29 PHP
学习ExtJS fit布局使用说明
2009/10/08 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
2016/03/01 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
bootstrap 路径导航 分页 进度条的实例代码
2018/08/06 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
python实现局域网内实时通信代码
2019/12/22 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
python matplotlib绘制三维图的示例
2020/09/24 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
圣诞节红领巾广播稿
2014/02/03 职场文书
校园广播稿100字
2014/10/06 职场文书
失职检讨书大全
2015/01/26 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
Go语言带缓冲的通道实现
2021/04/26 Golang
Apache Pulsar集群搭建部署详细过程
2022/02/12 Servers
python 远程执行命令的详细代码
2022/02/15 Python