본문 바로가기
게임 보안/[서적] 봇을 이용한 게임 해킹

함수 포인터가 함수를 직접 가리키지 않는다!?

by 헛둘이 2022. 10. 2.
함수 포인터가 가진 주소가 함수 주소가 아니다
  • 오늘 nop코드 덮어쓰기 실습 도중 알게 된 사실인데 함수 포인터에 함수 주소가 바로 담기는게 아님
  • 함수의 주소는 별도 메모리에 존재하고 그 함수의 시작점으로 jmp하도록 offset이 있는 배열이 있음
  • 함수 포인터 외에도 함수의 주소에 접근하는 연산들은 (함수포인터를 DWORD로 바꿔서 담는다던가)
  • 모두 이 offset 배열의 특정 인덱스를 가리키도록 되어 있고,
  • 함수 포인터로 함수를 호출하면 이 인덱스로 점프 -> 인덱스에서 다시 함수로 점프

  • drawCreatureHealthBarExample이 함수의 이름이고 조사식에서 함수의 실제 주소를 의미함
  • 그리고 함수를 가리키는 함수포인터 mem이 있는데 함수랑 주소가 다름
  • 함            수 : 0x00b770f0
  • 함수 포인터 : 0x00b713f7
  • 함수 포인터가 가리키는 주소로 가보자

빨간색 네모친 부분이 함수 포인터가 가리키는 곳

  • 함수 포인터는 e9 f4 5c 00 00 이라는 뭔지 모를 5바이트를 가리키고 있다.
  • 그래서 저게 뭔지 알아보니..

https://defuse.ca/online-x86-assembler.htm#disassembly2

  • 현재 주소에서 offset하여 점프하는 기계어 코드였다.

  • 현재 주소 + offset을 더해보니 실제 함수 주소가 나온다...!!

댓글