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生成随机数或者字符串的代码
Sep 05 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
PHP跨时区(UTC时间)应用解决方案
Jan 11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
Sep 23 PHP
PHP使用PDO连接ACCESS数据库
Mar 05 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
php 常用的系统函数
Feb 07 PHP
php实现留言板功能
Mar 05 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
PHP xpath()函数讲解
Feb 11 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 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
syphon 虹吸式咖啡冲泡冲煮倒水的得与失
2021/03/03 冲泡冲煮
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
2009/05/25 Javascript
JavaScript 判断指定字符串是否为有效数字
2010/05/11 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
详解JavaScript的while循环的使用
2015/06/03 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
JavaScript中reduce()的5个基本用法示例
2020/07/19 Javascript
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
python实现从wind导入数据
2019/12/03 Python
使用python turtle画高达
2020/01/19 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
Python中常见的数制转换有哪些
2020/05/27 Python
外国语学院毕业生自荐信
2013/10/28 职场文书
竞职演讲稿范文
2014/01/11 职场文书
公司前台辞职报告
2014/01/19 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
文明礼仪伴我行演讲稿
2014/05/12 职场文书
助人为乐道德模范事迹材料
2014/08/16 职场文书
安全承诺书
2015/01/19 职场文书
婚姻出轨保证书
2015/05/08 职场文书
python如何查找列表中元素的位置
2022/05/30 Python