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下获取http状态的实现代码
May 09 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
Aug 19 PHP
php文件夹的创建与删除方法
Jan 24 PHP
PHP魔术方法的使用示例
Jun 23 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
Jun 07 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 PHP
七种PHP开发环境搭建工具
Jun 28 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
1.PHP简介
2006/10/09 PHP
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
2016/09/30 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
jquery实现右键菜单插件
2015/03/29 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
AngularJS入门教程之表格实例详解
2016/07/27 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
微信小程序定义和调用全局变量globalData的实现
2019/11/01 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
python对csv文件追加写入列的方法
2019/08/01 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
介绍下Lucene建立索引的过程
2016/03/02 面试题
Java如何支持I18N?
2016/10/31 面试题
优秀团员个人事迹材料
2014/01/29 职场文书
家长对学生的评语
2014/04/18 职场文书
求职信范文大全
2014/05/26 职场文书
趣味运动会广播稿
2015/08/19 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书