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+MySql编写聊天室
Oct 09 PHP
PHP图片上传类带图片显示
Nov 25 PHP
PHP 在线翻译函数代码
May 07 PHP
dedecms系统的广告设置代码 基础版本
Apr 09 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
Nov 02 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
Oct 08 PHP
thinkphp中空模板与空模块的用法实例
Nov 26 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
PHP实现简单登录界面
Oct 23 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
Mar 30 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 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并发查询MySQL的实例代码
2017/08/09 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
Jquery的hide及toggle方法让超链接慢慢消失
2013/09/06 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
微信小程序 五星评分的实现实例
2017/08/04 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
详解如何探测小程序返回到webview页面
2019/05/14 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
python创建和使用字典实例详解
2013/11/01 Python
详细解析Python当中的数据类型和变量
2015/04/25 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Django框架验证码用法实例分析
2019/05/10 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
2019/05/23 Python
在Python中使用filter去除列表中值为假及空字符串的例子
2019/11/18 Python
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
杭州-DOTNET笔试题集
2013/09/25 面试题
劳动之星获奖感言
2014/02/01 职场文书
学生个人自我鉴定
2014/03/26 职场文书
奉献演讲稿范文
2014/05/21 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
小学三八妇女节活动总结
2015/02/06 职场文书
体育教师个人总结
2015/02/09 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
高三化学教学反思
2016/02/22 职场文书
详解Django的MVT设计模式
2021/04/29 Python
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python
javascript之Object.assign()的痛点分析
2022/03/03 Javascript