DreamHack의 Beginners 로드맵을 기반으로 정리한 글입니다.
Visual Studio Code
코딩(Coding)은 프로그래밍 언어를 작성함으로써 컴퓨터에게 명령할 수 있는 체계를 만드는 행위로, 해킹과 뗄 수 없는 관계이다. 그리고 이러한 코딩을 시작하기 위해선 소스 코드 편집기를 잘 사용할 수 있어야 한다.
비주얼 스튜디어 코드(Visual Studio Code, VS Code)는 Windows, macOS, Linux에서 사용 가능한 소스 코드 편집기이다. 기본적으로 JavaScript, TtypeScript, Node.js를 지원하며 확장 프로그램(Extension)을 통해 C, Java, Python 등 100개 이상의 언어를 지원한다. 가볍고 무료인데 다양한 기능을 제공하여 많은 사람들이 사용하고 있다. 실제 Stack Overflow에서 개발자를 대상으로 실시한 2023년 설문 조사에 따르면, 가장 선호하는 개발 환경으로 VS Code가 뽑혔으며 비율 또한 압도적이었다.
개발을 할 때만 소스 코드 편집기를 사용하는 것이 아니라, 해킹 공부를 할 때도 직접 익스플로잇 코드 혹은 스크립트(소스 코드를 compile 하지 않고도 실행할 수 있는 코드 파일)를 작성하기 위해 VS Code 환경을 마련해 두는 게 좋다.
Tips
커맨드 팔레트(Command Palette)
VS Code에 존재하는 기능을 키보드 입력으로 검색하고 실행할 수 있는 간편한 명령 처리 기능이다.
단축키 Ctrl + Shift + P 로 열 수 있다.
터미널(Terminal)
VS Code 내에서 빠르게 명령어를 실행할 수 있는 창이다.
단축키 Ctrl + ` 로 열 수 있다.
리눅스 VM (WSL2) & VS Code 연결
VM에서 코딩을 하다 보면 속도가 느리거나 불편한 경우가 있다. 때문에 편리한 코딩을 위해선 VS Code 편집기를 리눅스 VM에서 사용할 수 있도록 연결해야 한다.
먼저 호스트 머신(실제 컴퓨터, 호스트 머신 위에서 돌아가는 VM을 게스트 머신이라고 부름)에 VS Code를 설치하고, WSL2로 리눅스 환경(VM)을 구축한다.
VS Code 설정: WSL 설치
VS Code 좌측 Extensions 탭을 열어 wsl을 검색한다. WSL extension을 클릭하고 Install 버튼을 눌러 설치한다.
code 명령어
이제 리눅스 환경에서 VS Code 실행 명령어인 code 명령어로 간단하게 VS Code와 연결할 수 있다.
먼저 우분투 셸을 열고, VS Code에서 열고 싶은 디렉토리로 이동한다. 그 다음, 아래 명령을 실행한다.
code .
그러면 VS Code 창이 생기면서 해당 디렉토리의 파일들을 열고 수정할 수 있게 된다.
C 코드 컴파일, 실행
소스 코드가 포함된 c 파일은 컴파일 과정을 거쳐야 실행 가능한 파일로 변환된다. 리눅스에서 C/C++ 언어로 작성된 소스 코드를 컴파일할 때는 주로 gcc(GNU Compiler Collection) 컴파일러를 사용한다.
gcc --version
▶ gcc 버전 출력 -> gcc 설치 여부 확인 가능
sudo apt install gcc
▶ gcc 설치
설치가 완료되면 test.c 파일이 있는 디렉토리로 이동하고 컴파일한다. 아래는 test.c 파일을 실행 가능한 test 파일로 컴파일하는 명령어이다. 컴파일 후에 ./test 명령으로 test 파일을 실행하면 "Hello Beginners!"가 출력된다.
#include <stdio.h>
int main(){
printf("Hello Beginners!\n");
return 0;
}
▶ test.c 코드
VS code로 C 코드 실행
VS code의 C/C++ 확장 프로그램을 사용하면, gcc 명령어를 직접 사용해서 컴파일하지 않아도 메뉴를 통해 컴파일하여 실행할 수 있다.
1. VS code를 열고 좌측 탭의 Extensions를 클릭하여 C/C++을 Install 한다.
2. 상단 메뉴에서 Run - Run Without Debugging 혹은 단축키 Ctrl + F5로 코드를 실행한다. 그러면 VS code에서 자동으로 소스 코드를 컴파일하고 실행 파일을 생성하여 실행한다.
3. 실행 결과
VS code로 코드를 실행하면 더 편리하지만, 때에 따라 VS code를 사용할 수 없는 경우도 있으니 gcc 컴파일을 기본적으로 알아 두어야 한다.
디버깅
에러 해결
소스 코드의 문법이 잘못되었거나 비정상적인 코드를 작성한 경우 컴파일 혹은 실행 과정에서 에러가 발생한다. VS code에서 코드를 실행하면 터미널 창에 에러 메시지가 출력된다. 이처럼 코드에 에러가 발생한 경우, 출력된 에러 메시지를 활용해서 어느 부분이 잘못되었는지 알아내고 수정하여 에러를 해결할 수 있어야 한다.
터미널 창을 보면 에러가 발생한 이유는 error: 'sum' undeclared (first use in this function) 이고, 에러가 발생한 코드는 11번 라인의 sum=a+b; 이다. 에러 메시지를 통해 sum 변수가 선언되지 않아서 에러가 발생했다는 것을 알 수 있고, 이에 따라 11번 라인 이전에 int sum=0; 을 추가하면 에러가 발생하지 않는다.
해당 에러는 수정하기 쉬운 예시이지만, 에러 메시지를 봐도 어떤 에러인지, 어떻게 해결하는지 알기 어려운 경우가 많다. 이런 경우 구글링을 통해 사람들이 비슷한 에러를 어떻게 처리했는지 참고하는 것도 좋은 방법이다.
위 그림의 에러 메시지 undeclared (first use in this function 을 구글에 검색해 보면 동일한 에러를 겪은 사람의 게시글이 뜬다. 해당 게시글에 달린 여러 사람들의 답변을 보고, 에러를 해결하려면 변수를 선언해야 한다는 사실을 알아낼 수 있다.
디버깅
에러 해결에 도움이 되는 또 다른 방법으로 디버깅이 있다. 디버깅(Debugging)은 소스 코드의 오류(버그)를 찾고 수정하는 과정을 말한다. 코드를 검사하여 잘못된 부분을 찾거나, 특정 코드를 수행한 결과를 확인하기 위해 사용한다. VS code에서는 디버깅을 Run - Start Debugging 혹은 단축키 F5로 디버깅을 시작할 수 있다.
Breakpoint
주로 확인하고 싶은 코드에 Breakpoint(중단점)를 설정한 뒤 디버깅을 시작한다. 중단점을 설정하면 해당 코드를 실행하기 직전에 프로그램을 중단하여 그 시점의 변수 값이나 콜 스택 정보 등을 확인할 수 있다. 중단점은 코드 줄 번호 왼쪽을 클릭하거나 코드에 커서를 두고 단축키 f9를 클릭하여 설정한다.
Debug View
디버깅을 시작하면 좌측 Debug View에서 VARIABLES(변수), WATCH(변수 또는 표현식의 결과), CALL STACK(호출한 함수), BREAKPOINTS(사용자가 설정한 중단점 목록) 등의 정보를 확인할 수 있다.
Debug Toolbar
- ⏯️ Continue/Pause : 다음 중단점을 만날 때까지 프로그램 실행 혹은 프로그램 중단 (f5)
- ➡️ Step Over : 코드 한 줄 실행 - 함수를 만나면 함수 실행 (f10)
- ⬇️ Step Into : 코드 한 줄 실행 - 함수를 만나면 함수 내부로 이동하여 한 줄 실행 (f11)
- ⬆️ Step Out : 함수의 나머지 부분을 모두 실행 (Shift + f11)
- 🔄️ Restart : 디버깅 재시작 (Ctrl + Shift + f5)
- ⏹️ Stop : 디버깅 종료 (Shift + f5)
Debug Console
디버깅 결과를 출력하는 콘솔 창이다.
Vim
Vim(Vi IMproved)은 UNIX의 Vi 편집기(Visual editor)의 기능을 개선한 버전의 텍스트 편집기로, Linux, macOS, BSD 등 UNIX 기반의 모든 환경에서 사용할 수 있다. 마우스 없이 키보드 입력만으로 모든 작업이 가능하기 때문에 Vim 사용에 익숙해지면 소스 코드를 매우 빠르고 효율적으로 편집할 수 있다.
리눅스 환경에서는 Vim 편집기 사용법을 알아 두면 편리하다. 또한 다른 편집기를 사용할 수 없는 경우를 대비하여 익혀두는 것이 좋다. 우분투 리눅스에선는 Vim이 기본적으로 설치되어 있는 경우도 있으나 만약 없다면 터미널에서 sudo apt install vim 명령을 실행하여 설치하면 된다.
Vim 실행
vi 명령을 입력하면 Vim이 실행된다.
vi <파일명> 은 기존 파일을 수정하거나 새 파일을 생성한다. 이때 vi 가 아닌 vim 으로 입력해도 동일하다
모드
▶ Vim의 3가지 모드
Normal Mode (일반 모드)
Vim을 처음 실행하면 일반 모드로 시작한다. 다른 모드에서 esc 키를 클릭하면 일반 모드로 전환된다. 일반 모드에서는 방향키와 Home(숫자 0), End($) 등의 키를 통해 커서를 이동할 수 있는데, 다른 키로도 동일한 동작을 수행할 수 있다.
gg | 첫 행으로 이동 / G: 마지막 행으로 이동 |
0(숫자) | 행의 처음으로 이동 / $: 행의 끝으로 이동 |
h | 왼쪽으로 이동 |
j | 아래로 이동 |
k | 위로 이동 |
l | 오른쪽으로 이동 |
▶ 커서 이동
x
|
현재 커서가 위치한 글자 삭제 (del)
|
X
|
현재 커서 앞 글자 삭제 (backspace)
|
dd
|
현재 커서가 위치한 행 삭제
|
yy
|
현재 커서가 위치한 행 복사
|
p
|
복사한 내용을 현재 행 이후에 붙여넣기
|
P
|
복사한 내용을 현재 행 이전에 붙여넣기
|
/문자열, enter
|
현재 커서 이후로 문자열 찾기
|
n
|
찾은 문자열 목록에서 다음 문자로 이동
|
▶ 문자열 찾기
u
|
이전 수정 사항 되돌리기
|
▶ 되돌리기 (undo: 실행 취소)
Insert Mode (입력 모드)
입력 모드는 사용자가 실제로 텍스트를 입력하고 편집하는 작업을 수행한다. 입력 모드에서도 방향키를 사용할 수 있으며, 일반 텍스트 편집기와 유사하게 동작한다. 일반 모드에서 i 명령 키를 클릭하면 입력 모드로 전환된다.
Command Mode (명령 모드)
명령 모드는 저장, 종료, 취소 등의 명령을 수행한다. 일반 모드에서 : 를 입력하면 명령 모드로 전환된다. 이후 원하는 명령을 입력하면 된다.
:w
|
저장
|
:q
|
종료
|
:wq
|
저장하고 종료
|
:q!
|
저장하지 않고 종료
|
:%s/문자열1/문자열2/g
|
전체에서 문자열1을 모두 찾아 문자열2로 치환 (g: global)
|
'Security > System Hacking' 카테고리의 다른 글
Beginners: DH101 - 2 (리눅스 사용법) (0) | 2025.02.11 |
---|---|
Beginners: DH101 - 1 (컴퓨터 과학 기초) (3) | 2025.02.06 |
System Hacking: Shellcode - 2 (1) | 2025.02.01 |
System Hacking: Shellcode - 1 (3) | 2025.01.23 |
System Hacking: Tool Installation - 2 (0) | 2025.01.21 |