==Phrack Inc.== Volume 0x0c, Issue 0x41, Phile #0x08 of 0x0f |=---------------------=[ Mistifying the debugger, ]=--------------------=| |=---------------------=[ ultimate stealthness ]=--------------------=| |=-----------------------------------------------------------------------=| |=------------------------=[ halfdead@phear.org ]=-----------------------=| ¹ø¿ª : bOBaNa(WOWHACKER.ORG) E-mail : hackprog@korea.ac.kr 2008.4.23 --[ ¼Ò°³ ¸î ³âµ¿¾È, ÇØÅ·µÈ ½Ã½ºÅÛ¿¡¼­ÀÇ Æ¯Á¤ ÇÁ·Î±×·¥ÀÇ Á¸À縦 ¼û±â´Â ¹æ¹ý°ú ±â¹ýÀÌ ¸¹¾ÆÁ³´Ù. À̰͵éÀº ½Ã½ºÅÛ ÄÝ Å×À̺íÀ» Á÷Á¢ÀûÀ¸·Î º¯Á¶ÇÏ´Â ¹æ¹ý¿¡ ÁýÁߵǾî ÀÖ¾ú´Ù. ¶Ç ´Ù¸¥ ¹æ¹ýµéÀº ÀÎÅÍ·´Æ® Çڵ鷯¸¦ ¼öÁ¤Çϰųª, VFS ·¹À̾¼­ ¿î¿µÇÏ´Â ¹æ¹ýÀ̾ú´Ù. ±×·¸Áö¸¸ ÀÌ ¸ðµç°ÍµéÀº ¿î¿µÃ¼Á¦ ÇÏ¿¡¼­ ¼öÁ¤µÇ¾î ¸Å¿ì ¹ß°ßµÇ±â ½±°Ô µÈ´Ù. ÀÌ ±â»ç¿¡¼­´Â Ä¿³Î ·çƮŶÀÇ ±Ã±ØÀûÀÎ Àº´ÐÀ» ¼º°øÇÒ ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇØ µð¹ö±ë ¸ÞÄ«´ÏÁòÀÇ ÀϹÝÀûÀÎ x86 Ư¡À» ÀÌ¿ëÇÏ¿© Á¦°øÇÒ °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº ¾î¶² IA-32 ȣȯ Ç÷§Æû¿¡¼­µµ µ¿ÀÛÇϸç, ´ÙÀ½ÀÇ ±â¹ýÀº ¸®´ª½º ¿î¿µÃ¼Á¦ ¿¡¼­ Àû¿ëµÉ °ÍÀ̰í, ¾î¶»°Ô "°íÀüÀûÀÎ" ÈÄÅ· ŸÄÏÀ» °Çµå¸®Áö ¾Ê°í ÀϹÝÀûÀÎ ½ÇÇà È帧À» °¡·Îç ¼ö ÀÖ´ÂÁö º¸¿©ÁÙ °ÍÀÌ´Ù. »ç½Ç, ÀÌ ±â¹ýÀº ¾Æ¹«µµ ·çƮŶÀÇ ½ÇÀ縦 ¾ËÁö ¸øÇϱ⠶§¹®¿¡ ´õ¿í ÁÁÀ» ¼ö ÀÖ´Ù. ÀÌ ±â»ç¿¡¼­ ¾ð±ÞµÇ´Â "µð¹ö°Å"´Â ½ÇÁ¦·Î IA-32 µð¹ö±ë ¸ÞÄ«´ÏÁòÀ» ÀǹÌÇϸç, ÀÌ´Â Ring 0¿¡¼­¸¸ Á¢±Ù°¡´ÉÇÏ´Ù. »ç¿ëÀÚ´Ü(Userland) µð¹ö°ÅµéÀº ÀÌ ¸ÞÄ«´ÏÁòÀ» »ç¿ë ÇÏÁö ¾ÊÀ¸¸ç, ¿ÀÁ÷ Ä¿³Î µð¹ö°Å¿¡¼­¸¸ »ç¿ëÇÑ´Ù. --[ µð¹ö°Å "IA-32 ¾ÆÅ°ÅØÃÄ´Â Äڵ带 µð¹ö±ëÇϰí ÄÚµå ½ÇÇà°ú ÇÁ·Î¼¼¼­ ÆÛÆ÷¸Õ½º¸¦ ¸ð´ÏÅ͸µÇϱâ À§ÇØ È®ÀåÀûÀÎ µð¹ö±ë ¼³ºñ¸¦ Á¦°øÇÑ´Ù. ÀÌµé ¼³ºñ´Â ½Ã½ºÅÛ ¼ÒÇÁÆ®¿þ¾î, ¸ÖƼŽºÅ· ¿î¿µÃ¼Á¦¿Í °°Àº ¾ÖÇø®ÄÉÀ̼ÇÀ» µð¹ö±ëÇϱâ À§ÇØ Á¸ÀçÇÑ´Ù." °³¹ßÀڷμ­ÀÇ »îÀ» ´õ ½±°Ô Çϱâ À§Çؼ­, ÀÎÅÚÀº ÇÁ·Î¼¼½º¸¦ µð¹ö±ëÇÏ´Â °ÍÀ» °ü¸®ÇÒ ¸ñÀûÀ¸·Î ÇÑ ¸ÞÄ«´ÏÁòÀ» ¼Ò°³Çß´Ù. ÀÌ ¸ÞÄ«´ÏÁòÀº »ç¿ëÀÚ°¡ ¸Þ¸ð¸® ÁÖ¼Ò»ó¿¡ Çϵå¿þ¾î ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ°Ô ÇØÁִ Ưº°ÇÑ ·¹Áö½ºÅÍ(µð¹ö±ë ·¹Áö½ºÅͶó°í ºÒ¸®´Â DR0..DR7)ÀÇ ÁýÇÕ¿¡ ÀÇÇØ ´Ù·ïÁø´Ù. ÀÌ ¸ÞÄ«´ÏÁòÀº ½ÇÇà È帧ÀÌ ºê·¹ÀÌÅ©Æ÷ÀÎÆ®·Î ¸¶Å©µÈ ÁÖ¼Ò·Î µµ´ÞÇÏÀÚ¸¶ÀÚ ¿¹¿Ü°¡ ÀϾ´Â ½ÇÁ¦ »óȲÀ» »ìÇDZâ À§ÇØ do_debug() ÇÔ¼ö (../i386/kernel/traps.c¿¡ Á¤ÀǵǾî ÀÖ´Ù.)¸¦ È£ÃâÇÏ´Â µð¹ö±× ÀÎÅÍ·´Æ® Çڵ鷯(INT 1)·Î Á¦¾î¸¦ ³Ñ±ä´Ù. µð¹ö±ë ¼­Æ÷Æ®´Â µð¹ö±× ·¹Áö½ºÅÍ(DB0 ~ DB7)¿Í 2°³ÀÇ model-specific ·¹Áö½ºÅÍ(MSRs)¸¦ ÅëÇØ Á¢±ÙµÈ´Ù. ÀÌ µð¹ö±× ·¹Áö½ºÅÍ¿¡¸¸ ÁýÁßÇÏ´Â °ÍÀÌ ÀÌ ¹®¼­ÀÇ ¸ñÀûÀÌ´Ù. ÀÌµé ·¹Áö½ºÅÍ´Â ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¶ó°í ºÒ¸®´Â ¸Þ¸ð¸®ÀÇ ÁÖ¼Ò¿Í I/O À§Ä¡¸¦ ÀúÀåÇÑ´Ù. ºê·¹ÀÌÅ©Æ÷ÀÎÆ®´Â ÇÁ·Î±×·¥¿¡¼­ »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ¸Þ¸ð¸®¿¡¼­ÀÇ µ¥ÀÌÅÍ-ÀúÀå °ø°£¿¡ Á¸Àç ÇÏ´Â À§Ä¡ÀÌ¸ç µð¹ö°Å ¼ÒÇÁÆ®¿þ¾î¸¦ ºÒ·¯¿ÈÀ¸·Î½á ÇÁ·Î¼¼¼­ÀÇ »óŸ¦ °Ë»çÇϰųª ÇÁ·Î±×·¥ÀÇ ½ÇÇàÀ» Á¤Áö½ÃŰ°Ô ÇÏ±æ ¿øÇϴ ƯÁ¤ I/O Æ÷Æ®µéÀÌ´Ù. µð¹ö±× ¿¹¿Ü(#DB)´Â ¸Þ¸ð¸® ȤÀº I/O Á¢±ÙÀÌ ÀÌµé ºê·¹ÀÌÅ©Æ÷ÀÎÆ® ÁÖ¼ÒÁß Çϳª·Î µÇ¾úÀ» ¶§ »ý¼ºµÈ´Ù. ºê·¹ÀÌÅ© Æ÷ÀÎÆ®´Â ¸Þ¸ð¸® Àб⠱׸®°í/¶Ç´Â ¾²±â ¸í·ÉÀ̳ª I/O Àб⠱׸®°í/¶Ç´Â ¾²±â ¸í·É°ú °°Àº ¸Þ¸ð¸® ¶Ç´Â I/O ÀÇ Æ¯Á¤ ÇüŸ¦ À§ÇØ ÁöÁ¤µÈ´Ù. µð¹ö°Å ·¹Áö½ºÅÍ´Â ¸í·É¾î ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¿Í µ¥ÀÌÅÍ ºê·¹ÀÌÅ©Æ÷ÀÎÆ® ¸ðµÎ Á¦°øÇÑ´Ù. MSRs(P6 °è¿­ ÇÁ·Î¼¼¼­ ¿¡¼­ÀÇ IA-32 ¾ÆÅ°ÅØÃÄ·Î ¼Ò°³µÈ)Àº ºÐ±â,ÀÎÅÍ·´Æ®, ¿¹¿Ü¸¦ °¨½ÃÇÏ¸ç ¸¶Áö¸· ºÐ±â, ÀÎÅÍ·´Æ® ȤÀº ¿¹¿Ü°¡ ÀϾ ÁÖ¼Ò¸¦ ±â·ÏÇÑ´Ù. ±×¸®°í ¸¶Áö¸· ºÐ±â´Â ÀÎÅÍ·´Æ® ȤÀº ¿¹¿Ü°¡ ÀϾ±â ÀüÀÇ ¸¶Áö¸· ºÐ±â(last branch)¸¦ ÃëÇÑ´Ù. --[ µð¹ö±× ·¹Áö½ºÅÍ ÇÁ·Î¼¼¼­ÀÇ µð¹ö±× ¿¬»êÀ» Á¦¾îÇÏ´Â 8°³ÀÇ µð¹ö±× ·¹Áö½ºÅͰ¡ ÀÎÅÚ ÇÁ·Î¼¼¼­¿¡ ÀÇÇØ Á¦°øµÈ´Ù. ÀÌµé ·¹Áö½ºÅ͵éÀº ±â·Ï µÉ¼ö ÀÖ°í, MOV ¸í·É¾îÀÇ ÇüÅ·Πµð¹ö±× ·¹Áö½ºÅÍ¿¡¼­ move¸¦ ÀÌ¿ëÇÏ¿© ÀÐÀ»¼öµµ ÀÖ´Ù. µð¹ö±× ·¹Áö½ºÅÍ´Â ÀÌµé ¸í·É¾î Áß Çϳª¸¦ À§ÇÑ source operand ȤÀº destination operand·Î Á¸ÀçÇÒ ¼ö ÀÖ´Ù. µð¹ö±× ·¹Áö½ºÅÍ´Â ÀÚ¿ø ¿ì¼±ÀûÀÌ´Ù. ; ÀÌµé ·¹Áö½ºÅÍ¿¡ Á¢±ÙÇÏ´Â MOV ¸í·É¾î´Â ¿ÀÁ÷ real-address ¸ðµå, SMM, CPLÀÌ 0ÀÎ º¸È£ ¸ðµå¿¡¼­¸¸ ½ÇÇàµÉ ¼ö ÀÖ´Ù. ¾î´À ´Ù¸¥ ±ÇÇÑ ·¹º§¿¡ ¼­ºÎÅÍ µð¹ö±× ·¹Áö½ºÅ͸¦ Àаųª ¾²±â¸¦ ½ÃµµÇÏ´Â °ÍÀº ÀϹÝÀûÀÎ º¸È£ ¿¹¿Ü¸¦ ¹ß»ý½ÃŲ´Ù. µð¹ö±× ·¹Áö½ºÅÍÀÇ ÁÖ¿äÇÑ ±â´ÉÀº 0¿¡¼­ 3±îÁö ¼ýÀÚÈ­µÈ 1¿¡¼­ 4±îÁöÀÇ ºê·¹ÀÌÅ© Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÏ°í °¨½ÃÇÏ´Â °ÍÀÌ´Ù. µð¹ö±× ¸ÞÄ«´ÏÁòÀº DR6, DR7 µÎ Ưº°ÇÑ ·¹Áö½ºÅÍ ¸¦ ÅëÇØ ºê·¹ÀÌÅ© Æ÷ÀÎÆ®¸¦ °ü¸®ÇÏ°Ô ÇØÁÖ¸ç, ÀÌ´Â ÈÄ¿¡ ÀÚ¼¼È÷ ¼³¸íÇÒ °ÍÀÌ´Ù. °¢ ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¸¦ À§ÇØ, ´ÙÀ½ Á¤º¸´Â µð¹ö±× ·¹Áö½ºÅ͸¦ ÀÌ¿ëÇØ ±â¼úµÇ°Å³ª ŽÁöµÉ ¼ö ÀÖ´Ù.: - ºê·¹ÀÌÅ©Æ÷ÀÎÆ®°¡ ÀϾ´Â ¼±Çü ÁÖ¼Ò. - ºê·¹ÀÌÅ©Æ÷ÀÎÆ® À§Ä¡ÀÇ ±æÀÌ(1, 2, ȤÀº 4¹ÙÀÌÆ®). - »ý¼ºµÇ±â À§ÇÑ µð¹ö±× ¿¹¿Ü¸¦ À§ÇÑ ÁÖ¼Ò¿¡¼­ ¼öÇàµÇ¾î¾ßÇÏ´Â ¿¬»ê - ºê·¹ÀÌÅ©Æ÷ÀÎÆ®°¡ °¡´ÉÇÑÁö ¾Æ´ÑÁö. - µð¹ö±× ¿¹¿Ü°¡ »ý¼ºµÇ¾úÀ»¶§ ºê·¹ÀÌÅ©Æ÷ÀÎÆ® »óŰ¡ Çö½ÃÁ¡À̾ú´ÂÁö ¾Æ´ÑÁö. -------[ µð¹ö±× ÁÖ¼Ò ·¹Áö½ºÅÍ °¢ µð¹ö±×-ÁÖ¼Ò ·¹Áö½ºÅÍ(DR0-DR3)µéÀº ºê·¹ÀÌÅ©Æ÷ÀÎÆ®ÀÇ 32ºñÆ® ¼±Çü ÁÖ¼Ò¸¦ °¡Áø´Ù. ºê·¹ÀÌÅ©Æ÷ÀÎÆ® ºñ±³´Â ¹°¸®ÀûÀÎ ÁÖ¼Ò º¯È¯ÀÌ ÀϾ±â Àü¿¡ ¸¸µé¾îÁø´Ù. -------[ µð¹ö±× ·¹Áö½ºÅÍ DR4 and DR5 µð¹ö±× ·¹Áö½ºÅÍ DR4¿Í DR5´Â µð¹ö±× È®ÀåÀÌ °¡´ÉÇØÁ³À» ¶§(Á¦¾î ·¹Áö½ºÅÍ CR4ÀÇ ³»ºÎ¿¡ DE Ç÷¡±×°¡ ¼³Á¤µÈ´Ù) ¿¹¾àµÇ¾î Á¸ÀçÇϸç, ÀÌµé ·¹Áö½ºÅ͸¦ ÂüÁ¶Çϱâ À§ÇØ ½ÃµµÇÒ ¶§ À߸øµÈ-opcode ¿¹¿Ü°¡ ÀϾ °ÍÀÌ´Ù. DE Ç÷¡±×°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀ»¶§, ÀÌµé ·¹Áö½ºÅÍ´Â DR6¿Í DR7·Î µÈ´Ù(aliased). ------[ µð¹ö±× »óÅ ·¹Áö½ºÅÍ (DR6) ÀÌ Æ¯º°ÇÑ ·¹Áö½ºÅÍ´Â ¸¶Áö¸·À¸·Î µð¹ö±× ¿¹¿Ü°¡ ÀϾÀ» ±× ½ÃÁ¡¿¡ Á¸ÀçÇÏ´Â µð¹ö±× »óŸ¦ ±â·ÏÇϱâ À§ÇØ »ç¿ëµÈ´Ù. ÀÌ ·¹Áö½ºÅÍ¿¡¼­ÀÇ Ç÷¡±×´Â ´ÙÀ½ Á¤º¸¸¦ º¸¿©ÁØ´Ù.: - B0..B3 (bits 0..3)Àº ºê·¹ÀÌÅ©Æ÷ÀÎÆ® »óŰ¡ ŽÁöµÇ¾ú´Ù´Â °ÍÀ» ³ªÅ¸³½´Ù. À̵é Ç÷¡±×µéÀº °¢ ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¿¡ LENn¿¡ ÀÇÇØ ±â¼úµÇ°í, µð¹ö±× Á¦¾î ·¹Áö½ºÅÍ DR7¿¡¼­ÀÇ R/Wn Ç÷¡±×µéÀÌ ÂüÀÌ¸é ¼³Á¤µÈ´Ù. ºñ·Ï ºê·¹ÀÌÅ©Æ÷ÀÎÆ®°¡ ·¹Áö½ºÅÍ DR7¿¡¼­ Ln°ú Gn Ç÷¡±×¿¡ ÀÇÇØ °¡´ÉÇÏÁö ¾ÊÀ» Áö¶óµµ ±×°ÍµéÀº ¼³Á¤µÈ´Ù. - BD (bit 13) (µð¹ö±× ·¹Áö½ºÅÍ Á¢±Ù ŽÁö)´Â ¸í·É¾î ½ºÆ®¸²¿¡¼­ÀÇ ´ÙÀ½ ¸í·É¾î°¡ µð¹ö±× ·¹Áö½ºÅÍ(DR0..DR7) Áß Çϳª¿¡ Á¢±ÙÇÒ °ÍÀ̶ó´Â °ÍÀ» ³ªÅ¸³½´Ù. ÀÌ Ç÷¡±×´Â µð¹ö±× Á¦¾î ·¹Áö½ºÅÍ¿¡¼­ÀÇ ¹ü¿ë ŽÁö Ç÷¡±×(GD : General Detect)°¡ ¼³Á¤µÇ¾úÀ»¶§ °¡´ÉÇÏ°Ô µÈ´Ù. - BS (bit 14) (single step)´Â µð¹ö±× ¿¹¿Ü°¡ single-step ½ÇÇà ¸ðµå¿¡ ÀÇÇØ À¯¹ßµÇ¾ú´Ù´Â °ÍÀ» ³ªÅ¸³½´Ù.(¼³Á¤µÉ¶§) - BT (bit 15) (ÀÛ¾÷ º¯È¯)Àº µð¹ö±× ¿¹¿Ü°¡ Ÿ°Ù ÀÛ¾÷ÀÇ TSS¿¡¼­ÀÇ µð¹ö±× Æ®·¦ Ç÷¡±×°¡ ¼³Á¤µÇ¾î ÀÖ´Â task switch·ÎºÎÅÍ °á°ú°¡ »ý±â´Â °ÍÀ» ³ªÅ¸³½´Ù.(¼³Á¤µÉ¶§) ÇÁ·Î¼¼¼­´Â Àý´ë·Î DR6 ·¹Áö½ºÅÍÀÇ ³»¿ëÀ» »èÁ¦ÇÏÁö ¾Ê´Â´Ù. ------[ µð¹ö±× Á¦¾î ·¹Áö½ºÅÍ (DR7) µð¹ö±× Á¦¾î ·¹Áö½ºÅÍ(DR7)Àº ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¿Í ºê·¹ÀÌÅ©Æ÷ÀÎÆ® »óŸ¦ ¼³Á¤Çϰųª ¼³Á¤ÇÒ ¼ö ¾ø°Ô ÇÑ´Ù. ±× Ç÷¹±×¿Í Çʵå´Â ´ÙÀ½ÀÇ °ÍµéÀ» Á¦¾îÇÑ´Ù: - L0..L3 (bits 0, 2, 4, 6) (·ÎÄà ºê·¹ÀÌÅ©Æ÷ÀÎÆ® °¡´É)Àº ÇöÀç ÀÛ¾÷¿¡ ´ëÇØ Á¶ÇÕµÈ ºê·¹ÀÌÅ©Æ÷ÀÎÆ® »óŸ¦ »ç¿ë°¡´ÉÇÏ°Ô ÇÑ´Ù.(¼³Á¤µÉ¶§) ºê·¹ÀÌÅ©Æ÷ÀÎÆ® »óŰ¡ ŽÁöµÇ°í ±× Á¶ÇÕµÈ Ln Ç÷¡±×°¡ ¼³Á¤µÇ¾úÀ»¶§, µð¹ö±× ¿¹¿Ü°¡ »ý¼ºµÈ´Ù. ÇÁ·Î¼¼¼­´Â ¿øÇÏÁö ¾ÊÀº ºê·¹ÀÌÅ©Æ÷ÀÎÆ® »óŸ¦ ÇÇÇϱâÀ§ÇØ º¯È¯ÇÏ´Â ¸ðµç ÀÛ¾÷¿¡¼­À̵é Ç÷¡±×¸¦ ÀÚµ¿ÀûÀ¸·Î ±ú²ýÈ÷ ÇÑ´Ù. - G0..G3 (bits 1, 3, 5, 7) (Àü¿ª ÇÁ·¹ÀÌÅ©Æ÷ÀÎÆ® °¡´É)Àº ¸ðµç ÀÛ¾÷¿¡ ´ëÇØ Á¶ÇÕµÈ ºê·¹ÀÌÅ©Æ÷ÀÎÆ® »óŰ¡ »ç¿ë°¡´ÉÇÏ°Ô ÇÑ´Ù.(¼³Á¤µÉ¶§) ºê·¹ÀÌÅ©Æ÷ÀÎÆ® »óŰ¡ ŽÁöµÇ°í ±× Á¶ÇÕµÈ Gn Ç÷¡±×°¡ ¼³Á¤µÇ¸é, µð¹ö±× ¿¹¿Ü´Â ÀϾ´Ù. ÇÁ·Î¼¼¼­´Â ¸ðµç ÀÛ¾÷¿¡ ´ëÇØ ºê·¹ÀÌÅ© Æ÷ÀÎÆ®¸¦ °¡´ÉÇÏ°Ô ÇÏ´Â ÀÛ¾÷ º¯È¯¿¡¼­ À̵é Ç÷¡±×¸¦ ±ú²ýÈ÷ ÇÏÁö ¾Ê´Â´Ù. - LE¿Í GE (bits 8 and 9) (·ÎÄÃ, Àü¿ª Á¤È®ÇÑ ºê·¹ÀÌÅ©Æ÷ÀÎÆ® °¡´É)´Â ÇÁ·Î¼¼¼­°¡ µ¥ÀÌŸ ºê·¹ÀÌÅ©Æ÷ÀÎÆ® »óŸ¦ ÀÏÀ¸Å² Á¤È®ÇÑ ¸í·É¾î¸¦ ŽÁö Çϵµ·Ï ¾ß±âÇÑ´Ù. P6 °è¿­ ÇÁ·Î¼¼¼­¿¡¼­´Â Á¦°øµÇÁö ¾Ê´Â´Ù. - GD (bit 13) (¹ü¿ë ŽÁö °¡´É)´Â µð¹ö±× ·¹Áö½ºÅÍ¿¡ Á¢±ÙÇÏ´Â ¾î¶² MOV ¸í·É¾î ¿¡ ¿ì¼±ÇÏ¿© »ý¼ºµÇ´Â µð¹ö±× ¿¹¿Ü¸¦ ÀϾîŰ´Â µð¹ö±× ·¹Áö½ºÅÍ º¸È£¸¦ °¡´ÉÇÏ°Ô ÇÑ´Ù.(¼³Á¤µÉ¶§) ±×·¯ÇÑ »óŰ¡ ŽÁöµÉ ¶§, µð¹ö±× »óÅ ·¹Áö½ºÅÍ DR6ÀÇ BD Ç÷¡±×´Â ¿¹¿Ü¸¦ »ý¼ºÇÏ´Â °Í¿¡ ¾Õ¼­ ¼³Á¤µÈ´Ù. - R/W0..R/W3 (bits 16, 17, 20, 21, 24, 25, 28, and 29) (read/write) ´Â ºê·¹ÀÌÅ© Æ÷ÀÎÆ®¿¡ ´ëÀÀÇÏ´Â °Í¿¡ ´ëÇØ ºê·¹ÀÌÅ©Æ÷ÀÎÆ® »óŸ¦ ±â¼úÇÑ´Ù. ´õ¿í ´Ù¼¼ÇÑ Á¤º¸¸¦ À§ÇØ ÀÎÅÚ ¸Þ´º¾óÀ» Àоî¶ó. - LEN0..LEN3 (bits 18, 19, 22, 23, 26, 27, 30, and 31) (±æÀÌ) --[ ¸¶¹ý ¿ÀÄÉÀÌ, Áö±Ý ¿ì¸®´Â IA-32 µð¹ö±ë ¸ÞÄ«´ÏÁò¿¡ ´ëÇÑ ¸ðµç °ÍÀ» °ÅÀÇ ¹è¿ü´Ù. ´ç½ÅÀÌ ¾à¼ÓÇß´ø Áñ°Ì°Ô ÇÏ´Â °÷Àº ¾îµðÀΰ¡? Áö±Ý ¿ì¸®´Â ¾à°£ Áß¿äÇÑ °ÍµéÀ» ¾Ë°í ÀÖ´Ù: ¸Þ¸ð¸® ÁÖ¼Ò¿¡ ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ°í ½ÇÇà È帧Àº ¼³Á¤µÈ ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¿¡ µµ´ÞÇÏÀÚ¸¶ÀÚ ½ÇÇàÀº µð¹ö±× Çڵ鷯(INT 1)·Î ¹æÇâÀÌ º¯°æµÈ´Ù. À½, ±×·¯¸é Á¸ÀçÇÏ´Â µð¹ö±× Çڵ鷯³ª ¿ì¸®ÀÇ ÇÔ¼öÇÏ¿¡ ÀÖ´Â °Í Áß Çϳª·Î ´ëüÇÏ¸é ¾î¶³±î? entry.S·Î ºÎÅÍ º¼ ¼ö ÀÖµíÀÌ, ENTRY(debug) pushl $0 pushl $ SYMBOL_NAME(do_debug) jmp error_code ½ÇÁ¦ µð¹ö±× Çڵ鷯´Â C ÇÔ¼öÀ̸ç, do_debug()´Â traps.c¿¡ Á¤ÀǵȴÙ. ¸Â´Ù, ¿ÀÄÉÀÌ, ¿ì¸®´Â INT 1 Çڵ鷯¸¦ ÆÐÄ¡ÇÒ ¼ö ÀÖ°í, ±×·± ´ÙÀ½ do_debug()¸¦ ¿ì¸®ÀڽŸ¸ÀÇ À§Ä¡¿¡¼­ do_debug()¸¦ È£ÃâÇϰųª ¿ì¸®ÀڽŸ¸ÀÇ do_debug()¸¦ ²¨³»°í µð¹ö±× Çڵ鷯¿¡ ÀÇÇØ È£ÃâµÇ±â¸¦ ±â´ëÇÑ´Ù. µû¶ó¼­, IDT¸¦ °Çµå¸®Áö ¾ÊÀ» ¼ö À־ ¾È½ÉÀÌ µÈ´Ù. ±×·¯³ª ¿ì¸®ÀÇ Çڵ鷯°¡ ¹«¾ùÀ» ´Ù·ï¾ßÇϳª? ºÐ¸íÇѰÍÀº, ¾î´ÀÁ¤µµÀÇ ÆÄ¶ó¹ÌÅ͸¦ °Ë»çÇÒ ÇÊ¿ä´Â ÀÖÀ¸¸ç, ±×·± ´ÙÀ½ ½ÇÁ¦ ¿î¿µÃ¼Á¦ do_debug()·Î Á¦¾î¸¦ ³Ñ±ä´Ù. ±×·¸´Ù¸é, ¹«½¼ ÆÄ¶ó¹ÌÅ͵éÀº °¨½ÃÇØ¾ß Çϳª? °è¼Ó Àо½Ã¶ó... ------[ sys_call_table[]À» ÇÏÀÌÀçÅ·Çϱâ Áö±ÝÂë ´ç½ÅÀº ¸Þ¸ð¸®ÀÇ ¸ñÇ¥µÈ Ÿ°Ù¿¡¼­ Àбâ/¾²±â/½ÇÇàÀ» Çϱâ À§Çؼ­ syscall tableÀ» ¾î¶»°Ô ÇÏÀÌÀçÅ·ÇÒÁö »ý°¢ÀÌ ³ª¾ßÇÑ´Ù. À̰ÍÀº INT 80 Çڵ鷯 ÁÖ¼Ò°¡ µÉ ¼öµµ ÀÖ°í syscall table ÁÖ¼Ò°¡ µÉ ¼öµµ ÀÖÀ¸¸ç, °á·ÐÀûÀ¸·Î´Â ¹» ÇÏµç ºñ½ÁÇÏ´Ù. ±×·¯¹Ç·Î, ¿î¿µÃ¼Á¦°¡ syscall·Î ÇâÇÒ¶§¸¶´Ù ±×°ÍÀº ¿ì¸®ÀÇ Çڵ鷯¿¡¼­ ³¡³¯ °ÍÀÌ´Ù. ¿©±â¼­ ¿ì¸®´Â µÎ ¿É¼ÇÀ» °¡Áø´Ù: A) IDT¿¡¼­ÀÇ INT 80 Çڵ鷯¸¦ Á÷Á¢ÀûÀ¸·Î ÇÏÀÌÁ¦Å·Çϰųª B) ¸Þ¸ð¸®¿¡¼­ÀÇ sys_call_table[]ÀÇ ÁÖ¼Ò¸¦ ÇÏÀÌÁ¦Å·ÇÏ´Â °ÍÀÌ´Ù. ÀÌ µÑ ¸ðµÎ ¿ì¸®ÀÇ ¸ñÀû°ú ÀûÇÕÇϹǷΠA¸¦ ¸ñÇ¥·Î ÇϰڴÙ. ´ÙÀ½ ÇÔ¼ö´Â INT 80 Çڵ鷯ÀÇ ÁÖ¼Ò¸¦ ¸®ÅÏÇÒ °ÍÀÌ´Ù. get_idt_entry: sidt idtr movl idtr+2, %ebx leal (%ebx, %eax, 8), %ebx movw (%ebx), %cx roll $16, %ecx movw 0x6(%ebx), %cx roll $16, %ecx movl %ecx, %eax ret ÁÖ¼Ò¸¦ Çѹø ¾Ë¸é, ´ÙÀ½°ú °°ÀÌ ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù: set_bpm: movl $0x80, %eax call get_idt_entry movl %eax, %dr0 xorl %eax, %eax orl $0x2080, %eax movl %eax, %dr7 ret À§¿¡¼­ º¼ ¼ö ÀÖµíÀÌ, set_bpm() ÇÔ¼ö´Â INT 80ÀÌ À§Ä¡ÇÑ ¸Þ¸ð¸® ÁÖ¼Ò¿Í ÇÔ²² DR0¸¦ ºÒ·¯¿Ã °ÍÀ̸ç, ¶ÇÇÑ, µð¹ö±× ·¹Áö½ºÅÍ¿¡ Á¢±ÙÇÏ´Â WHY¿Í WH0¸¦ °¨½ÃÇÒ¼ö ÀÖ°Ô ÇØÁÖ´Â magic GD ºñÆ®¸¦ Æ÷ÇÔÇÏ´Â DR7ÀÇ Ç÷¡±×¸¦ ¼³Á¤ ÇÒ °ÍÀÌ´Ù. GD bit´Â "±× ¾î¶² µð¹ö±× ·¹Áö½ºÅÍ¿¡ Á¢±ÙÇÏ´Â MOV ¸í·É¾î¿¡ ¿ì¼±ÇÏ¿© »ý¼ºµÇ´Â µð¹ö±× ¿¹¿Ü(exception)¸¦ ÀÏÀ¸Å°±â" ¶§¹®¿¡ ¿ì¸®¿¡°Ô ÀÖ¾î ¸Å¿ì Áß¿äÇÏ´Ù. ¿Í¿ì, Àǹ̴Â..? ±×°Ç ´©±º°¡ µð¹ö±× ·¹Áö½ºÅ͸¦ Àаųª/¾²·Á°í ÇÑ´Ù¸é, Á¦¾î´Â ¸í·É¾î°¡ "¹ß»ýÇϱâ Àü¿¡" ¿ì¸®ÀÇ Çڵ鷯·Î ³Ñ¾î¿Â´Ù. ---------------------------------------------------------------------------- µû¶ó¼­, µð¹ö°Å ȤÀº ¾ÇÀÇÀûÀÎ ÅøÀÌ µð¹ö±× ·¹Áö½ºÅ͵éÀ» °Ë»çÇÑ´Ù´Â °ÍÀ» ¾È´Ù¸é, µð¹ö°¡ ȤÀº ¾ÇÀÇÀûÀÎ ÅøÀÌ ¾Ë±â Àü¿¡ ( So, we know if someone, a debugger or some tool of the devil, is checking the debug registers, even before they know it.) ---------------------------------------------------------------------------- À̰ÍÀº ¿ì¸®ÀÇ ÈçÀûÀ» ¾Ë¼ö ÀÖ°Ô²û ½Ã°£À» ÁØ´Ù: ¿ì¸®´Â ¸ðµç°ÍÀ» Ãë¼ÒÇÒ ¼ö ÀÖ°í ´Ü¼øÈ÷ µð¹ö±× ·¹Áö½ºÅÍ µî¿¡ ¿µÇâÀ» ÁÖ´Â ¸í·É¾î¸¦ °Ç³Ê¶Ù±â À§ÇØ ¾à°£ ±â´Ù¸± ¼ö ÀÖ´Ù. À̰ÍÀ» ÇÏ´Â ÁÁÀº °ÍÀº µð¹ö±× ·¹Áö½ºÅ͵éÀ» ±ú²ýÈ÷ ÇÏ´Â ½Ã½ºÅÛÀ» º¸¿©ÁÖ°í, ªÀº ½Ã°£ µÚ¿¡ ¸ðµç°ÍÀ» µÚ·Î ¿ì¸®ÀÇ Çʿ信 ¸Â°Ô ÈÄÅ·ÇÏ´Â °ÍÀÌ´Ù. ÃÖ»óÀÇ Á¢±ÙÀº µð¹ö±× ·¹Áö½ºÅ͵鿡 Á¢±ÙÇÏ´Â ¸í·É¾îÀÇ Å¸ÀÔÀ» ºÐ¼®ÇÏ´Â ÄÚµå ¿¡¹Ä ·¹ÀÌÅ͸¦ »ý°¢Çس»°í ±×°É ±â¹ÝÀ¸·Î ÇÏ¿© ´ÙÀ½ ÇൿÀ» °áÁ¤ÇÏ´Â °ÍÀÌ´Ù:µð¹ö±× ·¹Áö½ºÅ͵éÀ» ±ú²ýÈ÷ Çϰí ÈÄ¿¡ º¹±¸½ÃŰ°Å³ª ´Ü¼øÈ÷ ¸í·É¾î Ä«¿îÆ®¸¦ Áõ°¡½ÃŲ´Ù. ±× °á°ú ¸í·É¾î´Â °£´ÜÈ÷ ¹«½ÃµÈ´Ù. ¾î¶µç, ³¡. ------[ Çڵ鷯 Áö±Ý±îÁö, syscall table ȤÀº INT 80 Çڵ鷯¿¡¼­ ¾î¶²°Íµµ ÆÐÄ¡ÇÏÁö ¾Ê°í ½ÇÇà È帧À» º¯°æÇÏ´Â °ÍÀ» ´Ù·ç¾ú´Ù. ±×·¯³ª, ¿ì¸®ÀÇ Çڵ鷯¸¦ Á¦¾îÇϱâ À§Çؼ­´Â ¹«¾ùÀ» ÇØ¾ß Çϴ°¡? ÀÇ ¹®Á¦´Â ¿©ÀüÈ÷ ³²¾ÆÀÖ´Ù. ½ÃÀÛÇÏ´Â »ç¶÷µéÀ» À§ÇÏ¿©, °¡Àå ´Ü¼øÈ­ÇÑ ÇüÅ¿¡¼­, À̽ÃÁ¡¿¡¼­ %eax ·¹Áö½ºÅÍ´Â ¿ì¸®°¡ ¿øÇÏ´Â syscall ³Ñ¹ö¸¦ °¡Áö±â ¶§¹®¿¡ ¿ì¸®ÀÇ Çڵ鷯´Â %eax ·¹Áö½ºÅÍÀÇ °ªÀ» üũÇÒ Çʿ䰡 ÀÖ À¸¸ç, ±×°ÍÀ» ±â¹ÝÀ¸·Î ¿ì¸®ÀÇ ÇØÅ·µÈ syscallÀ» OS¿¡ ³Ñ°Ü¾ß ÇÑ´Ù. ´ÙÀ½ÀÌ °¡Àå ´Ü¼øÇÑ Çڵ鷯°¡ ÇØ¾ßÇÏ´Â °ÍÀÌ´Ù: asmlinkage void new_do_debug(struct pt_regs * regs, long error_code) { unsigned long condition; unsigned long mask = 0x2008; __asm__ __volatile__("movl %%db6,%0" : "=r" (condition)); if (condition & BD_FLAG) { /* someone is r/w the registers */ condition &= ~BD_FLAG; __asm__ __volatile__ ("movl %0, %%db6" : : "r" (condition)); regs->eip += 3; __asm__ __volatile__ ("movl %0, %%db7" : : "r" (mask)); } if (condition & DR_TRAP0) { if (regs->eax == __NR_time) sys_call_table[__NR_time] = hacked_time; if (regs->eflags & VM_MASK) { (*old_do_debug)(regs,error_code); __asm__ __volatile__ ("movl %0, %%db7" : : "r" (mask)); } condition &= ~DR_TRAP0; __asm__ __volatile__ ("movl %0, %%db6" : : "r" (condition)); __asm__ __volatile__ ("movl %0, %%db7" : : "r" (mask)); regs->eflags |= X86_EFLAGS_RF; } else { (*old_do_debug)(regs, error_code); __asm__ __volatile__ ("movl %0, %%db7" : : "r" (mask)); } return; } ¿©±â¼­ ¹«¾ùÀ» Çϴ°¡? ¸ÕÀú, »óÅ ·¹Áö½ºÅÍ(DR6)¿¡¼­ °ªÀ» Àâ°í, ¿ì¸®ÀÇ Çڵ鷯°¡ ÇϰíÀÚ Çϴ°ÍÀ» ¹ß°ßÇÏ·Á°í ³ë·ÂÇØ¾ß ÇÑ´Ù. ¸¸¾à ¿ì¸®ÀÇ ½ÇÇàÀÌ ¿ì¸®°¡ ÀÚ¸®Àâ¾Ò´ø ºê·¹ÀÌÅ©Æ÷ÀÎÆ®ÀÇ °á°ú·ÎºÎÅÍ ¿Â´Ù¸é, ÇÏÀÌÀçÅ·Çϱâ·Î °á½ÉÇß´ø syscallÀÇ °ª°ú %eax ·¹Áö½ºÅÍÀÇ °ªÀ» ºñ±³ÇÑ´Ù.(¿ì¸®ÀÇ °æ¿ì sys_time()ÀÌ´Ù) Á¦°øµÈ ¿¹Á¦¿¡¼­, ½Ã°£°ú °ø°£ÀÇ ºÎÁ·À¸·Î, sys_call_table[] À» Á÷Á¢ÀûÀ¸·Î º¯°æÇßÁö¸¸ hacked_time()Àº sys_call_table[]À» º¯°æ½ÃÄÑ ½ÇÇàµÇ¾ú´ø ÀνºÅÏÆ®·Î µÇµ¹¸®¹Ç·Î °ÆÁ¤ÇÒ °ÍÀÌ ¾Æ´Ï´Ù. asmlinkage long hacked_time(int *tloc) { sys_call_table[__NR_time] = original_time; printk("<1>WE changed it!!\n"); return original_time(tloc); } ¹°·Ð, syscall tableÀ» ÀüºÎ °Çµå¸®Áö ¾Ê°í ÇÏ´Â ¹æ¹ýÀº ¿©·¯°¡ÁöÁö¸¸ hacked_time()ÀÌ sys_call_table[]ÀÇ °ªÀ» µÇµ¹¸°´Ù´Â ÇѰ¡Áö¸¦ ¿°µÎ¿¡ µÖ¾ßÇÑ´Ù. hacked_time()ÀÌ Çϴ°ÍÀº sys_call_table[]ÀÇ °ªÀ¸·Î µÇµ¹¸®Áö¸¸ ½ÇÁ¦ º¯È­°¡ ÀϾ´Â °ÍÀº ¸¶ÀÌÅ©·ÎÃʺ¸´Ù À۱⠶§¹®¿¡ ¹®Á¦°¡ µÉ ¼ö ¾ø´Ù. ´õ ÁÁÀº ¹æ¹ýÀº syscall ³Ñ¹ö¿¡ ±â¹ÝÇÏ¿© ¿ì¸®ÀÇ Çڵ鷯°¡ %eax ·¹Áö½ºÅÍÀÇ °ªÀ϶§ syscallÀÇ ÆÄ¶ó¹ÌÅ͸¦ ºÐ¼®ÇÏ´Â °ÍÀÌ´Ù. ¿ì¸®´Â ·¹Áö½ºÅÍ¿¡ ÀÇÇØ °£´ÜÈ÷ °¡µæÂù ÇØÅ·µÈ ÆÄ¶ó¹ÌÅ͸¦ ÁÙ ¼ö ÀÖ¾ú´Ù.ÀÌ ¹æ¹ýÀº "°¡»óÀÇ" syscall tableÀ» ¸¸µé°ÍÀ̰í, °á±¹, ½ÇÁ¦ syscall tableÀ» °Çµé Çʿ䰡 ¾ø´Ù. ±×·¡¼­, Áö±Ý ¿ì¸®´Â ¾î¶»°Ô ¸Þ¸ð¸® ÁÖ¼Ò¿¡ ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÏ´ÂÁö, ¾î¶»°Ô ±× ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¸¦ °¡´ÉÇÏ°Ô ÇÏ´ÂÁö¸¦ ¹è¿ü´Ù; ¿ì¸®´Â ¶ÇÇÑ INT 80 Çڵ鷯, syscall table Çڵ鷯, syscall table ÀÚü¸¦ º¯Á¶ÇÏÁö ¾Ê°í ÀϹÝÀûÀÎ ½ÇÇà È帧À» ÇÏÀÌÁ¦Å·ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¹è¿ü´Ù. ¸Â´Ù, ¸¶¹ýÀÇ bit¶ó°í, »ç¶û½º·± ±â¼úÀ̶ó°í ¸»ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª, ¿©ÀüÈ÷ ¿ì¸®´Â INT 1 Çڵ鷯¸¦ ¼öÁ¤Çϰųª, Àû¾îµµ do_debug() ÇÔ¼ö¸¦ ÆÐÄ¡ÇÑ´Ù, ±×·¡¼­ Àº´ÐÀº ¾Æ´Ï´Ù. °è¼Ó Àо½Ã¶ó... ---[ ´«°¡¸®°³(Blindfold) Áö±Ý±îÁö, ½Ã½ºÅÛÀÇ Á¦¾î¸¦ °¡Áö°í, Ä¿³ÎÀÇ Á÷Á¢ÀûÀÎ º¯Á¶¸¦ ¾Æ¹«µµ ŽÁö¸øÇÏ´Â ¸¹Àº ¾Æ¸§´Ù¿î °ÍµéÀ» ¹è¿ü´Ù. ¿ì¸®´Â GD/BD ºñÆ®µé¿¡ ´ëÇÑ °í¸¶¿òÀ¸·Î °¡µæ ä¿ü°í, ´©±º°¡ µð¹ö±ë ·¹Áö½ºÅ͸¦ °è¼Ó ÁÖ¸ñÇÑ´Ù¸é, ¿ì¸®´Â °£´ÜÈ÷ ±×µéÀÇ È£±â½ÉÀ» ¹«½ÃÇÑ´Ù(regs->eip +=3). ±×·¯³ª, ´©±º°¡°¡ ¹«°á¼º(integrity)¸¦ À§ÇØ IDT¸¦ °Ë»çÇÏ±æ ¿øÇÏ¸é ¾î¿°ÍÀ̰í? µð¹ö°Å³ª À¯»çÇÑ ÅøÀÌ INT 1¿¡ ÀÖ´Â ¿ì¸®ÀÇ Çڵ鷯¿¡ À§Ä¡Çϱ⸦ ¿øÇÏ¸é ¾î¿°ÍÀΰ¡? Àؾú³ª? ¹°·Ð ´ÙÀ½°ú °°´Ù. ±×·¸Áö¸¸ ±â´Ù·Á¶ó.. DR7¿Í DR7Àº Çѹø ´õ ±¸ÇϱâÀ§ÇØ ¿Â´Ù. ¿ì¸®°¡ ÇÊ¿äÇÑ °ÍÀº ´ÙÀ½°ú °°´Ù: - INT 1¿¡¼­ ´ç½ÅÀÇ Çڵ鷯¸¦ ¼³Á¤ÇÑ´Ù - INT 80 ÁÖ¼Ò¿¡ ´ëÇØ ÁÖ½ÃÇϵµ·Ï ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÑ´Ù - ´ç½ÅÀÇ Çڵ鷯ÀÇ ÁÖ¼Ò¸¦ ÁÖ½ÃÇϵµ·Ï µÎ¹øÂ° ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¸¦ ¼³Á¤ÇÑ´Ù. ¿À, Àá±ñ! ±×°Ç °£´ÜÈ÷ µÉ ¼ö ¾ø¾î¿ä. ¸Â´Ù, ¾î·Æ´Ù! ´ÙÀ½°ú °°ÀÌ, ¿ì¸®´Â ¹Ù¶óÁö ¾Ê´Â Áֽÿ¡ ´ëÇØ »ç½Ç»ó Ä¿³Î¿¡ ÀüºÎ ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. ¿ì¸®ÀÇ ÀÌ»óÀûÀÎ Çڵ鷯¿¡¼­, ÄÚµå ¿¡¹Ä·¹ÀÌÅÍ´Â µð¹ö±× ·¹Áö½ºÅÍ¿¡ Á¢±ÙÇÏ·Á°í ½ÃµµÇÏ´Â ¸í·É¾îÀÇ Å¸ÀÔÀ» °Ë»çÇϰųª INT 80À̳ª INT 1°ú Àû´çÇÑ ÇൿÀ» ³ÖÀº ºê·¹ÀÌÅ©Æ÷ÀÎÆ®ÀÌ´Ù. ÀÌ¹Ì ±×°ÍÀÌ INT 80À» ÇÏÀÌÁ¦Å·ÇÏ´Â ÇÏ¿©¾ß Çϴ°ÍÀ» ¼³¸íÇß°í, INT 1¿¡ ´ëÇØ¼­ ¾ê±âÇØº¸ÀÚ. INT 1À̳ª do_debug() ÇÔ¼ö¿¡ µÎ¹øÂ° ºê·¹ÀÌÅ©Æ÷ÀÎÆ®¸¦ À§Ä¡ÇÔÀ¸·Î½á ´©±º°¡ ¿ì¸®°¡ ¼öÁ¤Çß´ø Ä¿³Î¸Þ¸ð¸®¿¡¼­ÀÇ À¯ÀÏÇÑ ¿µ¿ªÀ» ÀÐÀ¸·Á ½ÃµµÇÒ ¶§ Á÷°üÀûÀ¸·Î È®ÀÎÇÑ´Ù. ÃÖ¼±ÀÇ ¹æ¹ýÀº ¿ø·¡´ë·Î µ¹¾Æ°¡´Â ´ÜÀÏ ÁÖ¼Ò¸¦ ¸¸µå´Â °ÍÀÌ´Ù. ¾î¶² ±Ø¾Ç¹«µµÇÑ ÅøÀÌ IDT¿¡ ÀÖ´Â ¿ì¸®ÀÇ Á¸À縦 °Ë»çÇÏ·Á°í ½ÃµµÇÒ¶§, ¿ì¸®´Â º¯Á¶µÇÁö ¾ÊÀº °ªÀ» ±× ±Ø¾Ç¹«µµÇÑ Åø¿¡°Ô º¸¿©ÁÖ´Â °ÍÀÌ´Ù. (whitehatÀº ±×°ÍÀÇ Çʿ伺À» »ý°¢ÇÏÁö ¾ÊÀ»°ÍÀ̶õ ÀÌÀ¯·Î ±×¿Í °°Àº ÀÏÀ» ÇÏ´Â ÅøÀº ¾ø´Ù°í »ý°¢ÇÏÁö ¾Ê´Â´Ù.) À̰ÍÀº "Àº´Ð" ¸ðµåÀÌ´Ù. ±×·¸Áö¸¸, Áö±Ý ¿ì¸®°¡ Ä¿³Î¿¡ ´ëÇÑ Á¦¾î¸¦ ÀÒ¾ú³ª? À½, ±×·¸Áö ¾Ê´Ù, ¿©ÀüÈ÷ Á¦¾î ³»¿¡ ÀÖ´Ù: ³ª³ëÃÊÈÄ¿¡ ·çƮŶÀ» À缳ġÇÒ ¼ö ÀÖ´Ù. µû¶ó¼­ ±×µéÀÌ ¿ì¸®¸¦ °üÂûÇÒ ¶§¸¶´Ù ±×µéÀº ¿ì¸®¸¦ ãÀ» ¼ö ¾ø´Ù. À̰ÍÀº ±Ø¾Ç¹«µµÇÑ Åø¿¡°Ô ÀÖ¾î ´«°¡¸®°³ÀÌ´Ù. ÀÌ ±â¹ýÀº µð¹ö°Å(ȤÀº À¯»çÇÑ Åø) °¡ INT 1 Çڵ鷯¿¡¼­ ±× ÀÚ½ÅÀÇ hookÀ» À§Ä¡½ÃŰ·Á°í ÇÒ ¶§ ¶ÇÇÑ À¯¿ëÇÏ´Ù. ±×°Í¿¡ ´ëÇØ »ý°¢Ç϶ó: ¿ì¸®°¡ ¼öÁ¤Çß´ø Ä¿³Î¸Þ¸ð¸®¿¡¼­ÀÇ À¯ÀÏÇÑ ¿µ¿ªÀ» ÀÐÀ¸·Á ÇÏ´Â ½Ãµµ¸¦ ŽÁöÇÏ°í ¸ðµç°ÍÀ» ¿ø·¡´ë·Î µÇµ¹¸°´Ù. µð¹ö°Å´Â ±×µéÀÇ hookÀ» À§Ä¡Çϰí, ±×µéÀÌ ±×µéÀÇ Á¸À縦 °Ë»çÇÏÀÚ¸¶ÀÚ ¿ì¸®´Â ±×µéÀÇ hookÀ» ÀϹÝÀûÀÎ INT 1·Î¼­ ÇÏÀÌÁ¦Å·ÇÑ´Ù, ¿¹¸¦µé¾î, Çڵ鷯ÀÇ Á¸À縦 °Ë»çÇÏ´Â °ÍÀ¸·Î¼­ ¿ì¸®´Â ±×µé ÀÚ½ÅÀ» º¸°Ô ÇÑ´Ù. ±×°ÍÀº ¿¬¼â(chining) ÈÄÅ·°ú ºñ½ÁÇϰųª ¸ÂÀ»°Å´Ù. ³»°¡ À̰ÍÀ» ¹ß°ßÇßÀ»¶§, ³ª´Â ±ô¦ ³î¶ú°í Á¤¸»·Î À̰ÍÀÌ ÀÛµ¿µÇ´Â °ÍÀ» ½Ç°¨Çß À»¶§ ³ª´Â °æ¾ÇÇß¾ú´Ù. À̰ÍÀº ±Ã±ØÀûÀÎ Àº´ÐÀ̸ç, ÇØÄ¿µéÀÇ ¼º¹èÀÌ´Ù. ---[ ³¡³»´Â ¸». ÀÌ ±â¹ýÀº Áö±Ý±îÁö 8³â ³Ñ°Ô Ȱ¹ßÈ÷ »ç¿ëµÇ¾ú´Ù. ±â¹ý¿¡ ´ëÇÑ ¾Æ¸§´Ù¿òÀº »ç½Ç, ±âÃÊÀûÀÎ IA-32 Ư¡ÀÌ´Ù. IA-32´Â µð¹ö±× ¸ÞÄ«´ÏÁò Àüü¸¦ »èÁ¦ÇÏÁö ¾Ê°í¼­´Â ÀÌ ±â¹ýÀ» ¹æ¾îÇÒ ¼ö ¾ø´Ù. ³ª´Â ÇÁ·ºÀÇ "°úÇÐÀûÀÎ" ¹®¼­ *g*¸¦ ÅëÇØ¼­ ÀÌ ±â¹ýÀ» ¾Ë¸®±â·Î °áÁ¤ÇßÁö¸¸, ÇØ´ç ±â¹ýÀÌ ±× µ¿¾È »õ°í ÀÖ¾ú´Ù´Â °ÍÀº ³» ¼±ÅÃÀÌ ¾Æ´Ï¾ú´Ù. ³ª´Â ÀÌ ±â¹ýÀ» ´©Ãâ½ÃŲ »ç¶÷µµ È®½ÇÈ÷ ±×ÀÇ ÅøÀÌ ½ÇÁ¦·Î ¼ö¿ëÇÒ ¼ö ÀÖ´Â °Í°ú ½ÇÁ¦·Î ÇÏ´Â °ÍÀ» ¾Ë°í ÀÖ´ÂÁö Àǽɽº·¯¿ü±â ¶§¹®¿¡ ÀÚ½ÅÀÇ ½ºÅ³À» Çâ»ó½Ã۱â À§ÇØ ¹è¿ì°í ÀÖ´Â ´Ù¸¥ ÇØÄ¿µé°ú ±×¿¡°Ô µµ¿òÀ» ûÇϱâ·Î °áÁ¤Çß´Ù. ¾Õ¼­ º¸¾ÒµíÀÌ, ÀÌ°Ç ¸Å¿ì °­·ÂÇÑ ±â¹ýÀ̸ç, Ÿ°Ù ½Ã½ºÅÛ¿¡ ´ëÇÑ ¿ÏÀüÇÑ Àº´ÐÀÌ °¡´ÉÄÉ ÇÑ´Ù. ±âº»ÀûÀÎ ÇÁ·Î¼¼¼­ Ư¡ÀÌ Á¸ÀçÇÑ´Ù´Â °ÍÀº ´õÀÌ»ó ÀÌ ±â¹ýÀÌ Á¦·Î µ¥À̰¡ ¾Æ´Ò Áö¶óµµ IA-32¿¡¼­ ÀÛµ¿ÇÏ´Â "¾î¶²" ¿î¿µÃ¼Á¦¿¡¼­µµ »ç¿ë µÉ ¼ö ÀÖ´Ù´Â ÀǹÌÀÌ´Ù. ;( ---[ Kudos halvar, twiz, reverser, sd and the rest of the digitalnerds