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 相关文章推荐
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 PHP
改变Apache端口等配置修改方法
Jun 05 PHP
php下实现在指定目录搜索指定类型文件的函数
Oct 03 PHP
php循环检测目录是否存在并创建(循环创建目录)
Jan 06 PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
php调用shell的方法
Nov 05 PHP
php中base64_decode与base64_encode加密解密函数实例
Nov 24 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
Symfony2之session与cookie用法小结
Mar 18 PHP
PHP简单获取随机数的常用方法小结
Jun 07 PHP
php生成HTML文件的类方法
Oct 11 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
MySQL连接数超过限制的解决方法
2011/07/17 PHP
php unset全局变量运用问题的深入解析
2013/06/17 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
详解JavaScript中的函数、对象
2019/04/01 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
python如何查看微信消息撤回
2018/11/27 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
python——全排列数的生成方式
2020/02/26 Python
Python 实现一个简单的web服务器
2021/01/03 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
业务部主管岗位职责
2014/01/29 职场文书
远程研修随笔感言
2014/02/10 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
“四风”问题的主要表现和危害思想汇报
2014/09/19 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
中国世界遗产导游词
2015/02/13 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
2019大学生暑期实习心得总结
2019/08/21 职场文书
Java实现学生管理系统(IO版)
2022/02/24 Java/Android