티스토리 뷰

cr0 레지스터를 이용한 Write Protection 제거



컨트롤 레지스터는 현재 수행중인 태스크의 특성과 프로세스의 동작모드를 결정 짓는 특별한 레지스터이다.
32 비트와 32 비트 호환 아키텍쳐에서 이 레지스터들은 32 비트이고, 64 비트에서는 64 비트다.
mov CRn
인스트럭션으로 이 레지스터들을 건드릴수 있고..

CR3 레지스터는 페이지 디렉토리를 찾아가기 위한 레지스터이고.. 나머지는.. RTFM!

CR0 는 CPU 의 operating mode 와 상태를 제어하는 플래그를 포함하고 있다. 오홋.. ^^
PG, CD 등...중요한 플래그들이 많지만 일단 관심대상은 아니고.. ^^

WP
Write Protect (bit 16 of CR0) — Inhibits supervisor-level procedures from writing
into user-level read-only pages when set; allows supervisor-level procedures to write
into user-level read-only pages when clear. This flag facilitates implementation of the
copy-on-write method of creating a new process (forking) used by operating systems
such as UNIX*.

Copy-On-Write 매커니즘과 관련있는 넘이었군..
결국 이 플래그를 조작하면 write protection 속성을 바꿔치기 할 수 있다는 거다.



//
// 콘트롤 레지스터 관련 (IA-32 manual vol3, ch 2.5
// CR0 (Control Register Zero) 레지스터의 WP 비트(16)는 쓰기 속성제어에 사용됨
//
#define CR0_WP_MASK 0x0FFFEFFFF

VOID ClearWriteProtect(VOID)
{
__asm
{
push eax;
mov eax, cr0;
and eax, CR0_WP_MASK; // WP 클리어
mov cr0, eax;
pop eax;
}
}

VOID SetWriteProtect(VOID)
{
__asm
{
push eax;
mov eax, cr0;
or eax, not CR0_WP_MASK; // WP 비트 세팅
mov cr0, eax;
pop eax;
}
}




더 자세한 내용은 IA-32 메뉴얼의 4.1 섹션을 참고하면 된다.
요는 페이지 레벨의 프로텍션을 en/disable 하기 위해서는 PDE, PTE 의 플래그와 CR0 의 WP 비트를 조작한단 거다.

• Clear the WP flag in control register CR0.
• Set the read/write (R/W) and user/supervisor (U/S) flags for each page-directory and pagetable
entry.

by somma | 2006/01/20 10:05 | 시스템 프로그래밍 | 트랙백(3) | 덧글(11)

트랙백 주소 : http://somma.egloos.com/tb/2131561
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from 컴퓨터에 미친 어느놈의.. at 2006/01/20 10:24 #

제목 : 인텔 CPU에 있는 CR레지스터란놈들~~죽었어~~~
고수한분을 발견했다.. 이글루스에서 말이다. 그분의 글을 공부하고자...긁어왔다. <a title="" href="http://somma.e......more

Tracked from 폭행 몬스터 at 2006/02/02 18:13 #

제목 : CR0 트릭을 사용한 프로그램 .. 실제 코드
cr0 레지스터를 이용한 Write Protection 제거 IceSword 의 드라이버를 분석하다 보니 CR0 트릭을 사용하는 코드가 보여 포스팅 한다. :-) .text:00012152 loc_12152: ; CODE XREF: ......more

Tracked from kkamagui의 끝없.. at 2006/10/27 00:23 #

제목 : [DDK] 오~ 멋진 내용. @0@)/~
cr0 레지스터를 이용한 Write Protection 제거 나중에 시간나면 적용해 봐야겠다 ㅎㅎ 아직 별로 건드릴 일이 없는데... 곧 사용할지도 모르겠군... ㅡ_ㅡa......more

Commented by 마진가 at 2006/01/20 10:19 #
RTFM 이란 말은 뭐예요????죄송합니다 제가 정말 무식한놈이라서^^
Commented by 마진가 at 2006/01/20 10:21 #
무식하게 질문해도 될까요????
그런데 어떤것? 무엇에 대한 write 보호죠????
메모리 영역?요? 만약 그렇다면 메모리라면....가상 주소공간인가요? 물리 주소 공간인가요?
Commented by 마진가 at 2006/01/20 10:23 #
좀 긁어갈께요~~
Commented by somma at 2006/01/20 13:38 # x
일단 RTFM 은 Read The Fine Manual 또는 Read The Fucking Manual ^^ 의 약자구여..헤헤
CR0.WP 비트는 메모리 페이지에 대한 속성제어 입니다.
결국.. 따지고 보면 물리 메모리에 대한 속성 제어가 맞죠...PTE 는 가상 주소 공간에서 물리 주소를 찾아가는 과정에서 이루어지는 체크일테니까요..
Commented by 마진가 at 2006/01/21 11:34 #
아~~~그렇군요^^ 역시 멋지십니다.^^
Commented by seyool at 2006/01/27 11:48 # x
형님 멋지십니다 -_-)b
새해 복 많이 받으세요
Commented by somma at 2006/01/27 18:26 # x
응..너도 복 많이 받어...ㅎㅎ
Commented by AmesianX at 2007/02/07 22:27 # x
오.. 항상 고급정보만 올려놓으시네요...

앞으로도 계속 좋은 정보 기대하겠습니다. 수고하세요..
Commented by 홍병장 at 2007/02/07 23:13 # x
여긴 항상 좋은 정보들만 득실득실하군요
언젠가는 건들어야 할 개념들....으음~_~

일단 유저단에서 최대한 알고 들어가야겠습니다
그래야지 시스템레벨에서의 예술을 감상할수있겠네요 ^__^;
COW = 소 :-)
Commented by somma at 2007/02/08 17:12 #
AmesianX, 홍병장 / 좋게만 말씀해 주시니 .. 좀 쑥스럽습니다. 제가 낸 아이디어도 아니고.. 원래 있던 내용들이라서...^^
약간의 부담도 ...ㅎㅎ
Commented by seyool at 2007/11/22 16:53 # x
왜 메모리조작한 프로세스가 재실행해도 똑같이 고친게 남아있나 해서 고민했는데,,
결국은 WP때문에 COW가 일어나지 않아서였네요.
감사합니다 ㅡ.ㅜ

'보안' 카테고리의 다른 글

The Magic of magic byte.  (0) 2008.03.16
드라이버 쪼물딱 거리기 3탄 [펌 namuya.g3.cc]  (0) 2008.03.12
PUSHFD & POPFD  (0) 2008.01.25
Addressing mode - From Wikipedia, the free encyclopedia  (0) 2008.01.23
스트링과 배열 - Instruction  (0) 2008.01.22
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함