강의

멘토링

커뮤니티

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

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

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ó

32bit Inline hook

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

Đã giải quyết

Viết

·

177

·

Đã chỉnh sửa

0

안녕하세요 강사님

11.inlineHook 예제를 debug 빌드로 실행하면

pfOpenProcess에서

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

뭔가 강의중에 언급하신 stack memory 고장같은데 이유를 아시나요?

 

function prologue 디스어셈블이 조금차이가있는데 어차피 5바이트만큼 백업해두니 상관없는것은 맞나요?

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

Câu trả lời 2

1

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

디버그 모드로 프로그램을 빌드할 경우 프로그램 구조가 달라지며 디버깅을 위한 각종 정보가 포함됩니다. 이 과정에서 각종 검사 코드가 함께 작동하며 오류로 볼 수 있는 것들에 대해 경고합니다. 즉, Hook 시도 자체를 메모리 사용 오류로 판단하게 되는 것입니다.

참고하시기 바랍니다. 😄

0

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

질문 주신 내용을 바탕으로, inline hook을 사용하면서 발생할 수 있는 문제와 이를 해결하는 방법에 대해 설명드리겠습니다.

해당 에러 메시지는 함수 호출 간 호출 규약(calling convention)의 불일치로 인해 발생하는 것입니다. 일반적으로 함수 포인터의 호출 규약과 실제 함수의 호출 규약이 일치하지 않을 때 이러한 문제가 발생할 수 있습니다.

호출 규약(calling convention)이란?
호출 규약은 함수 호출 시 인수 전달, 반환 값, 스택 정리 등을 어떻게 다룰지를 정의하는 규칙입니다. 대표적인 호출 규약에는 cdecl, stdcall, fastcall 등이 있습니다.

문제 해결 방법:
1. 함수 선언 확인: pfOpenProcess와 연결된 실제 함수의 선언을 확인하고, 호출 규약이 일치하는지 확인합니다. 선언부가 명확히 일치하지 않으면, 함수 포인터 선언에 올바른 호출 규약을 지정해야 합니다.

  1. 컴파일러 설정 확인: 컴파일러 옵션에서 호출 규약을 설정할 수도 있습니다. 반드시 해당 프로젝트의 설정이 각 함수와 맞는지 확인해야 합니다.

  2. 디버깅: 함수 호출 전후의 스택 상태를 디버깅하여, 스택이 깨지는 부분을 확인합니다. 이를 통해 호출 규약 불일치뿐 아니라 다른 원인도 찾아볼 수 있습니다.

다음의 질문들이 도현님이 이해하는 데 도움이 될 수 있습니다:
- Calling Conventions in 32-bit Applications
- 호출 규약이 다른 함수 호출 시 발생하는 문제

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

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

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

Đặt câu hỏi