EPROCESS를 이용한 프로세스 ID 변경

EPROCESS에 대한 구조 이해를 위해 프로세스 정보를 일부 변경해 보도록 하겠다. 변경을 위해 커널 디버깅을 중지(Windbg에서 g키 입력) 하고 가상 머신에서 작업 관리자(Alt+Ctrl+Del 키-> 작업 관리자 선택)를 실행하고 보기 메뉴에서 을 선택해 PID를 추가하여 Cmd.exe의 PID를 확인하도록 하자.


작업 관리자에서 PID를 확인할 수 있도록 변경하자

이후 앞서 확인한 !prcoess 명령을 이용하여 Cmd.exe를 찾아서 해당 프로그램의 PID를 53으로 변경해 보자.

[codesyntax lang=”asm”]

0: kd> !process 0 0 cmd.exe

PROCESS 86a02338 SessionId: 1 Cid: 0d6c Peb: 7ffdf000 ParentCid: 0698

DirBase: 3edfe2a0 ObjectTable: 941a1108 HandleCount: 18.

Image: cmd.exe



// 먼저 PID를 변경해 보자. cmd.exe의 프로세스 위치를 _EPROCESS 구조체로 살펴보자. 현재 Cmd.exe의 PID는 10진수로 3436임을 알 수 있다. DirBase는 프로세스의 환경정보 확인에 사용된다. 

0: kd> dt _EPROCESS 86a02338

ntdll!_EPROCESS

+0x000 Pcb : _KPROCESS

+0x098 ProcessLock : _EX_PUSH_LOCK

+0x0a0 CreateTime : _LARGE_INTEGER 0x01cec586`7b6e27ca

+0x0a8 ExitTime : _LARGE_INTEGER 0x0

+0x0b0 RundownProtect : _EX_RUNDOWN_REF

+0x0b4 UniqueProcessId : 0x00000d6c Void

+0x0b8 ActiveProcessLinks : _LIST_ENTRY [ 0x86a03530 - 0x86a68b80 ]

+0x0c0 ProcessQuotaUsage : [2] 0x8ac

+0x0c8 ProcessQuotaPeak : [2] 0x8ac

…중략

// 우리가 수정할 영역은 86c80030에서 0x0b4에 위치하므로 해당 영역에 값이 있는지 확인해 보자. 

1: kd> dd 86a02338+0b4

86a023ec 00000d6c 86a03530 86a68b80 000008ac

86a023fc 00010d7c 000008ac 00010d7c 000001a0

86a0240c 865485c0 00000000 0225f000 0225f000

// 그럼 계산기로 53의 값을 16진수로 확인한 후에 해당 값을 넣도록 하자. 값을 넣기 위해 4바이트 메모리 쓰기 명령을 이용하였다. 

1: kd> ed 86a02338+0b4 00000035

1: kd> dd 6a02338+0b4

86a023ec 00000035 86a03530 86a68b80 000008ac

86a023fc 00010d7c 000008ac 00010d7c 000001a0

86a0240c 865485c0 00000000 0225f000 0225f000

0: kd> dt _EPROCESS 86a02338

ntdll!_EPROCESS

+0x000 Pcb : _KPROCESS

+0x098 ProcessLock : _EX_PUSH_LOCK

+0x0a0 CreateTime : _LARGE_INTEGER 0x01cec586`7b6e27ca

+0x0a8 ExitTime : _LARGE_INTEGER 0x0

+0x0b0 RundownProtect : _EX_RUNDOWN_REF

+0x0b4 UniqueProcessId : 0x00000035 Void // PID가 53으로 달라졌음을 알 수 있다.

[/codesyntax]

PID 변경 및 프로세스 컨텐츠 확인

g키를 눌려 가상 머신을 실행 상태로 만들어서 실제 변경되었는지 확인해 보면 PID가 변경되었음을 알 수 있다. 단 PID가 변경되면서 프로세스 관리 정보를 연결 할 수 없어, 프로세스 정보는 표시되지 않지만 프로그램은 정상적으로 동작한다. 일부 보안 프로그램의 경우 이와 같은 방법을 이용해 프로그램을 해킹으로부터 보호하기도 한다.


PID 변경시 프로세스 정보 확인이 불가능 하다

Facebook Comments

Leave A Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.