X2r0Ar
리버싱 TIP - Hot Patching 본문
리버싱 TIP - Hot Patching
리버싱을 하다보면 함수의 시작부분은
push ebp
mov ebp, esp
...
이런식으로 시작한다고 들었습니다.
하지만 특정 dll에서 제공되는 api 호출을 따라가보면 아래 사진과 같이 볼 수 있습니다.
<사진1 - MessageBoxW API>
위 사진은 MessageBoxW 호출 부분을 따라 들어간 모습입니다.
mov edi, edi부터 시작되며 그 위에는 nop으로 5바이트가 지정되어있습니다.
이 부분을 핫 패칭이라고 불립니다.
핫 패칭이란?
MS에서 제공하는 기술로 필요한 코드를 별다른 재부팅 없이 바로 메모리에 적용할수 있는 기술입니다.
핫 패칭 적용법
<사진2 - 핫 패칭 적용>
위 사진을 보시면 mov edi, edi 부분에 jmp short 로 1바이트 점프를 하고 nop가 있던 부분에 4바이트 점프를 한것을 볼 수 있습니다.
mov edi, edi 부분을 nop의 시작 지점으로 jmp 시키고, nop부분을 실제 jmp할 주소로 jmp시키면
32비트 메모리 주소의 어디든지 jmp가 가능합니다.
※ 모든 부분이 저렇게 시작되는것은 아니라고 합니다.
ps. Hooking을 배울때 도움이 될 내용입니다.
Comments