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