K쉴드 면접후기ㅆ고 다
다행이 리버싱에 대한 많은 질문을 받았지만 많은 부분 제대로 답변을 드리지 못한 부분이 많았다.
처음 질문은 EP에 대해서 물어보신것 같다. 그런데 컴퓨터로 하다보니 긴장해서 제대로 못알아 들어서 답변을 드리지 못했다.. EP를 OTP라고 들은 내잘못이 크다.
정답은 OEP였다. OEP에 대한 내용은 오늘 공부하는 부분에서 나오는 내용이다.ㅠㅠ
EP: Entery point : 는 파일이 메모리에 로드되어 파일 작성자가 짜 놓은 코드의 처음부분을 말한다.
EP에 대한 내용은 PE파일 헤더에도 영향을 미치는 부분이다. NT헤더의 Optional 헤더의 Address od Entry Point 값(RVA)값으로 확인이 가능하다.
Image File Header : NT 헤더의 IMGE_NT_HEADERS의 멤버중 FileHeader의 구조체 IMAGE_FILE_HEADER로 파일의 개략적인 속성을 나타낸다.
특히 IMAGE_FILE_HEADER에서 4가지 멤버를 알아야한다.
1: Machine: 2 byte : CPU의 고유넘버
2: NumberOfSections: 2 byte: 섹션의 개수 (이 값은 반드시 0보다 커야한다.)
3: SizeOfOptionalHeader: 2 byte: IMAGE_FILE_HEADERS 구조체의 마지막멤버 IMAGE_OPTIONAL_HEADER3의 크기를 나타낸다. 만약 x64의 환경의 경우 크기가 다르기 때문에 IMAGE_OPTIONAL_HEADER64를 사용합니다.
4: Characteristics: 2byte: 파일의 속성값을 나타내는 값이다.
매번 PE파일에더에서 이헤더는 무슨 역활을 하고 어느 섹션은 어떤 역활을 하는 지 물어보신다. 내가 생각하기에 PE파일의 내용은 너무 방대하지만 기본적은 몇가지 헤더의 속성은 외우는 것 같다는 느낌을 받았다.
다음은 JMP와 CALL에 대한 질문이 었다.
이부분에서는 짬을 이용해서 답을 했고 다행이도 근처에 도달한것 같았다.
JMP는 무조건 위치로 이동하는것이고,
CALL의 경우 스택의 현재위치를 저장하고 점프를 한다. CALL위치에서 RET를 실행하면 CALL한 위치로 돌아가게 된다.
이때 CALL을 하게 되면 스택에 함수의 위치를 저장하고 RET을 만나게 되면 스택의 주소를 EIP레지스터리에 넣고 EIP레지스터 값을 이동을 하게 된다.
저번 BOB와 이번 K쉴드를 하면서 느낀점은 짬이 중요하다 인 것 같다....