inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이해하면 인생이 바뀌는 Windows API hook

캐시 플러싱

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

해결된 질문

85

woohyun

작성한 질문수 1

0

안녕하세요 강사님.

8강과 9강에서는 testFunc을 targetFunc의 도입부에 넣어 실행을 시키고

main으로 다시 돌아오도록 코드가 되어있는데요

main의 시작점과 리턴을 희망하는 위치를 계산해보면 강의 자료보다 큰 값이 나옵니다.

질문1. x86으로 최적화를 하지 않고 똑같이 실행을 했는데 왜 다른지 궁금합니다.

제 코드를 디스어셈블리에서 보면 강의에서 보이는것보다 많은 기계어들이 보입니다.

질문2. "jmp main + 86h" 에서 86대신 D0 이런식으로 계산 결과가 나왔을 때 빌드 에러가 발생하고 있습니다. 0xD0 이런식으로 넣으면 빌드 에러는 나지 않지만 다른곳으로 점프를 하는것 같고요. 어떻게 해결을 해야할까요?

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

답변 2

0

널널한 개발자

8, 9강의 내용은 함수 프롤로그/에필로그와 Naked 함수에 관한 것으로 질문과 다른 것입니다. 해서 강의 내용 중 질문에 가까운 내용은 12강 힙 메모리에 저장된 코드 실행하기로 추정학고 답변을 드립니다.

  1. 컴파일러 설정이 같다하더라도 운영체제 환경 및 컴파일러 버전에 따라 구체적인 값은 달라질 수 있습니다. 그리고 더 많은 기계어가 보인다는 것은 어쩌면 빌드 모드가 디버그 모드라 그럴 수 있습니다.

  2. 인라인 어셈블리 코드에서 상수값을 수정하더라도 빌드오류가 발생하지는 않습니다. 정확한 답변을 드리려면 구체적인 코드 및 에러 메시지를 봐야 답변을 드릴 수 있겠습니다.

참고하시기 바랍니다. 😄

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
woohyun님 질문에 대한 답변 드리겠습니다.

질문1에 대해서는 컴파일러의 최적화 옵션이나 환경에 따라 생성되는 기계 코드가 달라질 수 있습니다. x86 환경에서 최적화를 하지 않더라도 컴파일러의 버전이나 설정에 따라 변동이 있을 수 있으며, 이러한 차이는 디스어셈블리에서 기계어의 차이로 나타날 수 있습니다. 컴파일러의 최적화 옵션을 확인하고 강의와 동일한 옵션을 사용하였는지 검토해보는 것이 좋습니다.

질문2에 대해서는 “jmp” 명령어를 사용할 때 상대 주소를 계산할 필요가 있습니다. 이때, jmp 명령어에서 -128부터 +127 사이의 바이트는 간편하게 처리되지만, 그 범위를 벗어나는 경우에는 절대 주소나 롱 점프를 사용해야 합니다. “jmp main + 0x86”과 같은 형식에서 계산 결과가 범위를 벗어난 경우, jmp/branch 명령어가 올바르게 작동하지 않을 수 있습니다. 따라서 계산된 상대 주소의 크기를 검토하고, 너무 큰 값이 계산된 경우에는 메모리 객체나 함수의 위치를 확인해야 합니다.

추가적으로, 해당 부분에 자세한 내용이 강의 내용에 포함되어 있으면 그 내용을 참고해 주시길 바랍니다. 더불어, GraalVM의 Native Image Compatibility Guide도 참고해 보시는 것을 추천드립니다.

감사합니다.

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

0

56

2

rop64 질문입니다

0

38

2

bof3 문제 관련 질문

0

45

2

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

0

104

2

bof2 문제 페이로드 관련 질문

0

52

1

bof1 마지막 파이썬 실행

0

42

2

bof1 마지막에 질문 있아요

0

53

3

bof로 변수 조작

0

45

3

체크의 위치

0

39

2

패딩과 체크

0

37

1

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

0

34

2

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

0

73

1

Rev-basic-2 문제 파일

0

52

3

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

0

51

1

디스코드 참가 관련

0

48

2

unInjection 관련 질문 입니다.

0

55

2

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

0

68

2

Visual Studio release x86 디버깅 브레이크

0

178

3

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

0

188

2

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

0

161

2

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

0

173

2

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

0

200

1

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

0

213

3

강의 소리가 안들려요!

0

244

2