여기 적혀있는 내용은 심볼이 없는 덤프에서 vtable 영역을 어떻게 하면 찾을수 있을까에 대한 개인적인 의견이기 때문에 정확한 정보가 담긴 포스팅은 아니다. 참고용으로만 확인해주길 바라며 틀린 내용에 대한 지적은 언제든 환영이다. 심볼이 있는 경우 심볼이 있는 경우 vtable 영역을 찾는 건 쉽다. 아래 포스팅에서도 기술했다시피 와 같은 방식으로 간단히 찾을 수 있기 때문이다. 가상 함수 호출 패턴 검색 하지만 심볼이 없는 경우는 얘기가 달라진다. 심볼이 없으면 `vftable' = 과 같이 표시가 되지 않기 때문에 위와 같은 방식으로 간단하게 vtable 영역을 찾을 수 없게된다. 그래서 처음 생각한 방식이 가상 함수 호출 패턴과 비슷한 코드(레지스터에 넣은 후 ..
C++ 리버싱은 C 리버싱과는 많이 다르기 때문에 항상 난항을 겪는다. C와는 다른 대표적인 C++ 특징 중 하나가 가상 함수 테이블인 vtable이 있는데 이 vtable 중 하나의 함수를 후킹하는 경우도 있기 때문에 덤프분석을 하거나 할때는 vtable도 잘 살펴봐야 한다. 따라서 가상함수 호출 시 vtable을 어떻게 참조하는지 어떤 특징이 있는지 등과 덤프에서 vtable 영역을 찾으려면 어떻게 해야하는지를 여기에 정리해보려 한다. 가상 함수 테이블 (vtable) 이란 가상 함수 테이블(vtable)이란 C++에서 virtual 메소드를 사용해 함수를 만들 때 생기는 테이블로 각 클래스 별 가상함수만 빼내어 그 주소를 가르키는 함수포인터를 저장해놓은 일종의 함수 포인터 배열이라고 할 수 있다. ..