Windows에서 특정 함수가 내부적으로 호출하는 함수를 알아야할 때가 있습니다. 특히 상용 보안 엔진 등을 개발해야할 때는 이러한 분석이 필수적일 때가 많죠. 조금 더 깊숙히 후킹하여 외부 솔루션과의 충돌을 미연에 피하고 싶을 때(물론 미봉책적인 방법이기는 합니다만...), 혹은 다른 악성코드, 공격 가능 드라이버들이 사전에 후킹/변조/경유할 만한 경로를 찾는다는 것은 보안 솔루션 개발시에 충분히 고려되어야 할 사항이기 때문입니다.

이러한 분석(내부 함수 호출 개요 분석)을 해주는 명령어가 WinDbg에 있습니다. WinDbg의 uf 명령어를 이용하면 특정 함수를 디스어셈블리 할 수 있습니다. 그 중에서도 -c 스위치를 사용하면 함수의 호출만 간략하게 볼 수 있는 유용한 기능을 사용할 수 있습니다. 이 명령어를 사용해서 NtOpenProcess, NtTerminateProcess, NtTerminateThread 함수를 간단하게 분석해보았습니다.

모든 출력 결과는 Windows XP sp3 에서 출력된 것임을 미리 밝혀둡니다.:

* NtOpenProcess:

lkd> uf -c nt!NtOpenProcess
nt!NtOpenProcess (805cd408)
  nt!NtOpenProcess+0xa (805cd412):
    call to nt!_SEH_prolog (8053db90)
  nt!NtOpenProcess+0x4e (805cd456):
    call to nt!ExRaiseDatatypeMisalignment (80616072)
  nt!NtOpenProcess+0x7c (805cd484):
    call to nt!ExRaiseDatatypeMisalignment (80616072)
  nt!NtOpenProcess+0x116 (805cd51e):
    call to nt!SeCreateAccessState (805f2dc4)
  nt!NtOpenProcess+0x132 (805cd53a):
    call to nt!SeSinglePrivilegeCheck (805f9cc0)
  nt!NtOpenProcess+0x17d (805cd585):
    call to nt!ObOpenObjectByName (805bd8f2)
  nt!NtOpenProcess+0x18b (805cd593):
    call to nt!SeDeleteAccessState (805f2b86)
  nt!NtOpenProcess+0x1e2 (805cd5ea):
    call to nt!PsLookupProcessThreadByCid (805d502e)
  nt!NtOpenProcess+0x1f4 (805cd5fc):
    call to nt!SeDeleteAccessState (805f2b86)
  nt!NtOpenProcess+0x202 (805cd60a):
    call to nt!PsLookupProcessByProcessId (805d50ea)
  nt!NtOpenProcess+0x224 (805cd62c):
    call to nt!ObOpenObjectByPointer (805bdc78)
  nt!NtOpenProcess+0x232 (805cd63a):
    call to nt!SeDeleteAccessState (805f2b86)
  nt!NtOpenProcess+0x23e (805cd646):
    call to nt!ObfDereferenceObject (8052868e)
  nt!NtOpenProcess+0x246 (805cd64e):
    call to nt!ObfDereferenceObject (8052868e)
  nt!NtOpenProcess+0x27e (805cd686):
    call to nt!_SEH_epilog (8053dbcb)

* NtTerminateProcess:

lkd> uf -c nt!NtTerminateProcess
nt!NtTerminateProcess (805d49aa)
  nt!NtTerminateProcess+0x4a (805d49f4):
    call to nt!ObReferenceObjectByHandle (805bd49e)
  nt!NtTerminateProcess+0x78 (805d4a22):
    call to nt!PspCatchCriticalBreak (805d3a50)
  nt!NtTerminateProcess+0x86 (805d4a30):
    call to nt!ExAcquireRundownProtection (8060e3da)
  nt!NtTerminateProcess+0x91 (805d4a3b):
    call to nt!ObfDereferenceObject (8052868e)
  nt!NtTerminateProcess+0xb9 (805d4a63):
    call to nt!PsGetNextProcessThread (805d9ae4)
  nt!NtTerminateProcess+0xd0 (805d4a7a):
    call to nt!PspTerminateThreadByPointer (805d4882)
  nt!NtTerminateProcess+0xd7 (805d4a81):
    call to nt!PsGetNextProcessThread (805d9ae4)
  nt!NtTerminateProcess+0xe5 (805d4a8f):
    call to nt!ExReleaseRundownProtection (8060e434)
  nt!NtTerminateProcess+0xf7 (805d4aa1):
    call to nt!ObfDereferenceObject (8052868e)
  nt!NtTerminateProcess+0x100 (805d4aaa):
    call to nt!PspTerminateThreadByPointer (805d4882)
  nt!NtTerminateProcess+0x113 (805d4abd):
    call to nt!DbgkClearProcessDebugObject (80644c54)
  nt!NtTerminateProcess+0x131 (805d4adb):
    call to nt!ObClearProcessHandleTable (805c49f6)
  nt!NtTerminateProcess+0x13c (805d4ae6):
    call to nt!ObfDereferenceObject (8052868e)

* NtTerminateThread:

lkd> uf -c nt!NtTerminateThread
nt!NtTerminateThread (805d4ba4)
  nt!NtTerminateThread+0x4e (805d4bf2):
    call to nt!ObReferenceObjectByHandle (805bd49e)
  nt!NtTerminateThread+0x62 (805d4c06):
    call to nt!ObfDereferenceObject (8052868e)
  nt!NtTerminateThread+0x6b (805d4c0f):
    call to nt!PspTerminateThreadByPointer (805d4882)
  nt!NtTerminateThread+0x76 (805d4c1a):
    call to nt!PspTerminateThreadByPointer (805d4882)
  nt!NtTerminateThread+0x7f (805d4c23):
    call to nt!ObfDereferenceObject (8052868e)
저작자 표시


다른 분께 상큼하게 선수를 뺏겨서 조낸 분석중 ... 밤 새야겠군

쿨럭
저작자 표시


Microsoft에서 메일로 왔더라구요... ㅎㅎ

한글 입력 버그가 있다는 사실을 미리 알고 9.x 로 갈아타지 않고 8.5 를 쓰고 있었는데...

이번 기회에 9.x 로 갈아타야겠네요. :p

출처: http://im.msn.co.kr/im/main/mainNoticeDetail.asp?BbsCode=bbs02&Seq=139
-------------------------------------------

녹돌이가 전해드리는 굿~뉴스~!!

윈도우라이브 메신저 (MSN) 최신 버전 9.0 에서 한글 입력 오류가 해결되었습니다!


윈도우 XP 이용자분들 중에서
메신저 대화창에서 간혹 한글 입력이 안되는 현상을 겪으신 분들은, 아래 패치를 다운로드 하시면 문제가 해결 됩니다.
▶▶ 한글 입력 오류 패치 다운로드 하기



불편을 드려 죄송하고 앞으로도 더욱 노력하는 윈도우라이브가 되겠습니다.
감사합니다.
저작자 표시