(转)保护自己的Flash程序(AS3) -- 基于socket方式传送swf文件

转载 2012年03月21日 17:21:31

前段时间在flashseer看到有人提到:可以通过socket方式传送swf文件,让用户无法获取到swf文件... 当时还没有出as3的反编译,所以对程序的保护没有在意.随着反编译程序的平民化,不希望别人看到源代码的朋友就比较着急...

通过socket方式传送swf文件来避免泄漏源代码的思路(只适用as3): 让主程序的loader(前台swf)通过socket连接到后台程序,然后请求需要的主程序文件.后台读取主程序数据通过socket发送给主程序的loader.前台swf适用Loader.loadBytes方法显示主程序文件.

下面是测试的源程序:

前台loader:

[java] view plaincopy
  1. //-------------  
  2. //Base64和StringUtil在网上自己找吧  
  3. import Base64;  
  4. import StringUtil;  
  5. var socket = new Socket();  
  6. socket.connect("localhost"11915);  
  7.   
  8. socket.addEventListener(Event.CLOSE, closeHandler);  
  9. socket.addEventListener(Event.CONNECT, connectHandler);  
  10. socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);  
  11. socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);  
  12. socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);  
  13.   
  14. var response:String;  
  15.   
  16. function writeln(str:String):void {  
  17.  str += "";  
  18.  try {  
  19.   socket.writeUTFBytes(str);  
  20.  } catch (e:IOError) {  
  21.   trace(e);  
  22.  }  
  23. }  
  24.   
  25. function sendRequest():void {  
  26.  trace("sendRequest");  
  27.  response = "";  
  28.  writeln('bin');  
  29.  socket.flush();  
  30. }  
  31.   
  32. function readResponse():void {  
  33. //接受数据  
  34.  var str:String = socket.readUTFBytes(socket.bytesAvailable);  
  35.  response += str;  
  36. //当数据以end结束的时候,数据传输结束  
  37.  if(StringUtil.endsWith(str,'end'))  
  38.  {  
  39.   response = response.substr(0,response.length-3);  
  40. //把字符串转换为ByteArray  
  41.   var ba = Base64.decodeToByteArray(response);  
  42.   //trace('bytearray=====',ba);  
  43.   var l:Loader = new Loader();  
  44. //从 ByteArray 对象中所存储的二进制数据中加载。  
  45.   l.loadBytes(ba);  
  46.   //trace(l.content);  
  47.   addChild(l);  
  48.  }  
  49. }  
  50.   
  51.   
  52. function closeHandler(event:Event):void {  
  53.  trace("closeHandler: " + event);  
  54. }  
  55.   
  56. function connectHandler(event:Event):void {  
  57.  trace("connectHandler: " + event);  
  58.  sendRequest();  
  59. }  
  60.   
  61. function ioErrorHandler(event:IOErrorEvent):void {  
  62.  trace("ioErrorHandler: " + event);  
  63. }  
  64.   
  65. function securityErrorHandler(event:SecurityErrorEvent):void {  
  66.  trace("securityErrorHandler: " + event);  
  67. }  
  68.   
  69. function socketDataHandler(event:ProgressEvent):void {  
  70.  trace("socketDataHandler: " + event);  
  71.  readResponse();  
  72. }  

 

 

socket(PHP):

 

  1. <?php  
  2. //error_reporting(E_ALL);  
  3. error_reporting(0);  
  4. set_time_limit(0);  
  5.   
  6. ob_implicit_flush();  
  7.   
  8. $address = 'localhost';  
  9. $port = 11915;  
  10.   
  11. if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {  
  12. echo "socket_create() failed: reason: " . socket_strerror($sock) . ""n";  
  13. }  
  14.   
  15. if (($ret = socket_bind($sock$address$port)) < 0) {  
  16. echo "socket_bind() failed: reason: " . socket_strerror($ret) . ""n";  
  17. }  
  18.   
  19. if (($ret = socket_listen($sock, 5)) < 0) {  
  20. echo "socket_listen() failed: reason: " . socket_strerror($ret) . ""n";  
  21. }  
  22. echo "connect.";  
  23. do {  
  24. if (($msgsock = socket_accept($sock)) < 0) {  
  25. echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . ""n";  
  26. break;  
  27. }  
  28.   
  29. do {  
  30.   
  31.   socket_recv($msgsock$buf, 2048, 0);  
  32.   if ($buf == '') {  
  33. socket_close($msgsock);  
  34.     echo "some one quit";  
  35. break;  
  36. }  
  37.   else if($buf == 'bin')  
  38.   {  
  39. //读取主程序数据  
  40.    $f = fopen('main.swf','r');  
  41.    $data = fread($f,filesize('main.swf'));  
  42.    fclose($f);  
  43. //转换为字符串  
  44.    //echo base64_encode($data);  
  45.    $talkback = base64_encode($data).'end';  
  46.   }  
  47. //发送  
  48. socket_send($msgsock$talkbackstrlen($talkback),0);  
  49. while (true);  
  50. socket_close($msgsock);  
  51. while (true);  
  52.   
  53. socket_close($sock);  
  54. ?>   

 

转自:http://blog.csdn.net/b4362928/article/details/5017946

LayaFlash引擎——让flash技术变成开发HTML5产品的利器

直接用Flash AS3语言开发HTML5的引擎 为Flash程序员而生,上手快,无需学习其他语言,Flash AS3语言及框架在Flash Builder、FlashDevelop中直接开发HTML...
  • xiaoya_88
  • xiaoya_88
  • 2016年01月18日 16:11
  • 2491

【AS3】Flash读取XML内容的方法(附加载一个视频的例子)

参考文章1:http://www.68design.net/Web-Guide/Flash/10228-1.html 参考文章2:http://blog.csdn.net/ak47zc123/art...
  • axer0811
  • axer0811
  • 2013年01月18日 09:07
  • 1646

Flash11新增加了SWF对LZMA压缩的支持

 Flash11新增加了SWF对LZMA压缩的支持 这种压缩算法比以前的压缩率要高不少 著名压缩工具7zip默认就是使用这种压缩算法 ZSWF是一个替换SWF压缩方法和版本号的工具 ...
  • summerhust
  • summerhust
  • 2014年01月16日 10:05
  • 2336

as3加载外部图片的方法详解

开始之前先做一些准备工作。新建一个空的flash文件,注意选择支持ActionScript 3.0的flash文件,保存该flash文件。再找一张图片并将其和新建的flash文件放在同一目录下(AS3...
  • csweier
  • csweier
  • 2014年12月22日 15:09
  • 3619

word文档转换成swf格式文件在网页中用flash显示

word文档转换成swf格式文件在网页中用flash显示在OA系统中我们常常需要将上传的word文档在网页中阅览,一般上传后的文档用html的形式查看是会导致排版混乱的,这次我介绍在ASP.NET中如...
  • u012601009
  • u012601009
  • 2016年10月25日 16:36
  • 901

flash与c++进行Socket进行简单通信

一、简介       用flash去开发应用,,免不了网络通讯,特别是网络游戏,需要用到即使通讯。 as3提供了两个支持即时通讯的类:XMLSocket和Socket,       前者其实是只支持发...
  • u010150082
  • u010150082
  • 2013年10月29日 17:07
  • 1691

把exe的flash还原成swf

首先要准备一个16进制字节码编辑器,这里用的是UltraEdit,可以到这里下载它最新的破解版。 现在我们开始我们的还原工作吧。 1.用UltraEdit打开待还原的exe文件。你就会看到这个ex...
  • ryan213
  • ryan213
  • 2014年04月11日 11:55
  • 908

把flash转换成html5

话说苹果公司一直不喜欢flash,所有的ios设备上都不能运行flash程序,这让很多apple用户非常的郁闷,很多好玩的游戏都是flash的swf游戏,可惜用自己的iPhone、ipad都不能玩,下...
  • yuanya
  • yuanya
  • 2013年11月22日 09:06
  • 9608

动态加载swf并进行交互

综合http://blog.csdn.net/liyong199012/article/details/6085545
  • As_Js_Python
  • As_Js_Python
  • 2014年10月08日 16:44
  • 1097

关于swf安全沙箱冲突:不能被本地访问

错误提示:SWF 文件不能被本地访问 不能访问本地 只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源 错误信息:SecurityError: Error #2148: SW...
  • arvin0
  • arvin0
  • 2016年03月14日 16:11
  • 1887
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(转)保护自己的Flash程序(AS3) -- 基于socket方式传送swf文件
举报原因:
原因补充:

(最多只允许输入30个字)