|
pro 님이 쓰신 글 :
: 안녕하세요
: 추석연휴 잘보내고 게신가요 ^^
: 저는 연휴에도 프로그래밍과 함께 ^^v
:
: 옛날에 Win 95 98 에서 시스템 api 후킹하면 모든 프로세스들이
: 영향을 받았건거로 분명하게 기억하고 있거든요. 글로벌 후킹이죠
:
: 그런데 Win 95 98 에서는 분명 이랬는데 NT에서는 kernel32 api
: 후킹해도 왜 타겟 프로세스만 영향을 받는건지 모르겠네요
:
: 윈도우 업데이트 할때 보면 핫패치 되고나면 전체 시스템이
: 글로벌 하게 패치에 영향을 받는데 어떤 식으로 이렇게 되는건지 궁금합니다
: 또 윈도우 업데이트 하면 커널도 핫패치 될수 있을텐데 궁금하네요
답글이 안달려서 몇자 적어 봅니다.
윈도우즈 9x에서 4GB의 어드레스 공간을 zero 베이스를 기준으로 볼 때...
( 0, 1, 2, 3 GB ) 토탈 4GB...
KERNEL32.DLL, USER32.DLL, GDI32.DLL 과 같은 시스템 DLL 파일들은...
Memory Mapped File 들을 위한 Reserved 주소공간을 충분히 예약 해두기 위해서
2G ~ 3GB 거의 끝단에.. 배치되도록 (KERNEL32.DLL 이 가장 후미에 위치, 나머지 시스템 DLL들은
앞 주소 공간으로 이어져서 배치) OS 구조를 설계 했었고...
2 ~ 3GB (0을 기준으로) 영역은 프로세스들에 의해서 공유되는 Shared Address 영역으로 사용되었기 때문에...
결과적으로 시스템 DLL 파일들이 모든 프로세스들에 의해서 같은 선형주소 공간에 매핑되게 되었고...
Shared 영역이다 보니 피지칼로 매핑되는 물리적인 메모리 주소 또한 같게 매핑되다 보니까...
시스템 DLL 이 매핑되어 있는 어드레스 공간을 다이렉트로 패치를 해버리면 모든 프로세스들이 영향을
받을 수 밖에 없는 그런 구조였습니다.
구조가 이렇다 보니 프로그램의 어떤 버그?로 인해 시스템 DLL 들이 매핑되어있는 영역이 의도치 않게 변경되면...
전체적으로 모든 프로세스들이 영향을 받아서 시스템이 쉽게 죽어 버리는 뭐 그런 단점도 있었고요.
이젠 윈도우즈 9x 가 사용될 일도 없고 ... 그냥 그랬었나 보다 생각하고 잊으세요.
윈도우즈 XP도 2년 후면... 서비스팩 업데이트, 공식적인 기술지원이 모두 종료되는데 (2014년 4월, XP 공식지원 완전히 종료됨)
9x가 무슨 의미가 있겠습니까.
핫패치는 모든 프로세스 (서로 간에 상호 의존적인 복잡한 관계를 갖기도 하는 서비스들 포함)를 리부팅 없이
그것도 전체 시스템을 안전하게 패치를 해야 하므로 OS 자체의 도움을 받을 수 밖에 없는 데요...
유저모드에서는 'LdrHotPatchRoutine'이라는 API를 이용해서(NTDLL.DLL)...
커널모드에서는 'MmHotPatchRoutine'이라는 API를 이용해서(NTOSKRNL) MS사 애들이 핫패치를 하고 있습니다.
Undocumented API 이기 때문에 여기에 대해서 자세하게 알려져 있는 건 없고...리버스 엔지니어링을 통해서 ...
대략 저런 내부 API를 이용해서 핫패치를 하고 있구나 정도.. 밝혀진 게 전부 입니다. 제가 현재 알고있기론 그렇습니다.
...
|