int main(int argc, char *argv[])
{
char buffer[20] = {0, }; // 0À¸·Î ÃʱâÈ
int *pointer_to_ret = (int *)(buffer+24); // retÀ» Ãâ·ÂÇϱâ À§ÇÑ Æ÷ÀÎÅÍ º¯¼ö
if(argc < 2)
{
printf("argument error\n");
exit(-1);
}
// dumpcode·Î ¸Þ¸ð¸® ´ýÇÁ
dumpcode(buffer, 28);
printf("[*] BEFORE : the return address is 0x%08x\n\n", *pointer_to_ret);
// buffer overflow!!
strcpy(buffer, argv[1]);
// dumpcode·Î ¸Þ¸ð¸® ´ýÇÁ
dumpcode(buffer, 28);
printf("[*] AFTER : the return address is 0x%08x\n\n", *pointer_to_ret);
}
¿©±â¼ ¸®ÅϾîµå·¹½º ¼öÁ¤Àä,
µµÀúÈ÷ ÀÌÇØ°¡¾ÈµÇ´Â°Ô....
¸®ÅϾîµå·¹½º°¡ ¸Ö¸»Çϴ°ǰ¡¿ä??
¿©±â¼ bufferÀ̶ó´Â º¯¼öÀºµ¥ ¿Ö ¸®ÅϾîµå·¹½º°¡ÇÊ¿äÇÑÁö¿ä |