CRC üũ¸¦ ¿ìȸÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ Áú¹®ÇÏ´Â ºÐµéÀÌ Á¾Á¾ ÀÖ´õ±º¿ä.
-_-; ³Ê¹« ¾ûÅ͸®¶ó¼­ Àú¿¡°Ô ÇÙÅäÆÄ½ºÄ® űÀ» ³¯¸±ºÐµéÀÌ ¸¹À»Áöµµ ¸ð¸£°ÚÁö¸¸,
°£´ÜÈ÷ Çѹø ¸»Çغ¸µµ·Ï ÇϰڽÀ´Ï´Ù.

Àç°¡ óÀ½¿¡ CRC üũ¸¦ ¿ìȸÇÏ´Â °Í¿¡ ´ëÇØ¼­ »ý°¢À» ÇØº¼ ¶§,
ù¹ø¤Š »ý°¢ÇÑ °ÍÀº Shadow Walker Protect ¿´½À´Ï´Ù.
-_-;; ÇØ´ç ÇÁ·ÎÁ§Æ®°¡ ¹«¾ùÀÎÁö¿¡ ´ëÇÑ ¼³¸íÀº ³Ñ¾î°¡µµ·Ï ÇϰڽÀ´Ï´Ù.

±×·¯³ª Shadow Walker Project´Â ¼Ò¿äµÇ´Â ½Ã°£°ú Äڵ差¿¡ ºñÇØ
À§Ç輺ÀÌ ´Ù¼Ò Àֱ⠶§¹®¿¡ °á±¹ ¾²Áö ¾Ê¾ÒÁÒ. (Àý‹š ±ÍÂú¾Æ¼­°¡ ¾Æ´Ò²®´Ï´Ù.)

µÎ¹øÂ° »ý°¢ÇÑ °ÍÀº CRCüũ ·çƾÀ» ã¾Æ¼­ ¼öÁ¤ÇÑ´Ù ¿´´Âµ¥,
-_- À½.. ¾ó¸¶ ¾ÈµÇ¼­ ÀÎÅͳݿ¡ ³ª¿À´õ±º¿ä. (±×°É ±¸ÇöÇÏ´Ù´Ï ¼º½ÇÇÑ ³à¼®µé)

±×·¸´Ù¸é CRC üũ ·çƾÀº ¾î¶»°Ô ãÀ» ¼ö ÀÖ´Â °É±î¿ä?

ÀÌ ´ë´äÀº µÎ°¡Áö·Î ³ª´µ¾î Áý´Ï´Ù.
¿Ö³ÄÇϸé CRCüũ ·çƾÀº ÇØ´ç ÇÁ·Î±×·¥ ³»¿¡¼­ ÀÌ·ç¾îÁú ¼öµµ ÀÖ°í,
¿ÜºÎ ÇÁ·Î±×·¥¿¡ ÀÇÇØ¼­ ÀÌ·ç¾îÁú¼öµµ Àֱ⠋š¹®ÀÔ´Ï´Ù.

¸ÕÀú ³»ºÎ ÇÁ·Î±×·¥¿¡ ÀÇÇÑ CRCüũ ·çƾÀ» ã´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¸»Çغ¸ÀÚ¸é,
ÇÁ·Î±×·¥ ³»¿¡¼­ CRCüũ ·çƾÀº ´ë·« ¾î¶² ¸ð½ÀÀ» °¡Áö°í ÀÖÀ»±î¿ä? -_-?
Á¤¸» °£´ÜÇÏ°Ô »ý°¢Çغ¸ÀÚ¸é ´ÙÀ½°ú °°´Ù°í º¼ ¼ö ÀÖ°ÚÁÒ.

for(int i = EntryPoint; i <= SizeOfImage; i++)
{
      ...
  checksum += memory[i];
....
}

-_-;; Àç¹Õ´Â°Ô º¸ÀÌÁÒ?
¸ðµç ¸Þ¸ð¸®ÀÇ º¯Á¶¿©ºÎ¸¦ üũÇϱâ À§Çؼ­´Â ¸ðµç ¸Þ¸ð¸®¿¡ Á¢±ÙÇØ¼­ Àоî¿Í¾ß
ÇÕ´Ï´Ù. Áï Read°¡ ¹ß»ýÇÏÁÒ... (¿©±â¼­ °¨ÀÌ ¿ÀÁÒ)

¿ì¸®¿¡°Õ INTELÀÌ ÁֽŠÃູÀÎ.. Hardware BreakPoint¶ó´Â Ä£±¸°¡ ÀÖÁÒ.
ÀÌ Ä£±¸°¡ µµ¿ÍÁÖ¸é ¿ì¸®´Â ƯÁ¤ÇÑ ¸Þ¸ð¸® ÁÖ¼Ò¿¡ Write or Read|Write or Excute°¡
¹ß»ýÇßÀ»¶§¿Í ±× Àб⠶Ǵ Àб⾲±â ¶Ç´Â ½ÇÇàÀ» ½ÃµµÇÑ ÁÖ¼Ò°¡ ¾îµòÁö ¾Ë ¼ö ÀÖÁÒ.
-_-; Àбâ¶Ç´Â¾²±â¸¦ ½ÃµµÇÑ ¸Þ¸ð¸® ÁÖ¼Ò°¡ ¹Ù·Î CRCüũ·çƾÀÌ ÀÖ´Â °÷À̰ÚÁÒ..?
(Haredware BreakPoint¿¡ ´ëÇØ¼± ´ÙÀ½±Û¿¡¼­ ¸»Çϰí Àֳ׿ä : ¸µÅ©)

üũ·çƾÀ» ã¾ÒÀ¸¸é ´ÙÀ½¿¡ ÇÒÀÏÀº °Ë»ç¿¡ °É¸®Áö ¾Êµµ·Ï ÇÏ´Â ÀÏÀÔ´Ï´Ù.
À̰͵µ ¿ª½Ã ¾ÆÁÖ °£´ÜÇѵ¥¿ä.
-_-; À½.. À§¿¡¼­ °£´ÜÈ÷ ¼³¸íÀ» À§ÇØ »ç¿ëÇß´ø ÄÚµå´Â ´ÙÀ½°ú °°À̵µ Ç¥½ÃµË´Ï´Ù.

for(int i = EntryPoint; i <= SizeOfImage; i++)
{
      ...
  checksum += *(BaseAddress + i);
....
}

°á±¹ memory¶ó´Â BaseAddress¸¦ ±â¹ÝÀ¸·Î i°ª¸¸Å­ ¶³¾îÁø ¿ÀÇÁ¼Â¿¡ ÀÖ´Â °ªÀ»
ÇѰ³¾¿ È®ÀÎÇÏ´Â °ÅÁÒ. ÀÌ°É ±â¹ÝÀ¸·Î CRC üũ ·çƾÀ» ¿ìȸÇÒ ¼ö ÀÖ´Â °£´ÜÇÑ
¾ÆÀ̵ð¾î¸¦ »ý°¢ÇØ ³¾ ¼ö ÀÖ´Â °Ì´Ï´Ù.

CRCüũ ·çƾÀÌ ¿øÇÏ´Â Original MemoryµéÀ» ´ýÇÁÇÏ¿© µÐ ÈÄ,
ÇØ´ç ÇÁ·Î¼¼½º ³»¿¡ ´Ù½Ã ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ¿© ´ë»ó ¸Þ¸ð¸®¿¡ ´ýÇÁÇØµÐ ¸Þ¸ð¸®¸¦ º¹»çÇϸé,
±âÁ¸ÀÇ °ø°£°ú ¶È°°Àº ¸Þ¸ð¸® ±¸Á¶¸¦ °¡Áö°í ÀÖ°Ô µË´Ï´Ù.
±× ÈÄ Ã£¾Æ³½ CRCüũ ·çƾ¿¡¼­ »ç¿ëÇÏ´Â BaseAddress¸¦ ÇÒ´çÇÑ ¸Þ¸ð¸® ÁÖ¼Ò·Î
¹Ù²ãÁÖ°Ô µÇ¸é ¿ì¸®°¡ º»·¡ ³»¿ëÀ» º¯Á¶ÇÏ¿©µµ ¾ðÁ¦³ª ´ýÇÁÇØµÐ ¸Þ¸ð¸®ÀÇ ³»¿ë¸¸
°Ë»çÇÒ °ÍÀ̱⠶§¹®¿¡ °¨Áö¸¦ ¿ìȸÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.
À̸¦ °£´ÜÇÏ°Ô ±×¸²À¸·Î Ç¥½ÃÇØºÃ½À´Ï´Ù.

»ç¿ëÀÚ »ðÀÔ À̹ÌÁö


À§´Â ±âÁ¸ÀÇ ¸Þ¸ð¸® »óÅÂÀ̰í, üũ·çƾÀÇ BaseAddress¸¦ ¹Ù²Û ÈÄ´Â :


»ç¿ëÀÚ »ðÀÔ À̹ÌÁöÁ¤¸» ½±ÁÒ..? (ÀÌ·±¸» ÇÏ´Ù°¡ Á×Àº ¹Ì¼ú°¡°¡ ÇѸí ÀÖÁÒ..)


±×·¸´Ù¸é ¿ÜºÎ ÇÁ·Î±×·¥¿¡ ÀÇÇØ °Ë»çµÇ´Â ¹æ½ÄÀº ¾î¶³±î¿ä? ±×°Íµµ Á¤¸» ½¬¿îµ¥¿ä.
¿ÜºÎ ÇÁ·Î¼¼½º¿¡¼­ Ÿ ÇÁ·Î¼¼½ºÀÇ ¸Þ¸ð¸®·Î Á¢±ÙÇϱâ À§Çؼ­´Â À¯Àú·¹º§¿¡¼­´Â
ReadProcessMemory() ¶ó´Â API¸¦ »ç¿ëÇÕ´Ï´Ù.
À½.. ¾Æ¸¶µµ ÀÎÀÚ°ªÀÌ ReadProcessMemory(hProcess,BaseAddress,buffer,len,&ret);
½ÄÀ¸·Î ›§¾ú´ø°Å °°Àºµ¥¿ä..
Ä¿³Î´Ü¿¡¼­ ReadProcessMemory()¶ó´Â API´Â ZwReadVirtualMemory()¶ó´Â ÇÔ¼ö·Î
¿¬°áÀÌ µÇ°í, ZwReadVritualMemoryÇÔ¼ö¸¦ ÈÄÅ·ÇÏ´Â ´ÙÀ½°ú °°Àº Çü½ÄÀÇ Äڵ带
ÀÛ¼ºÇÔÀ¸·Î½á ¾Õ¿¡¼­ »ç¿ëÇß´ø ¹æ¹ý°ú µ¿ÀÏÇÏ°Ô µ¹ÆÄ°¡ °¡´ÉÇϰÚÁÒ.

if((BaseAddress => CRCStartAddress) && (BaseAddress <= CRCEndAddress))

{

..........

         BaseAddress = DumpedMemory;

..........

}
³»ºÎ¿¡¼­ÀÇ °Ë»ç·çƾ µ¹ÆÄ¹ýÀ» ÀÌÇØÇß´Ù¸é µÎ¹ø¤Š ¹æ¹ýÀÇ ÀÌÇØ´Â ´©¿ö¼­ È£¶±¸Ô±âº¸´Ù
½¬¿ï°Ì´Ï´Ù. -_-/

# dualpage.muz.ro [2008-01-23]