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 10 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
Feb 16 PHP
php模块memcache和memcached区别分析
Jun 14 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
Jun 10 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
Jul 04 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
php上传图片并压缩的实现方法
Dec 22 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
Laravel框架验证码类用法实例分析
Sep 11 PHP
使用laravel指定日志文件记录任意日志
Oct 17 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面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
用php实现让页面只能被百度gogole蜘蛛访问的方法
2009/12/29 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
Python入门之三角函数全解【收藏】
2017/11/08 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
Python线程之定位与销毁的实现
2019/02/17 Python
python 求10个数的平均数实例
2019/12/16 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
车间主管岗位职责
2013/11/14 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
优秀党支部申报材料
2014/12/24 职场文书
护士年终考核评语
2014/12/31 职场文书
向女朋友道歉的话
2015/01/20 职场文书
小学大队干部竞选稿
2015/11/20 职场文书
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL