졸리다.. 생각보다 퍼듀 프로젝트가 빡세다... 오늘 팀플 오프안했으면 이거 할 시간도 없었을 것 같다.
일단은 함수들이 여러개 보이는데, main부터 디스어셈해보았다!
IDA 32bit with hexray로 열고 F5를 누르면, C언어로 비슷하게 디스어셈블 해준다. 대충 봐도 스택에 4바이트 쌓이고, 함수 주소 4바이트 쌓이는데, 133바이트나 stdin으로 받아오므로 BOF가 가능하다. v5함수의 주소를 sup이 아닌 쉘코드로 할 수 있을 것 같다. (근데, 사실 이전 이미지에서 볼 수 있듯이 sup 함수위에 shell함수라는 것이 존재한다)
그치만 peda로 분석해보았다.
call eax 직전에 브레이크를 걸고 실행해보았다. fgets로 ebp-0x8c를 인자로 받아오고, call eax부분의 eax는 epb-0c를 받아오므로, 0x8c-0xc=128만큼 아무거나 채워줄 수 있을 것 같다. (아이다에서 분석했던 것과 비슷하다.)
별로 볼 건 없었다.
뭐 대충 패턴도 생성해보았다. 0x8c=140개로
AkAA가 eax에 들어가 있으므로,
검색해보았다. 예상대로 offset이 128이 나온다.
다시 IDA로 돌아가서 shell함수를 디스어셈블 해보았는데, 그냥 이거 갖다가 쓰면 될 것 같았다.
shell의 주소는 0x0804849b였고, sup 함수의 주소는 0x080484b4였다. 사실 sup은 그냥 구해봤다...