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与SQL注入攻击[三]
Apr 17 PHP
PHP在特殊字符前加斜杠的实现代码
Jul 17 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
php socket客户端及服务器端应用实例
Jul 04 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
Sublime里直接运行PHP配置方法
Nov 28 PHP
PHP全局变量与超级全局变量区别分析
Apr 01 PHP
PHP检测链接是否存在的代码实例分享
May 06 PHP
php一个文件搞定微信jssdk配置
Dec 12 PHP
cakephp常见知识点汇总
Feb 24 PHP
在laravel中实现将查询的对象转换为多维数组的函数
Oct 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
JS加ASP二级域名转向的代码
2007/05/17 Javascript
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
javascript获取元素CSS样式代码示例
2013/11/28 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
关于你不想知道的所有Python3 unicode特性
2014/11/28 Python
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
TensorFlow saver指定变量的存取
2018/03/10 Python
python多行字符串拼接使用小括号的方法
2020/03/19 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
Tensorflow累加的实现案例
2020/02/05 Python
python openssl模块安装及用法
2020/12/06 Python
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
英国购买威士忌网站:Master of Malt
2019/09/26 全球购物
考核工作实施方案
2014/03/30 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers