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+javascript模拟Matrix画面
Oct 09 PHP
php实现的简单压缩英文字符串的代码
Apr 24 PHP
Php注入点构造代码
Jun 14 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
Nov 01 PHP
19个超实用的PHP代码片段
Mar 14 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
Apr 24 PHP
深入浅出讲解:php的socket通信原理
Dec 03 PHP
php+ajax简单实现全选删除的方法
Dec 06 PHP
万能的php分页类
Jul 06 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
Laravel 关联模型-关联新增和关联更新的方法
Oct 10 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 09 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 xml文件操作实现代码(二)
2009/03/20 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
javascript实现颜色渐变的方法
2013/10/30 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
JS实现仿Windows7风格的网页右键菜单效果代码
2015/09/11 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
独特的python循环语句
2016/11/20 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
python logging 日志的级别调整方式
2020/02/21 Python
通过实例解析Python return运行原理
2020/03/04 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
weblogic面试题
2016/03/07 面试题
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
检讨书模板
2015/01/29 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS