확장자가 FILE인 파일
윈도우에서 파일형식 : 파일인 파일이 있다.
이거는 리눅스 실행파일인 ELF일 확률이 높으니, 리눅스에서 열어보자.
역시나마 32비트 ELF 파일이었다.
FILE에 대해서 조금 더 자세하게 알아 보고 싶으면 요 글을 참고해보자
https://juntheworld.tistory.com/75
아무튼 ELF파일이 뭔지 알았고, 소스파일은 제공되지 않으니
IDA를 이용해서 열어보았다.
15라인에 system함수가 있고 12라인의 if문 조건을 만족하면 14-16라인을 실행시킬 수 있었다.
여기서 v5는 main함수 안에 있는 지역변수이고 7번라이넹서 s에 입력을 받고,
버퍼크기는 40인데 입력받는 크기는 45여서 딱 깔끔하게 v5까지 덮을 수 있겠다.
여기서 아이다에 속았다. (내가 몰랐다.)
char s[40]이 v5보다 메모리에서 더 낮은 주소에 있다.
// [esp+4h] [ebp-34h]
// [esp+2Ch] [ebp-Ch]
부분에서 s[40] 위치가 v5보다 메모리에서 낮은 주소에 있는 걸 알 수 있지만
요 부분들이 메모리에서 시작주소 위치를 알려주는지 몰랐다 나는.
그래서 s가 v5보다 더 높은 주소 (먼저 스택에 push)에 있는 줄 알았다. (IDA는 hex-ray는 pseudo code일뿐)
(꿀팁 : 아이다 정수 HEX <-> DEX 변환 명령어는 h이다.)
https://juntheworld.tistory.com/71?category=985086