天天看点

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

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

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

下面是测试的源程序:

前台loader:

[java]  view plain copy

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

socket(PHP):

[php]  view plain copy

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

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