关闭

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

660人阅读 评论(0) 收藏 举报

前段时间在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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1689679次
    • 积分:10345
    • 等级:
    • 排名:第1670名
    • 原创:43篇
    • 转载:682篇
    • 译文:0篇
    • 评论:79条
    最新评论