이 글은 윈도우 시스템 해킹가이드 버그헌팅과 익스플로잇을 보고 정리한 글입니다.
자 이전에 dll 시작주소를 구했으니 이번에는 offset을 구해보도록 할게요. 자 offset을 구할려면 pe헤더와 export diretory에 관해서 알아야합니다.
PE헤더에는 dll이 어떤 함수들을 Export하고 있는지에 대한 정보가 저장되어 있습니다. 이 정보는 PE헤더 IMAGE_OPTIONAL_HEADER32의 DATA Directory배열의 첫번째 구조체인 Export Table에 저장되어 있습니다.


자 위에 EXPORT TABLE의 구조체 소스를 보면 addressoffunctions, addressofnames,addressofordinals 가 보이시죠? 쉽게 말해 위에서 부터 함수 주소배열,함수이름배열,함수 서수 배열입니다. 주소와 이름은 이해가 되는데 서수는 머냐고요? 이름과 주소가 있는 인덱스가 반드시 일치 하지가 않아요. 그래서 서수 배열에 실제 인덱스가 기록되있기에 서수를 이용해 인덱스를 찾아서 주소로 넘어가는 과정입니다.
요약하자면
1.함수 이름 배열에서 원하는 함수를 찾는다.
2.함수 서수 배열에서 찾은 인덱스에 있는 값을 확인한다.
3.함수 주소배열에 찾은 인덱스에 들어있는 주소값이 내가 찾는 주소 값이다.
자 여기서 주의하셔야 할 것은 여기에 들어 있는 값이 실제 주소 값이 아니고 상대주소 값이에요. 따라서 이 값에다가 전에 찾은 dll base 주소 값을 더해주셔야 실제 이 함수가 들어있는 값이 된답니다.
자 이제 dll base 주소값을 찾는 법과 offset을 찾는 방법 모두 아시겠죠? 다음에는 이것들을 이용해서 실제 universal shellcode를 만드는 방법을 실습을 통해 알아보겠습니다.
'System' 카테고리의 다른 글
Universal Shellcode(4)-실습 (0) | 2020.07.20 |
---|---|
Universal Shellcode(3) -실습 (0) | 2020.07.18 |
Universal Shellcode (1) (dll 시작주소 알기) (0) | 2020.07.18 |
쉘코드-널바이트 제거 (0) | 2020.07.18 |
쉘코드 작성(cmd호출, Poc형식) (0) | 2020.07.17 |