FrontPage|FindPage|TitleIndex|RecentChanges|RSS encpacket
 
title:¿Â¶óÀΰÔÀÓ ÇÁ·ÎÅäÄÝ º¸¾È

2006-4-4 biscuit

1 Sequence, ½ÃÄö½º
2 Checksum, üũ¼¶
3 Encryption, ¾Ïȣȭ
4 Verification, °ËÁõ
5 ±×·¯³ª ¿©ÀüÈ÷ Ãë¾àÇÏ´Ù


º¸¾ÈÀº ¾ç³¯ÀÇ Ä®ÀÌ´Ù. ½Ã½ºÅÛÀÇ ¼º´É°ú °³¹ß,À¯Áöº¸¼öÀÇ Æí¸®ÇÔÀÌ °­Á¶µÉ¼ö·Ï º¸¾È¼ºÀº ¶³¾îÁö°í ¹Ý´ë·Î º¸¾È¼ºÀÌ ¿Ã¶ó°¥¼ö·Ï ¼º´ÉÀº ¶³¾îÁö°í °³¹ß,À¯Áöº¸¼öÇϱâ Èûµé´Ù.

½Ç½Ã°£ ¹ÝÀÀÀ» ÇÊ¿ä·Î ÇÏ´Â ¿Â¶óÀΰÔÀÓµéÀº º¸¾ÈÀÌ »ý¸íÀ̱â´Â Çϸ鼭µµ ¾î´À Á¤µµ ÀÌ»óÀ¸·Î´Â º¸¾È ¼öÁØÀ» ³ôÈú ¼ö°¡ ¾ø´Â ³­°¨ÇÑ »óȲ¿¡ ÀÖ´Ù.

ÀÌ ±ÛÀº, ÇÊ¿äÀÌ»óÀÇ º¸¾È°­È­·Î ÀÎÇÑ ½Ã½ºÅÛÀÚ¿ø ³¶ºñ¸¦ ÃÖ¼ÒÈ­ÇÏ°í ¶Ç ÀÏ¹Ý ÇØÄ¿µéÀÌ ½±°Ô ³Ñ º¼¼ö ¾ø´Â ¼öÁØÀÇ º¸¾È¼ºÀ» ¾ò¾î³»±â À§ÇÑ '¿Â¶óÀΰÔÀÓ ÇÁ·ÎÅäÄÝ º¸¾È 4¿øÄ¢'¿¡ ´ëÇØ ¾²°íÀÚ ÇÑ´Ù.

°³¹ßÀÚµéÀº Ŭ¶óÀ̾ðÆ®¿ÍÀÇ Åë½Å¿¡¼­ ÀÌ ÃÖ¼Ò 4°¡Áö º¸¾ÈÃ¥À» ±¸ÇöÇؾ߸¸ ÇÑ´Ù.


1 Sequence, ½ÃÄö½º #


½ÃÄö½º³Ñ¹ö´Â ¾î¶² ÀϷùøÈ£ÀÌ´Ù. Åë½ÅÇÒ¶§¸¶´Ù ÆÐŶ¿¡ ½ÃÄö½º³Ñ¹ö¸¦ ºÙ¿©¼­ º¸³»µµ·Ï ÇÏ´Â °Í. °¡Àå °íÀüÀû ÇÁ·ÎÅäÄÝ ÇØÅ· ¼ö¹ýÀÎ 'Packet Record & Replay' ¸¦ ¸·¾Æ³¾ ¼ö ÀÖ´Ù.

MMORPG¿¡¼­ ÇÑ Ç÷¹À̾ ¸ó½ºÅ͸¦ ÇÑ´ë ¶§·ÈÀ»¶§¿¡ Ŭ¶óÀ̾ðÆ®¿¡¼­´Â ¼­¹ö·Î ¾î¶² ÆÐŶÀ» º¸³¾ °ÍÀÌ´Ù. ¾Æ¹«¸® ¾Ïȣȭ¸¦ º¹ÀâÇÏ°Ô ÇÏ°í ¹æ¾îÄڵ带 ³Ö¾ú´Ù°í ÇÏ´õ¶óµµ, ÀÌ ÆÐŶÀ» º¹»çÇؼ­ ÀÜ¶à º¸³»´Â ÇàÀ§´Â ÆÐŶ½ÃÄö½º°¡ ¾ø´ÂÇÑ ¸·¾Æ³¾ ¼ö ¾ø´Ù.

½ÃÄö½º³Ñ¹ö¸¦ µµÀÔÇصµ, ÀÌ ¼ýÀÚ ÀÚüµµ º¯Á¶°¡ °¡´ÉÇϱ⠶§¹®¿¡ üũ¼¶ÀÇ µµ¿òÀÌ ÇÊ¿äÇÏ´Ù.


2 Checksum, üũ¼¶ #


üũ¼¶Àº ÆÐŶÀÇ ¾Õ ȤÀº µÚ¿¡ µû¶óºÙ´Â üũÄÚµå·Î¼­, ÆÐŶ °¢ ¹ÙÀÌÆ®µéÀ» ¿¬»êÇس»¼­ ¾ò¾îÁö´Â °ªÀÌ´Ù. ?MD5³ª ?CRC32µîÀÌ ´ëÇ¥ÀûÀΠüũ¼¶µéÀε¥ ³Î¸® °ø°³µÇ¾îÀÖ´Â ÀϹÝÀûÀÎ ¾Ë°í¸®Áòº¸´Ù´Â °ø°³µÈ ¾Ë°í¸®ÁòÀ» º¯ÇüÇؼ­ ¾²´Â °ÍÀÌ Çö¸íÇÏ´Ù. ÇØÄ¿µéµµ ¾ó¸¶µçÁö ±¸ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. Á÷Á¢ Á¦ÀÛÇϴ üũ¼¶Àº º¸¾È¼ºÀÌ ¶³¾îÁöÁö¸¸, °ø°³µÈ ¶óÀ̺귯¸®º¸´Ù´Â ³´´Ù.

üũ¼¶ º¸¾ÈÀ» µµÀÔÇÔÀ¸·Î½á ÆÐŶ³» µ¥ÀÌÅÍÀÇ º¯Á¶¸¦ Â÷´ÜÇÒ ¼ö ÀÖ´Ù.

ÇØÄ¿µéÀº ´Ù¾çÇÑ ¹æ½ÄÀ¸·Î ÆÐŶÀ»µé º¯Á¶ÇÏ°í Àִµ¥, Ŭ¶óÀ̾ðÆ®¿¡¼­´Â ÀǵµÀûÀ¸·Î Â÷´ÜµÇ¾î ÀÖ´Â ÇàÀ§µéÀ» ÆÐŶ¼öÁØ¿¡¼­ Á¶ÀÛÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µéÀÚ¸é »óÁ¡¿¡ °¡Áö°íÀÖ´Â ¹°°Ç 5°³¸¦ ÆÇ´Ù°í Çغ¸ÀÚ. ÆÐŶÀº ´ëÃæ ÀÌ·± ±¸Á¶ÀÌ´Ù. [NPC_ID, ITEM_CODE, ITEM_COUNT] ¿©±â¼­ ¾ÆÀÌÅÛ¼ö·®Àº ÇöÀç °¡Áö°íÀÖ´Â ¼ö·®ÀÎ 5°³·Î Ŭ¶óÀ̾ðÆ®¿¡¼­ Á¦Çѵȴ٠(Áï, À¯Àú´Â ¹°°ÇÀ» 5°³¹Û¿¡ °¡Áö°í ÀÖÁö ¾ÊÀ¸¸é¼­, npc¿¡°Ô 10°³¸¦ ÆȾÆÄ¡¿ï ¼ö ¾ø´Ù). ±×·¸Áö¸¸ ÆÐŶº¯Á¶¸¦ ÀÌ¿ëÇϸé ÀÌ ¼ýÀÚ¸¦ 10 ÀÌ°Ç 100 ÀÌ°Ç ¹Ù²ãÄ¥ ¼ö ÀÖ´Ù.

¹°·Ð, ÀÌ·± °æ¿ì¸¦ ´ëºñÇؼ­ ¾ÈÀüÀ» À§ÇØ ¼­¹ö¿¡¼­´Â °Ë»ç¸¦ ´Ù½Ã ¼öÇàÇØÁà¾ß ÇÑ´Ù.

ÆÐŶ¿¡ üũ¼¶À» µµÀÔÇÑ °æ¿ì¿¡´Â, ±×³ª¸¶ Åë½Å°úÁ¤¿¡¼­ º¯Á¶µÇ¾úÀ» À§Çè Çϳª¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù. (Åë½Å º¸¾È¿µ¿ªÀÌ ¾Æ´Ñ Ŭ¶óÀ̾ðÆ®ÇÁ·Î±×·¥ÇØÅ·/¸®¹ö½º¿£Áö´Ï¾î¸µ/¸Þ¸ð¸®ÇØÅ·µîÀ» ÀÌ¿ëÇؼ­µµ ÀÌ·¯ÇÑ º¯Á¶°¡ °¡´ÉÇÏ´Ù)

º¸¾È¼º Çâ»óÀ» À§ÇØ, 1¿¡¼­ÀÇ ½ÃÄö½º³Ñ¹öµµ µ¥ÀÌÅÍ·Î °£ÁÖÇÏ¿© üũ¼¶À» ¸¸µé¾î ³»¸é, ½ÃÄö½º³Ñ¹öÀÇ º¯Á¶¸¦ ¸·¾Æ³»´Â È¿°úµµ ÀÖ´Ù.


3 Encryption, ¾Ïȣȭ #


¾Ïȣȭ´Â ¸»±×´ë·Î ÆÐŶÈÉÃ帱â ÇÁ·Î±×·¥À¸·Î ½±°Ôº¼¼ö ¾øµµ·Ï ´Ù¸¥ ±âÈ£µé·Î ¾ÏȣȭÇÏ´Â °ÍÀÌ´Ù. ¾Ïȣȭ ¾Ë°í¸®Áòµµ °ø°³µÈ ÈǸ¢ÇÑ °ÍµéÀÌ ¸¹Áö¸¸, ¾Õ¼­¿Í ¸¶Âù°¡Áö·Î °ø°³µÈ ¾Ë°í¸®ÁòÀ» º¯ÇüÇؼ­ ¾²´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù.

¾î¶² ¾Ë°í¸®ÁòÀ» ¾²´À³Ä¿¡ µû¶ó ÃÊ´ç ÆÐŶ¾Ïȣȭ/º¹È£È­À²ÀÌ ¼ö¹é¹è Â÷ÀÌ°¡ ³ª±âµµ ÇϹǷÎ, ¿Â¶óÀΰÔÀÓ¿¡¼­´Â º¸¾È¼ºº¸´Ù´Â ¼º´É °üÁ¡¿¡¼­ °í¸¦ ÇÊ¿ä°¡ ÀÖ´Ù.


4 Verification, °ËÁõ #


°ËÁõÀÇ ÇÙ½É Ã¶ÇÐÀº, 'Ŭ¶óÀ̾ðÆ®¸¦ ¹ÏÁö ¾Ê´Â´Ù'¶ó´Â °³³äÀÌ´Ù. Àý´ë·Î Ŭ¶óÀ̾ðÆ®¸¦ ¹ÏÁö ¾Ê´Â´Ù.

ÇÑ ¿¹·Î, ¼­¹ö¸¦ ´Ù¿î½ÃÄѼ­ ¾ÆÀÌÅÛº¹»ç¸¦ ÇÏ´Â ¼ö¹ýÀ¸·Î ¸¹ÀÌ ÀÌ¿ëµÇ¾ú´ø 'ÆÐŶ»çÀÌÁî º¯Á¶' ¼ö¹ýÀ» »ìÆ캸ÀÚ.

Åë»óÀûÀÎ ÆÐŶµéÀÇ ±¸Á¶°¡ [Çì´õ,µ¥ÀÌÅÍ]ÀÇ Çü½ÄÀ¸·Î µÇ¾î ÀÖ°í º¸Åë Çì´õ´Â [Çì´õ¸¶Å©, ÆÐŶ±æÀÌ]·Î ±¸¼ºµÈ´Ù. (¿©±â¿¡ ¸Þ¼¼Áö¹øÈ£³ª ½ÃÄö½º, üũ¼¶ÀÌ Æ÷ÇԵɼöµµ ÀÖ´Ù) ¿©±â¼­ ÆÐŶ±æÀ̸¦ »ìÆ캸ÀÚ. ÇѹÙÀÌÆ®ÀÏ°æ¿ì¿¡ ÆÐŶ±æÀÌ´Â 256 ¹ÙÀÌÆ®·Î Á¦ÇѵǹǷΠº¸ÅëÀº 2¹ÙÀÌÆ® Integer¸¦ ÀÌ¿ëÇÒ °ÍÀÌ´Ù. 16bits IntÀÇ Ç¥Çö¹üÀ§´Â 0~65535 Àε¥, ´ëºÎºÐÀÇ ÆÐŶµéÀº Ä¿ºÃÀÚ 4K Á¤µµÀÏÅ×´Ù. ±×·¡¼­ ÃÖ´ëÄ¡¸¦ 8KÁ¤µµ·Î Àâ±â·Î ÇÁ·Î±×·¡¸Óµé³¢¸® ¾à¼ÓÇÑ´Ù. ¿©±â¼­ ¼­¹öÀÇ ¾àÁ¡ÀÌ Çϳª ¹ß°ßµÈ´Ù.

¼­¹öÇÁ·Î±×·¡¸Ó°¡, Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö·Î º¸³»´Â ÆÐŶµéÀÇ Å©±â´Â ÀÌ¹Ì ¾à¼ÓµÈ 8K¸¦ ³Ñ¾î°¥ ÀÏÀÌ Àý´ë·Î Àý´ë·Î ¾ø´Ù°í Âø°¢ÇÏ´Â °ÍÀÌ´Ù. ±×·¡¼­ ÀÌ·± ÄÚµåµéÀ» ÀÛ¼ºÇÏ´Â ¿À·ù¸¦ ¹üÇÑ´Ù.

#define MAX_PACKET_SIZE 8192 // 8k

typedef struct _st_packet {
    char header_mark;
    unsigned short int size;
    char data[MAX_PACKET_SIZE];
} CPacket;

...

CPacket *a_packet = &socket.receive_buffer[cur_pos];

...
char real_packet_data[MAX_PACKET_SIZE];

// »çÀÌÁŭ º¹»çÇÑ´Ù.
memcpy(real_packet_data, a_packet->data, a_packet->size);


ÇØÄ¿´Â, Ŭ¶óÀ̾ðÆ®°¡ ¼­¹ö·Î º¸³»´Â ÆÐŶÇϳªÀÇ size¸¦ Å͹«´Ï¾ø´Â °ªÀ¸·Î ¹Ù²Ù¾î ¼­¹ö°¡ Á×°Ô ¸¸µé ¼ö ÀÖ´Ù. ÀÌ ¹æ¹ýÀº º¯Á¶¹æÁö üũ¼¶À¸·Î ÀϺΠ¸·¾Æ³¾ ¼ö ÀÖÁö¸¸, º¸´Ù È®½ÇÇÑ ¾ÈÀüÀ» º¸ÀåÇÏ´Â ¹æ¹ýÀº, ÀÌ¹Ì ¾à¼ÓÇÑ °Íº¸´Ù »çÀÌÁî°¡ Å« ÆÐŶÀº ¼­¹ö¿¡¼­ °ÅºÎÇÏ´Â °ÍÀÌ´Ù.


¶Ç ´Ù¸¥ ¿¹·Î, »ç³ÉÅÍ¿¡¼­ ¸¶À»ÀÇ »óÁ¡¿­±â ¼ö¹ýÀ» Çѹø »ìÆ캸ÀÚ.

ÀÌ ¼ö¹ýÀº, ÀÏ´Ü ¸¶À»¿¡¼­ »óÁ¡À» Çѹø ¿¬´ÙÀ½¿¡ (º¸ÅëÀº »óÁ¡ NPC¸¦ Ŭ¸¯ÇÑ´Ù) À̶§ ¹ß»ýÇϴ Ŭ¶óÀ̾ðÆ® ÆÐŶÀ» '·¹ÄÚµù'ÇÑ´Ù. ±×¸®°í³ª¼­ ´øÁ¯À̳ª »ç³ÉÅÍ¿¡¼­ ½ÇÄÆ ³î´Ù°¡ ¾Æ±î ±â·ÏÇصРÆÐŶÀ» ¼­¹ö¿¡ ¹ß¼ÛÇÏ´Â °ÍÀÌ´Ù. Ŭ¶óÀ̾ðÆ® È­¸é¿¡¾ß NPC°¡ ¾øÀ¸´Ï NPC¸¦ Ŭ¸¯ÇÏ¿© »óÁ¡À» ¿­ ¹æ¹ýÀÌ Àý´ë·Î Àý´ë·Î ¾øÁö¸¸, ÆÐŶ ·¹ÄÚµù&¸®Ç÷¹À̷δ °¡´ÉÇÏ´Ù. °Ô´Ù°¡ ÀÌ·± ¼ö¹ýÀº ±»ÀÌ °í»ýÇؼ­ ¾Ïȣȭ¸¦ Ç®Áö ¾Ê°íµµ ±×³É °¡´ÉÇÏ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù.

ÀÌ·± °ÍÀ» ¸·¾Æ³»·Á¸é, ½ÃÄö½º³Ñ¹ö¸¦ µµÀÔÇϰųª ¼­¹öÀÇ °ËÁõ (Ç÷¹À̾ ÇØ´ç NPC±Ùó¿¡ ÀÖ´ÂÁö ´Ù½ÃÇѹø °Ë»ç)ÀÌ ÇÊ¿äÇÏ´Ù.

µÎ °¡ÁöÀÇ ¿¹¸¦ µé¾ú´Âµ¥, À̰͸»°íµµ ¼ö¹ýµéÀº ¹«±Ã¹«ÁøÇÏ´Ù. ¼­¹ö´Â Åë½Åº¸¾È¸¸ ¹ÏÁö¸»°í, ¸ðµç ÆÐŶµé¿¡ ´ëÇؼ­ öÀúÈ÷ ±× À¯È¿¼ºÀ» °Ë»çÇØ¾ß ÇÑ´Ù. ¿Ö³Ä¸é Ŭ¶óÀ̾ðÆ®´Â ÀûÀÇ ¼Õ¿¡ ÀÖÀ¸´Ï±î!


5 ±×·¯³ª ¿©ÀüÈ÷ Ãë¾àÇÏ´Ù #


¾Õ¼­ÀÇ 4¿øÄ¢À» ÁؼöÇϸé, Åë½Å°úÁ¤¿¡¼­ ¹ß»ýÇϴ ŽÁö(°Çµå¸®Áö´Â ¾Ê°í ±×³É º¸±â¸¸ Çϴ°Í), º¯Á¶(µ¥ÀÌÅÍ ³»¿ëÀ» ¹Ù²Ù´Â °Í), º¹Á¦(Çѹø Àü¼ÛµÈ ÆÐŶÀ» ÀÓÀÇ·Î ´Ù½Ã º¸³»´Â °Í)¸¦ ¸·¾Æ³¾ ¼ö ÀÖ´Ù. ¼­¹ö°ËÁõÀ» ÅëÇØ Å¬¶óÀ̾ðÆ® ¹ö±× ȤÀº Ŭ¶óÀ̾ðÆ® ÇØÅ·À» ÀϺΠ¸·¾Æ³¾ ¼ö´Â ÀÖ´Ù.

±×·¸Áö¸¸, ¿Â¶óÀΰÔÀÓ º¸¾È¼ºÀº ¿©ÀüÈ÷ Ãë¾àÇÏ´Ù. ±× °¡Àå ±Ùº»ÀûÀÎ ÀÌÀ¯´Â 'Ŭ¶óÀ̾ðÆ®´Â ÀûÀÇ ¼Õ¿¡ ÀÖ±â' ¶§¹®ÀÌ´Ù. À¯ÀúµéÀº ¾ó¸¶µçÁö Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥µéÀ» ¿ª¾î¼Àºí ÇÒ ¼öµµ ÀÖ°í DLLÀ» ¹Ù²ãÄ¡±â ÇÒ¼öµµ ÀÖ°í ¸Þ¸ð¸®¸¦ ÈÉÃĺ¸°Å³ª Á¶ÀÛÇÒ ¼ö ÀÖ°í (ÇØÄ¿°¡ Àڱ⵷ ÁÖ°í »ê ÀÚ±â¸Þ¸ð¸®ÀÌ´Ù) ¿î¿µÃ¼Á¦µµ ÀÌ»óÇÏ°Ô ¹Ù²ã³ùÀ» ¼öµµ Àֱ⠶§¹®ÀÌ´Ù.

ÀÌ·±°ÍµéÀ» ¹æÁöÇϱâÀ§ÇØ ¾Èö¼ö¿¬±¸¼ÒÀÇ ?HackShield³ª À×Ä«ÀÎÅͳÝÀÇ N-Protect, ¿ÍÀÌÁî·ÎÁ÷ÀÇ X-trap µîÀÇ »ó¾÷¼Ö·ç¼ÇÀÌ ³ª¿ÍÀÖ±â´Â ÇÏÁö¸¸ ¾ÈÁ¤ÀûÀÌÁö ¸øÇÏ°í, ÇØÄ¿µéÀÇ ¼ø¹ß·ÂÀ» µû¶ó°¡±â°¡ Èûµé´Ù.

¿Â¶óÀΰÔÀÓ ÃÖ´ë °­±¹À̶ó´Â ´ëÇѹα¹ÀÇ ¸í¼ºÀÌ ¿Ü±¹ÇØÄ¿µé¿¡ ÀÇÇØ ±ú¾îÁö°í ÀÖ´Ù.

last modified 2006-11-30 19:19:11
EditText|FindPage|DeletePage|LikePages|