(转)保护自己的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

相关文章推荐

基于 flash AS3.0 的BASE64编码与解码类

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://programmer.blogbus.com/logs/36436446.html 在国外网站上淘到一个很好用的...

为大家介绍一款Flash AS3 UI编辑器 ---- PSD2SWF

公司同事介绍了一个工具:PSD2SWF 工具是国内牛人:张俊钦,写的,他的QQ为:21524742;英文名:KramerZhang 其中,我刚使用时,有点不懂的地方,作者都热情的为此提供支持,在此非...

[AS3]Flash Socket底层接受数据的初级处理(转)

http://wgcode.iteye.com/blog/814837

ActionScript 3.0 学习(十四) 从加载的.swf文件中读取flash库中的as链接的类

/**  直接将flash库中的元件放到.swf中加载,会使.swf文件的体积变大。一般对于项目中用的较多的加载, *   比如对所有角色的运动动画的加载,可以将动作位图放在falsh库中,并做好as...

绕开AS3安全沙箱,跨域加载SWF(转)

AS3的安全沙箱的确是让人很无奈,本篇文章仅用于解决一个特定的问题,即A服务器上的SWF文件通过http访问B服务器上的SWF文件,此时即使B服务器上设置了crossdomain.xml,也无济于事,...

flash as3/java socket 聊天室

  • 2008年09月30日 23:28
  • 1.65MB
  • 下载

Flash/AS3与C++通过socket通信

c++部分 ///main.cpp #include iostream>  ///加载需要的头文件 关于输入输出 #include winsock2.h> ///socket...

【JAVA】java代码实现print2Flash转swf文件,百度文库一样。

以前用的flashpapger但是很 遗憾不支持64位机子。 改用print2Flash。 java代码如下: import java.io.*; import com.jacob.activeX....
  • hateson
  • hateson
  • 2013年07月31日 12:02
  • 1957

flash学习之 利用stage.invalidate()方法和render事件提高as3程序的运行效率

AS3中的DisplayObject有一个render事件,他会在重绘DisplayList之前触发,这给我们提供了在重绘之前最后一次操作的机会。 每次需要DisplayObject触发rend...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(转)保护自己的Flash程序(AS3) -- 基于socket方式传送swf文件
举报原因:
原因补充:

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