³Ê¹« °Á¸¦ ¾ÈÇß´õ´Ï ¹Ì¾ÈÇÑ°¨ÀÌ µì´Ï´Ù.
¿À´ÃÀº ±âº»°ÁÂÁß¿¡ ¹ÙÀÌÆ®¸¦ ´Ù·ç´Â ºÎºÐ¿¡ ´ëÇØ °£´ÜÈ÷ ¾Ë¾Æº¸°Ú½À´Ï´Ù.
¿¹Á¦´Â ¸®ÆÛ·±½ºÀÇ ¿¹Á¦¸¦ µé°ÍÀÌ°í Ãß°¡»çÇ׿¡ ´ëÇÑ ºÎºÐµµ ¸î°³ ÀÖ°Ú½À´Ï´Ù.
package {
import flash.display.Sprite;
import flash.errors.*;
import flash.events.*;
import flash.net.URLRequest;
import flash.net.URLStream;
public class byte extends Sprite {
private static const ZLIB_CODE:String = "CWS";
private var stream:URLStream;
public function byte() {
stream = new URLStream();
var request:URLRequest = new URLRequest("http://mfiles.naver.net/62b3578999c1af183147/data27/2007/10/6/101/test7.swf");
configureListeners(stream);
try {
stream.load(request);
} catch (error:Error) {
trace("Unable to load requested URL.");
}
}
private function configureListeners(dispatcher:EventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
}
private function parseHeader():void {
trace("parseHeader");
trace("isCompressed: " + isCompressed());
trace("version: " + stream.readByte());
}
private function isCompressed():Boolean {
return (stream.readUTFBytes(3) == ZLIB_CODE);
}
private function completeHandler(event:Event):void {
trace("completeHandler: " + event);
parseHeader();
}
private function openHandler(event:Event):void {
trace("openHandler: " + event);
}
private function progressHandler(event:Event):void {
trace("progressHandler: " + event);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
private function httpStatusHandler(event:HTTPStatusEvent):void {
trace("httpStatusHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
}
}
-----------------°á°ú---------------------
openHandler: [Event type="open" bubbles=false cancelable=false eventPhase=2]
progressHandler: [ProgressEvent type="progress" bubbles=false cancelable=false eventPhase=2 bytesLoaded=51873 bytesTotal=51873]
httpStatusHandler: [HTTPStatusEvent type="httpStatus" bubbles=false cancelable=false eventPhase=2 status=200]
completeHandler: [Event type="complete" bubbles=false cancelable=false eventPhase=2]
parseHeader
isCompressed: true
version: 9
------------------------------
ÀÌ ¿¹Á¦´Â http»ó¿¡ ¿Ã¶ó°¡ÀÖ´Â swf¸¦ Àоîµé¿©¼ Ç÷¡½ÃÀÇ ¹öÁ¯°ú ±âŸ Á¤º¸¸¦ ¾ò¾î¿À´Â ¿ªÇÒÀÔ´Ï´Ù.
Ç÷¡½Ã swfÆÄÀÏÀº ÀÌÁøÆÄÀÏÀ̱⶧¹®¿¡ http¿¡¼ ÀоîµéÀÌ°ÔµÇ¸é °ð¹Ù·Î º¼¼ö°¡ ¾ø½À´Ï´Ù.
http¿¡¼ ´Ù¿î·Îµå¹Þ´Â°ÍÀ» ½ºÆ®¸®¹ÖÀ̶ó°íÇϴµ¥ ¿ÏÀüÇÏ°Ô ´Ù¿î·Îµå°¡ µÇ¾î¾ß ºñ·Î¼Ò ÆÄÀÏÀÌ µÇ°ÔµË´Ï´Ù.
ÀÎÅͳÝÀÌ Ãʱ⠳ª¿Ã¶§ ¿ø°Å¸®»ó¿¡¼ µ¥ÀÌÅ͸¦ ÁÖ°í¹Þ±â À§ÇÑ°ÍÀ̾ú°í ±×¼Óµµ´Â Áã¾àÀ̾ú½À´Ï´Ù.
Áö±ÝÀº °ÅÀÇ ½Ç½Ã°£Ã³·³ ȸé»ó¿¡ ¹Þ¾Æº¸°íÀÖÀ¸´Ï º° Â÷À̸¦ ¸ø´À³¢°ÚÁö¸¸ ÀÌ·± ¿¹Á¦¸¦ µé¾îº¾½Ã´Ù.
À¯ÀúµéÀÌ ¸¸µç swfÆÄÀÏÀ» ¿Ã¸®´Â »çÀÌÆ®°¡ Àִµ¥ Ç÷¡½Ã¹öÁ¯º°·Î °Ô½ÃÆÇÀÌ ÀÖ°í ´Ù¸¥ ¹öÀüÀº ¿Ã¸±¶§ºÎÅÍ Â÷´ÜÇؾ߰ڴٴ »ý°¢Àΰæ¿ì¸¦ µéÀÚ¸é swf¸¦ À¯Àú°¡ ¿Ã¸®±âÀü¿¡ ¹Ì¸® ÇØ´ç swfÀÇ ¸Ó¸®ºÎºÐÀÎ Çì´õ¸¸ Àо¾î ¹öÁ¯ÀÌ Æ²¸®¸é ¾÷·Îµå¸¦ Áß´ÜÇÒ¼öÀÖ½À´Ï´Ù.
ÀÌ·±½ÄÀ¸·Î ÀÀ¿ëÇÑ´Ù¸é ¿©·¯°¡Áö º¸¾ÈºÎºÐÀ» Àû¿ëÇÒ¼öµµÀÖ½À´Ï´Ù. ÀÏ´Ü Àâ¼Ò¸®´Â Áý¾îÄ¡¿ì°í º»·ÐÀ¸·Î µé¾î°¡ÁÒ.
À§¿¡ »¡°£»ö ºÎºÐÀÇ CWSÀÇ Á¤Ã¼°¡ ¹»±î.
Ç÷¡½Ã´Â ¸®Æ²¿£µð¾È ¹æ½ÄÀ¸·Î ÀÌÁø µ¥ÀÌÅ͸¦ ±âº» Ãë±ÞÇÕ´Ï´Ù.
¸®Æ²¿£µð¾ÈÀ̶õ ±âº»ÀûÀ¸·Î 16ºñÆ® ÄÄÇ»ÅͺÎÅÍ ÇöÀç±îÁöµµ ¾²ÀÌ°íÀִµ¥ ÇϳªÀÇ ´ÜÀ§°¡ 16ºñÆ®·Î ´Ù·ç¾îÁö°íÀÖ°í ÀÌ°ÍÀ» 16Áø¼ö·Î ³ªÅ¸³»±âÀ§Çؼ´Â 8ºñÆ®°¡ 1byteÀε¥ 1byte´Â ¿µ¹®ÀÚ 1°³¸¦ ³ªÅ¸³¾¼öÀÖ½À´Ï´Ù. 16ºñÆ®À̹ǷΠ2°³ÀÇ ¹®ÀÚ¸¦ ÇϳªÀÇ ´ÜÀ§·Î ¹¾î Ç¥ÇöÇϴµ¥ ¹ÙÀÌÆ®¸¦ ³ª¶õÈ÷ ºÙ¿©¼ Ç¥ÇöÇÏ´Â ¹æ½ÄÀ» ºò¿£µð¾ÈÀ̶óÇÏ°í ¹Ù²Ù´Â°ÍÀ» ¸®Æ²¿£µð¾ÈÀ̶ó°íÇÕ´Ï´Ù. ÇÏ¿©°£ ±×·±°Ô ÀÖ½À´Ï´Ù --;;
swf¸¦ óÀ½ ÀÐ¾î ³»°ÔµÇ¸é 3°³ÀÇ ¹ÙÀÌÆ®¿¡ ½Ã±×³ÊÃĶó´Â°ÍÀ» ³Ö¾î³õ¾Ò½À´Ï´Ù.
0x465753 ¶ó´Â 16Áø¼ö¸¦ ¸ÕÀú ¸¸³ª°ÔµÇ´Âµ¥ ¹®ÀÚ·Î ¹Ù²Ù¸é FWS¶ó´Â°ÍÀ¸·Î ¹Ù²ò´Ï´Ù. º¸Åë Ç÷¡½Ã¿Ã¸®±âÀü¿¡ ¾ÐÃàÇؼ ¿Ã¸®´Âµ¥
¾ÐÃàÀ» ÇϰԵǸé CWS (16Áø¼ö·Î´Â 0x435753 )ÀÔ´Ï´Ù.
±×·¯´Ï CWS·ê ¸¸³ª¸é ¾ÐÃàµÈ swf ÀÌ°í FWS¸¦ ¸¸³ª¸é ¾ÐÃà¾ÈµÈ swf¶ó´Â °á·ÐÀÌ ³³´Ï´Ù.
À§¿¡¼´Â ¾ÐÃàµÈ swf°¡ µÇ°Ú±º¿ä.
±×´ÙÀ½ÀÇ ¹ÙÀÌÆ®´Â ¹öÁ¯ÀÔ´Ï´Ù. ´Þ¶û ÇѹÙÀÌÆ®·Î µé¾îÀÖ½À´Ï´Ù. ¾Æ¸¶ 100³âµÚ¸é µÎ¹ÙÀÌÆ®¸¦ ¾µÁö¸ð¸£°ÚÁö¸¸ ±×¶§±îÁö Çö¾÷¿¡ Á¾»çÇϽôºÐÀº ±Ø¼Ò¼ö 1000¾ïºÐÀÇ 1Á¤µµÀÏ°Ì´Ï´Ù. °ÆÁ¤ÇÏÁö¸¶½Ã°í »ç»ÓÈ÷ ÇѹÙÀÌÆ®¸¸ Àо½Ã¸éµË´Ï´Ù.
stream.readByte()
¶ó´Â°ÍÀ¸·Î ÇѹÙÀÌÆ®¸¦ ´õ Àоîµå¸®¸é ¹öÁ¯Á¤º¸°¡ ³ª¿É´Ï´Ù.
´ÙÀ½Àº Ãß°¡ÀûÀÎ »çÇ×ÀÔ´Ï´Ù.
16ºñÆ® ´ÜÀ§·Î ó¸®Çϱ⶧¹®¿¡ ÀÏ´Ü Àоîµå¸°°ªÀº
0000 0000 0011 0100 0000 0000 0000 0000 ÀÌ·±½ÄÀ¸·Î swf¿¡ ÀúÀåµÇ¾îÀÖ°í ÀÌ°ÍÀ» Ç÷¡½Ã ¹æ½ÄÀÎ ¸®Æ²¿£µð¾ÈÀ¸·Î ¹Ù²Ù¸é
16 Áø¼ö 0x00000048·Î º¯È¯µË´Ï´Ù. ÀÌ°ªÀº °è¼Ó º¯Çϴµ¥ swf ÆÄÀÏÀÇ ³¡ ÁÖ¼Ò¸¦ °¡¸®Å°°íÀÖ½À´Ï´Ù.
±×·¯¹Ç·Î ÃÑ ¿ë·®À» ¸»ÇÕ´Ï´Ù. ·Î´õ°¡ ÃÑ¿ë·®À» ±¸Çس¾¼öÀִ°ÍÀÌ ÀÌ°ÍÀ» ÂüÁ¶Çϱ⶧¹®ÀÌÁÒ.
±×´ÙÀ½À¸·Î´Â ½ºÅ×ÀÌÁö »çÀÌÁîÀÌ´Ù.
Ç÷¡½Ã´Â TwipÀ̶ó´Â ´ÜÀ§¸¦ »ç¿ëÇϴµ¥ 1Twip =0.05Çȼ¿ÀÌ´Ù.
1Çȼ¿Àº ±×·¯¹Ç·Î 20 Æ®À¬ÀÌ µÈ´Ù.
À̺κÐÀº RectÇü ÀÚ·á·Î ÀúÀåµÇ¾îÀִµ¥
NBits ¶ó°í µÇ¾îÀÖ°í UB[¼ýÀÚ]¶ó°í µÇ¾îÀÖ´Ù.
¼ýÀÚ¶ó´Â°ÍÀº ºñÆ®ÀÇ ¼ö¸¦ ³ªÅ¸³»°íÀִµ¥ °¹¼öÀ̹ǷΠ¹«ºÎÈ£ Á¤¼ö°¡µÈ´Ù. ±×´ÙÀ½ ³ª¿À´Â °ªµéÀ» ÇØ´ç ºñÆ®ÀÇ °¹¼ö ´ÜÀ§·Î Àо¶ó´Â°ÍÀÌ´Ù.
¼ýÀÚ ºñÆ®¾¿ ²÷¾îÀо¸é Nbits ¶ó´Â°ÍÀÌ µÇ´Âµ¥ ÀÌ°ÍÀº ´ÙÀ½¿¡ ³ª¿À´Â°ªµéÀÌ ºÎÈ£ÀÖ´Â Á¤¼ö°¡ Nbit¸¸Å°ø°£¿¡ µé¾îÀÖÀ½À» ³ªÅ¸³½´Ù.
ÀÌ°á°ú°ªÀÇ ³à¼®µéÀº ¸®Æ²¿£µð¾ÈÀÌ Àû¿ëµÇ¾î µé¾î°¡ÀÖÁö ¾ÊÀ¸¹Ç·Î ±×´ë·Î NºñÆ®¾¿ ²÷¾îÀо´Ù. 5°¡µÉÁö 12°¡µÉÁö ¾ó¸¶ÀÏÁö ¸ð¸¥´Ù.
ÀÏ´Ü NºñÆ®´ÜÀ§·Î 4¹øÀ» Àо¾ßÇϴµ¥
ù¹ø°°¡ Xmin°ª µÎ¹ø°´Â Ymax°ª ¼¼¹ø°´Â Ymin°ªÀÌ´Ù ³×¹ø°´Â Ymax°ªÀÌ´Ù. ³ª¸ÓÁö´ÜÀ§¿¡ ³²´Â ¹ÙÀÌÆ®´Â ¾È¾²¹Ç·Î ¹«½ÃÇÑ´Ù.
°¢ °ªº°·Î ÀÌÁø¼ö¸¦ ½ÊÁø¼ö·Î Àо¸é (ex : 2000) À̵Ǵµ¥ Æ®À¬´ÜÀ§ 1Çȼ¿ÀÌ 20Æ®À¬ÀÌ´Ï 2000 / 20 =Çȼ¿ À̳ª¿À´Âµ¥ 100À̳ª¿À¹Ç·Î ÀÌ°ÍÀº 100 Çȼ¿À» ÀǹÌÇÑ´Ù.
±×´ÙÀ½À¸·Î´Â Àç»ý·üÀÌ ³ª¿Â´Ù. ÇÁ·¹ÀÓ¼öÀÌ´Ù.
±×´ÙÀ½À¸·Î´Â ÇÁ·¹ÀÓÀÇ °¹¼ö¸¦ º¸¿©ÁØ´Ù.
...
Çì´õ°¡ »ó´çÈ÷ ¸¹Àº Á¤º¸¸¦ º¸¿©ÁÖ°íÀִµ¥
ÀÌ¹Ì ÀÌ Çì´õ¸¦ º¸¿©ÁÖ´Â ·Î´õ°¡ Ç÷¡½Ã¿¡ Á¸ÀçÇÏ°íÀִµ¥ ±»ÀÌ ¿Ö¾²´Â°¡ÇÑ´Ù¸é
¾Æ±î ¸»Çѵ¥·Î ½ºÆ®¸®¹ÖÀÏ »óÅÂÀ϶§ Á¦¾î¸¦ ÇÒ¼öÀÖ´Â ºÎºÐÀÌ ´õ Á¸ÀçÇϴ°ÍÀÌ´Ù.
°í±Þ »ç¿ëÀÚ¶ó¸é ±× »ç¿ëºÎºÐÀ» ÃÖ´ëÇÑ È®ÀåÇÒ¼öÀÖ¾î¾ßÇϱ⶧¹®¿¡
ÀÌ·± ±â¹ýÀ» ¾µ¼öµµÀÖÀ½À» ¾Ë¾Æ¾ßÇÑ´Ù.