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中禁止单个IP与ip段访问的代码小结
Jul 04 PHP
PHP5函数小全(分享)
Jun 06 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
PHP中上传多个文件的表单设计例子
Nov 19 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
php生成条形码的图片的实例详解
Sep 13 PHP
PHP生成加减算法方式的验证码实例
Mar 12 PHP
PHP设计模式之建造者模式定义与用法简单示例
Aug 13 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 PHP
PHP crypt()函数的用法讲解
Feb 15 PHP
Laravel统计一段时间间隔的数据方法
Oct 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中mysql模块部分功能的简单封装
2011/09/30 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
PHP分页类集锦
2014/11/18 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
ExpressJS入门实例
2015/01/14 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
JS版微信6.0分享接口用法分析
2016/10/13 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
python实现的登录和操作开心网脚本分享
2014/07/09 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
python 字符串常用函数详解
2019/09/11 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
马来西亚最大的电器网站:Senheng
2017/10/13 全球购物
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
优秀员工自荐书
2013/12/19 职场文书
生物学专业求职信
2014/07/23 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
python 如何在list中找Topk的数值和索引
2021/05/20 Python
Python办公自动化之Excel(中)
2021/05/24 Python
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技