前段时间在flashseer看到有人提到:可以通过socket方式传送swf文件,让用户无法获取到swf文件... 当时还没有出as3的反编译,所以对程序的保护没有在意.随着反编译程序的平民化,不希望别人看到源代码的朋友就比较着急...
通过socket方式传送swf文件来避免泄漏源代码的思路(只适用as3): 让主程序的loader(前台swf)通过socket连接到后台程序,然后请求需要的主程序文件.后台读取主程序数据通过socket发送给主程序的loader.前台swf适用Loader.loadBytes方法显示主程序文件.
下面是测试的源程序:
前台loader:
- ??
- ??
- import?Base64;??
- import?StringUtil;??
- var?socket?=?new?Socket();??
- socket.connect("localhost",?11915);??
- ??
- 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()://接受数据??
- ?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);??
- ????
- ??var?l:Loader?=?new?Loader();??
- //从?ByteArray?对象中所存储的二进制数据中加载。??
- ??l.loadBytes(ba);??
- //trace(l.content);??
- ??addChild(l);??
- function?closeHandler(event:Event): ?trace("closeHandler:?"?+?event);??
- function?connectHandler(event:Event): ?trace("connectHandler:?"?+?event);??
- ?sendRequest();??
- function?ioErrorHandler(event:IOErrorEvent): ?trace("ioErrorHandler:?"?+?event);??
- function?securityErrorHandler(event:SecurityErrorEvent): ?trace("securityErrorHandler:?"?+?event);??
- function?socketDataHandler(event:ProgressEvent): ?trace("socketDataHandler:?"?+?event);??
- ?readResponse();??
- }??
?
socket(PHP):
<?php??
- //error_reporting(E_ALL);??
- error_reporting(0);??
- set_time_limit(0);??
- ob_implicit_flush();??
- $address?=?'localhost';??
- $port?=?11915;??
- if?(($sock?=?socket_create(AF_INET,?SOCK_STREAM,?SOL_TCP))?<?0)?{??
- echo?"socket_create()?failed:?reason:?"?.?socket_strerror($sock)?.?""n";??
- $ret?=?socket_bind($sock,?$address,0); background-color:inherit">$port))?<?0)?{??
- echo?"socket_bind()?failed:?reason:?"?.?socket_strerror($ret)?.?""n";??
- $ret?=?socket_listen( echo?"socket_listen()?failed:?reason:?"?.?socket_strerror( echo?"connect.";??
- do?{??
- $msgsock?=?socket_accept($sock))?<?0)?{??
- echo?"socket_accept()?failed:?reason:?"?.?socket_strerror($msgsock)?.?""n";??
- break;??
- ??socket_recv($msgsock,0); background-color:inherit">$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);??
- //转换为字符串??
- ?????
- $talkback?=?base64_encode($data).'end';??
- ??}??
- //发送??
- socket_send($talkback,?strlen($talkback),0);??
- }?while?(true);??
- socket_close($msgsock);??
- $sock);??
- ?>???
转自:http://blog.csdn.net/b4362928/article/details/5017946
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|