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);

01. 제어판 -> 사용자 -> 사용자 홈서비스 활성화 체크


02. 패키지센터에서 Git Server 설치


03. NAS에서 root, admin 외에 Git 전용 사용자 추가 (예: gituser(사용자 아이디))


04. Git Server 설정화면에서 gituser(사용자 아이디) 에 접근허용 체크


05. [window] PuTTY 프로그램을 이용해서 ssh 접속

- Host Name 에 NAS 아이피 입력 (예: 192.168.0.14)

- NAS 사용자 아이디 입력 (예: abc123)

- root 사용자로 변경 ( sudo -i 입력 후 동일비밀번호 재입력)


06. 등록한 사용자폴더로 이동

$ cd /var/services/homes/gituser(사용자 아이디)


07. git 저장소로 이용할 폴더 생성

$ mkdir repo.git


08. 저장소로 이동

$ cd repo.git


09. git 선언

$ git init --bare

$ git update-server-info

$ cd ..

$ chown -R gituser(사용자 아이디):users(사용자 그룹) repo.git


-- 서버 세팅 완료 --


10. git 클라이언트 설치


11. git bash 프롬프트 실행

$ ssh-keygen

$ ssh-copy-id gituser(사용자 아이디)@192.168.0.14(NAS IP)



출처: http://gutmate.tistory.com/entry/Synology-NAS-Git-Server-설치 [프프프]

파이썬 2.x 버젼 사용시 한글이 들어가면 다음과 같은 에러가 발생한다.

 

 

SyntaxError: Non-ASCII character '\xed' in file xx.py on line 22, but no encoding declared;  

see http://python.org/dev/peps/pep-0263/ for details

 

 

원인

 

ascii 코드로 되어있다고 가정하기 때문에 한글을 인식하지 못함

 

해결책

 

1. 파이썬 3.x 버젼을 사용한다.

 

2. 파일 맨 위에 다음과 같은 주석을 삽입해주면 된다.

 

 # -*- coding: utf-8 -*-

 

 

 

이불 게기의 위엄..

 

 

추가로 운동별 칼로리 소모량을 알고싶다면 아래 링크에서

 http://47kg.kr/contents/search/index.php?mode=sport&no=1332

 

아라필 군용 모포

 

아라필 군용 모포

COUPANG

www.coupang.com

 

자작 플러그인 소개합니다.

Spy++이나 ProcessExplorer의 윈도우 찾기 기능과 동일하게 드래그하여 윈도우를 선택하여 어태치 할 수 있게 도와주는 플러그인입니다.

 

File -> Attatch -> 프로세스 선택 하는 복잡한 과정없이 간단하게 드래그 한방이면 끗

 

 

Plugin 폴더에 넣고 실행시 다음과 같이 아이콘이 나타납니다.

 

클릭하면 OllyDbg 윈도우가 최소화 되고 다른 윈도우를 선택하면 하일라이트 됩니다. 클릭한 버튼을 때면 그 윈도우에 어태치 됩니다.

 

Explorer.exe에 어태치 하면 난감한 상황이 발생하니 그 경우는 어태치 되지 않도록 예외처리 해놨습니다.

DrAttacher.dll

 

rm -rf dir

 

-f force 강제로 삭제

 

-i interactive 삭제할 때마다 사용자에게 물어봄

 

-l 셋 이상 파일 삭제 혹은 하위의 파일이나 디렉토리 있을경우 물어봄

 

-r recursive 하위 디렉토리 포함하여 모든 내용 삭제

상당히 불친절한 풀이 시작하겠다.

http://reversing.kr/

[Challenge]

1.Easy Crack

 

다운 받고 실행하면 다음과 같은 그림이 나온다.

 

혹시나 싶어서 마음의 소리를 입력해보면 틀렸다고 나온다. 제대로된 패스워드를 입력하면 Good Boy! 같은 소리를 해주는 전형적인 크랙미 문제이다. 

 

 

가장 먼저 확인해야 될 부분은 Exeinfo 같은 프로그램으로 패킹상태와 어떤 언어로 작성되었는지를 보는것이다.

첫번째 문제라 다행히 가장 스탠다드한 언어인 c++로 작성되었고 패킹되어 있지 않았다. 안도의 한숨을 쉬자. (Themida나 VMProtect 같은 글자가 보이면 조용히 다음 문제를 보도록...)

 

IDA PRO 를 이용해서 전체 코드 구조를 파악해본다.

GetDlgItemTextA 함수 호출후  ( v3 != 97 || strncmp(&Str1, "5y", 2u) || strcmp(&v5, "R3versing") || String != 69 ) 이 관문들만 통과하면

MessageBoxA(hWnd, "Congratulation !!", "EasyCrackMe", 0x40u);

이런 축하합니다 소리를 들을수 있다.시작해보자

 

문자열을 검색해보니 반가운 글자들이 보인다. 자비없는 브레이크 포인트를 선사해 주기위해 거침없이 들어가자

 

1.GetDlgItemTextA 함수를 통해 사용자가 입력한 글자를 얻어온뒤

2.두번째 글짜[ESP+5]가 0x61('a') 인지 검사한다.

3.세번째 네번째 글자[ESP+A](중간에 Push 명령어가 있어 ESP가 변경됨)가 5y 인지 검사

4.나머지 뒤에 글자가 R3versing 인지 검사

 

5.첫번째 글자가 0x45('E') 인지 검사

 

답은 나왔다. 지금까지의 검사 조건들을 종합해보면

2.두번째 글자가 'a'                                                    Xa

3.세번째 네번째 글자가 "5y"                                        Xa5y

4.네번째 "R3versing"                                                 XaR3versing

5.첫번째 글자가 'E'                                                    EaR3versing

답 : EaR3versing

 

                  

 

 

 

 

 

신명나게 살아봅세

 

+ Recent posts