WinDBG 명령어 정리

 

명령어

옵션

설명

 일반명령어

u

Unassemble

 

언어셈블

f

함수 전체 언어셈블

b

언어셈블(ip이전의 8개 명령어)

bl

BreakPoint List

 

브레이크 포인트 리스트 출력

be

BreakPoint enable

 

브레이크 포인트 활성화

bd

BreakPoint Disable

 

브레이크 포인트 비활성화

bc

BreakPoint Clear

 

브레이크 포인트 모두 제거

ba

BreakPoint On Access

 

특정 주소에 access시 브레이크포인트

bp

Set BreakPoint

 

브레이크 포인트 설정

g

go

 

실행

p

step

 

한 단계씩 실행

pc

step to next call

 

다음 call 까지 실행

d

Display 

b : byte 출력

출력

dw : word 출력

dd : double word로 출력

dq : Quad word 로 출력

ds

Display String

 

문자열 출력

r register

 

레지스터 정보 출력

k

call stack

 

콜스택정보 출력

 

 

p

함수정보 출력

 

 

b

인자표시

 

 

n

프레임 번호

 

 

v

FPO 정보 표시

 

 

f

스택 사용량 표시

lm

loaded module

 

로드된  모듈 표시

F9

 

 

Start

F5

 

 

Break

메타 명령어

.cls

 

 

커맨드 창의 내용 지우기

.attach

 

 

대상 프로세스에 어태치

.bugcheck

 

 

버그 내용 표시

.crash

 

 

강제로 크래쉬 발생
.dump

 

 

dump 파일 생성

.reboot

 

 

재부팅

.cxr

 

 

context record 표시

.exr

 

 

exception record 표시

.excxr

 

 

exception context record 표시

.trap

 

 

Trap Frame 표시

.exepath

 

 

실행파일 경로설정

.srcpath

 

 

소스파일 경로 설정

.sympath

 

 

심볼 패스 설정/확인

.symfix

 

 

MS 심볼경로 설정

.reload

 

 

심볼 경로를 설정한 후에 WinDBG가 심볼을 다시 로드

.load

 

 

dll 로드

확장 명령어 

!process

 

 

현재 또는 실행중인 모든 프로세스의 정보 출력

!gle

 

 

GetLastError 출력

!error

 

 

에러 코드 해석

!analyze      자동 분석
!cpuid       cpu 정보 출력

!peb

     peb(process environment block) 정보 출력

!teb

     teb((thread environment block) 정보 출력
!token      security token 정보 출력

!stack

     현재 커널 스택 정보 출력

!drivers

     로드된 드라이버 정보 출력


유져 디버깅은 올리디버그나 x64디버그가 편하지만 덤프 분석이나 커널디버깅시 유일신인 WinDBG

WinDBG의 자주쓰이는 명령어 위주로 정리해 보았습니다.

 

증상

 

윈도우즈10 환경에서 2018년 5월 8일에 배포된 업데이트 KB4103721가 설치되면 윈도우 원격(mstsc)을 통해 다른 위도우로 접속시 위와 같은 메시지가 출력되고 원격 접속이 되지 않습니다.

 

 

인증 오류가 발생했습니다.

요청한 함수가 지원되지 않습니다.

 

원격 컴퓨터: XXX.XXX.XXX.XXX

CredSSP 암호화 Oracle 수정 떄문일 수 있습니다.

자세한 내용은 https://go.microsoft.com/fwlink/?linkid=866660를 참조하세요

 

 

원인

CredSSP 암호화 보안 취약점에 대한 패치(KB4103721)가 원격접속을 시도하는 클라이언트와 접속을 당하는 서버 양쪽에 설지되어 있지 않고 한쪽만 설치되어 있을 경우 원격 접속을 차단시킴.

 

 

해결방법

(아래 1번 2번중 하나만 성공하면 됩니다.)

 

1. 접속할(서버)의 PC에 업데이트(KB4093120) 를 설치

(https://support.microsoft.com/ko-kr/help/4093120/windows-10-update-kb4093120)

 

2. Oracle 수정 암호화 보호 수준 수정

(원격 접속하는곳이 서버일 경우가 많이 때문에 인터넷 접속이 부분적으로 막혀 있는곳도 있습니다. 이 방법을 추천합니다.)

 1) 로컬 그룹 정책 편집기 실행 (윈도우키 + R 로 실행창 띄운 후 gpedit.msc 입력 )

 

 

 

 2) 컴퓨터 구성 -> 관리 템플릿 -> 시스템 -> 자격 증명 위임 -> Oracle 수정 암호화 선택

 

 

 3) "사용" 체크, 보호 수준을 "취약" 으로 설정

 

 

 

 

위와 같이 설정하고 다시 원격 접속을 시도해 보면 잘 접속이 될겁니다.

 

PS) 혹시 Oracle 수정 암호화 항목이 나타나지 않으면 기본 자격 증명 위임 거부, 새로운 자격 증명 위임 거부등의 항목들을(사실 어떤걸 수정해서 Oracle  항목이 나왔는지 정확히 기억이 안나네요. 죄송합니다.) 수정해 보시면 Oracle 수정 암호화 항목이 나타날 겁니다. 그 후 방금 수정한 값을 원복하시면 되겠습니다.

기능별 주요 API

 

 

프로그램 실행관련
WinExec : 프로세스 생성하고 초기화가 다 될때까지 기다렸다가 리턴함. 내부적으로 CreateProcess 호출

CreateProcess : 프로세스 생성 후 곧바로 리턴함 

ShellExecute :

LoadModule : 모듈 로드(dll)

입력관련
keybd_event : 키 입력

mouse_event : 마우스 입력

SendInput : 키 입력
SendMessage : 키 입력

PostMessage : 키 입력

 WaitforInputIdle : 사용자 입력 받을수 있을때가지 기다리는 함수

프로세스 종료
TerminateProcess : 프로세스 종료 (작업관리자(taskmgr)에서 응용프로그램탭의 작업 끝내기도 ZwTerminateProcess 호출됨)
ExitProcess : 프로세스 종료 (내부적으로 TerminateProcess 호출됨)


파일 관련 

CreateFile : 파일생성, 파일열기
URLDownloadToFile : 파일 다운
DeleteFile : 파일 삭제

DeleteDirectory : 폴더 삭제

PathFileExists : 파일 존재 검사

FindFirstFile : 파일 찾기

GetfileAttributes : 파일 정보 얻기

ini 파일 

GetPrivateProfileInt : ini 값 일기(숫자)
GetPrivateProfileString : ini 값 읽기(문자열)
WritePrivateProfileString : ini값 쓰기(숫자)
WriteProtfileString : ini값 쓰기(문자열)

Registry 관련

RegCreateKeyEx
RegSetValueEx
RegQureyValueEx
RegOpenkeyEx
RegCloseKey
RegQueryInforkey

드라이버 관련 
NtDeviceIoControlFile :

ZwDeviceIoControlFile :

명령인수
GetCommandLine() : 명령인수 가져오기


디버깅 관련
IsDebuggerPresent : 디버깅중인지 검사

NtQueryinformationProcess = 디버깅 중인지 검사 CheckremoteDebuggerPresent와 동일
NtQueryinformationProcess(hProcess, 7 , &hport, sizeof hPrt, & result); 디버그 포트 검사
NtQueryinformationProcess(GetCurrentProcess(0, 0x1e, &hDebugObject, 4, NULL); 디버그 오브젝트 검사
NtQueryObject
NtQueryinformationProcess(xx, 3)NtQueryinformationProcess(xx, 0x1f // ProcessDebugFlag, 4 , NULL );
NtSetinformationThread : 쓰레드를 디버거로부터 감추기
NtSetinformationThread(GetCurrentThread(), 0x11, 0, 0);

+ Recent posts