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 相关文章推荐
WIN98下Apache1.3.14+PHP4.0.4的安装
Oct 09 PHP
mysql 全文搜索 技巧
Apr 27 PHP
用PHP实现的四则运算表达式计算实现代码
Aug 02 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
php使用ICQ网关发送手机短信
Oct 30 PHP
php程序员应具有的7种能力小结
Nov 27 PHP
Yii中srbac权限扩展模块工作原理与用法分析
Jul 14 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 PHP
分享5个非常有用的Laravel Blade指令
May 30 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
Oct 16 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数据库调用类调用实例(详细注释)
2012/07/12 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
PHP打印输出函数汇总
2016/08/28 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
语义化 H1 标签
2008/01/14 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
javascript复制粘贴与clipboardData的使用
2014/10/16 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
详谈javascript异步编程
2016/02/21 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
Python使用matplotlib绘制多个图形单独显示的方法示例
2018/03/14 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
django项目搭建与Session使用详解
2018/10/10 Python
Django框架中序列化和反序列化的例子
2019/08/06 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
python双向链表原理与实现方法详解
2019/12/03 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
地球一小时活动总结
2015/02/27 职场文书
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
Jackson 反序列化时实现大小写不敏感设置
2021/06/29 Java/Android