강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của blood731
blood731

câu hỏi đã được viết

Móc API Windows sẽ thay đổi cuộc sống của bạn nếu bạn hiểu nó

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

Đã giải quyết

Viết

·

58

0

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

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

리버싱시스템-해킹hookingwindows-api

Câu trả lời 2

1

nullnull8537님의 프로필 이미지
nullnull8537
Người chia sẻ kiến thức

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

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

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

0

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

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

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

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

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

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

Hình ảnh hồ sơ của blood731
blood731

câu hỏi đã được viết

Đặt câu hỏi