argv[1]의 41자를 복사해서 buffer에 넣는다.
이건 39자 A
이건 40자 A
이건 41자 A
sfp가 바뀌게 되는다.
마지막에 lev ret에서 무슨 일이 이루어지나??
lev = mov ebp esp
pop ebp
ret = pop eip
esp에 바뀐 ebp가 들어가고,
pop이 이루어지니 esp+4 byte가 된 다음,
그 부분이 eip에 들어 가게 된다!!
프로그램 실행의 흐름을 바꿀 수 있게 된 것이다.
0xbffffd74에 A가 들어가기 시작했으니,,
0xbffffd70을 새로운 ebp에 넣으면,,,
eip에 0xbffffd74가 들어가 쉘코드가 실행 되는것!!!
계속 바뀌는 빡치는 현상이 발생했지만,,
brute forcing을 하니 뚫렸다!
기분 짱 좋다!
하핫,,,내 풀이는 이상한 풀이였다.
ebp+4byte에 있는 곳의 주소가 eip에 들어가는 것이다.
그러니까 내가 한 것은, ebp+4byte가 아주 뒤에 있었고, 거기에서 이동한 곳이 뒤쪽에 있는 쉘코드가 된 것이다. 아주 우연히
argv[2]가 들어간 부분 대충: 0xbffff898
argv[2]의 주소를 계속 넣어줘서 거기에 걸리게끔
NONO
0xbfffffdc부분에 nop+쉘코드 들어가 있으므로 뚫리는 거임!!!!!
*