heap overflow를 이용해
winner()를 실행시키면 pass
그림처럼 malloc으로 128바이트를 동적할당 할 시
앞에 type과 size가 8바이트를 차지하고
밑의 data가 동적할당한 크기만큼 생성이되며
더 밑에 footer가 붙을 수도 있음
일단 첫 malloc과 2번째 malloc으로
할당된 메모리의 주소
d와 f가 가진 주소를 찾음
이 주소는 위의 heap의 구조 그림에서 type의 시작번지가 아닌
data의 시작번지를 반환해서 eax에 넘겨줌
main+21, 37에 bp를 걸어주고
AAAA를 인자로 주고 run
d의 data주소는0x804a1a0
f의 data시작 주소는 0x804a1f0
strcpy가 동작한 후인
main+107부분에 bp를 걸고
d의 data주소-0x8 (type과 size부분도 출력하기 위해)를 보면
빨간동그라미 2개의 앞에 있는 51과 11은 size
41414141은 입력한 AAAA
0x08048478은 nowinner의 주소
winner의 주소를 찾아서
heap overflow를 발생시켜
nowinner의 주소가 있는 곳을
winner의 주소로 덮으면된다
41414141부터 nowinner의 주소가 있는 f의 data까지의
offset은 80바이트