inflearn logo
강의

Course

Instructor

Windows API hooks that will change your life if you understand them

네이키드 함수와 트램폴린 관련해서 궁금한 점이 있습니다.

Resolved

68

blood731

6 asked

0

1.훅함수를 꼭 네이키드로 설정해야 하는지 궁금합니다. 그냥 프롤로그 에필로그 포함되게 함수를 작성해도 되는 것 아닌지요?

2.검색해보니 훅함수에서 원본함수 사용하는 경우 멀티스레드환경시 원자적 락과 기능저하를 예방하기 위해서 트램폴린 기법을 사용한다고 되어 있는데 강의에 명시된 원본함수의 프롤로그를 다시 임시로 원복하는 방법과는 다르게 훅함수 내에서 원본함수를 다시 호출하여 그 원문을 실행시키고 종료시 스택프레임의 리턴주소정보를 이용해 훅함수로 되돌아가는? 방법이라고 이해했습니다. 이것이 맞는 것인지... 여쭤봅니다.

리버싱 시스템-해킹 hooking windows-api

Answer 2

1

nullnull8537

우선 AI 답변을 참고하시기 바랍니다. 그리고 제 생각을 몇 가지 말씀드리자면...

  1. 그렇게 하면 스택 프레임에 변화가 생깁니다. Naked 함수를 이용하게 되면 기존 코드의 스택프레임을 그대로 이용할 수 있기 때문에 구조가 간결해지고 함수 호출에 의한 오버헤드가 발생하지 않습니다. 원한다면 Naked가 아닌 일반 함수를 이용해도 되겠으나 권장되지 않으며 구조가 훨씬 복잡해집니다. 물론 성능도 떨어지고요.

  2. 강의에서 설명한 방법 중 생각하시는 방식도 있고 Naked 함수를 이용하는 경우 기존 코드를 수정해 점프한 다음 추가 코드를 실행한 후 본래 함수 코드가 실행되도록 처리하고 있습니다. 그러니 훅 함수로 돌아가는 것은 아니겠습니다. 참고하시기 바랍니다. 😄

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. blood731님.

질문에 대해 답변드리겠습니다.

  1. 네이키드 함수 사용 여부에 대해 부터 - 네이키드 함수를 사용하는 이유는 프로로그와 에필로그를 수동으로 관리하여 더욱 정밀한 제어가 가능하도록 하기 위함입니다. 이는 훅을 구현할 때 프로로그와 에필로그가 자동으로 발생하는 오버헤드를 제거하고, 특정한 작업을 수행할 수 있도록 돕기 때문입니다. 물론 프롤로그와 에필로그를 포함하여 작성할 수도 있지만, 그렇게 되면 흠 없이 함수의 진입 및 퇴출 부분을 커스터마이징하기 어려울 수 있습니다. 각자의 방식이 있겠지만, 일반적으로 네이키드 함수는 더 세밀한 제어를 위해 사용됩니다.

  2. 트램폴린 기법의 이해 - 트램폴린 기법은 훅 함수를 인터셉트하고 원본 함수를 호출하여 원래의 흐름을 유지하는 방식입니다. 이는 특히 멀티스레드 환경에서 혼란을 방지하며, 원본 함수를 안전히 호출할 수 있는 방법입니다. 훅 함수 내에서 원본 함수를 호출하고, 완료되면 훅 함수로 돌아가는 방법은 맞습니다. 이 기법은 스택 프레임의 리턴 주소를 이용하여 흐름을 원래 함수로 돌리고, 다시 훅 함수를 통해 트램폴린 방식으로 원본 함수를 실행하게 됩니다. 이렇게 하면 원본 함수의 기능을 유지하면서도, 필요한 작업만을 위해 흐름을 수정할 수 있습니다.

관련된 다른 질문들을 통해 보다 깊이 있는 이해를 원하신다면, 아래의 링크들이 도움이 될 수 있습니다. 이 질문들은 훅 함수와 관련된 다양한 사례와 설명이 포함되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

rop64 뭐가 잘못 됐을까요..?

0

60

2

rop64 질문입니다

0

41

2

bof3 문제 관련 질문

0

47

2

문제집은 없나요 수업을 어떻게 들어야 할지 모르겠어요

0

106

2

bof2 문제 페이로드 관련 질문

0

53

1

bof1 마지막 파이썬 실행

0

45

2

bof1 마지막에 질문 있아요

0

58

3

bof로 변수 조작

0

47

3

체크의 위치

0

41

2

패딩과 체크

0

41

1

스택의 구조에 대한 질문 입니다.

0

39

2

동적배열 Vector의 push_back 함수에서 조건문 질문

0

75

1

Rev-basic-2 문제 파일

0

56

3

강의 속 버블 파일은 어디서 받을 수 있나요?

0

54

1

디스코드 참가 관련

0

50

2

unInjection 관련 질문 입니다.

0

55

2

8강과 9강에서 jmp해야하는 main의 상대 주소가 달라요.

0

85

2

Visual Studio release x86 디버깅 브레이크

0

180

3

32bit inline hook (release/ debug x86) 질문

0

188

2

IAT Hook 기술 개요 에서 질문이있습니다.

0

161

2

"수업에 사용된 예제 (x86)" 강의 재생 문제

0

174

2

강의자료가 안 올라온 거 같은데 확인 부탁드립니다.

0

201

1

7강 함수 포인터 배열 강의가 강의 준비중이라고 떠요.

0

214

3

강의 소리가 안들려요!

0

244

2