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 文本文件的读取效率
Feb 10 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
Dec 02 PHP
Zend Framework动作助手FlashMessenger用法详解
Mar 05 PHP
PHP实现多关键字加亮功能
Oct 21 PHP
PHP中STDCLASS用法实例分析
Nov 11 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 PHP
laravel5.1框架model类查询的实现方法
Oct 08 PHP
Laravel关系模型指定条件查询方法
Oct 10 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 PHP
PHP实现随机发放扑克牌
Apr 21 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中uft-8中文编码乱码的几种解决办法
2012/04/19 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
PHP实现的oracle分页函数实例
2016/01/25 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
JavaScript 基础问答三
2008/12/03 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
Python使用type动态创建类操作示例
2020/02/29 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
介绍下static、final、abstract区别
2015/01/30 面试题
日语翻译个人求职的自我评价
2013/10/14 职场文书
妇产科护士自我鉴定
2013/10/15 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
文明家庭事迹材料
2014/12/20 职场文书
给老婆的保证书
2015/01/16 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
2022/04/21 Python