본문 바로가기

드림핵

(68)
[드림핵 로드맵] System Hacking - Quiz: x86 Assembly 3 먼저 main함수의 코드를 보면 push rbp와 mov rbp, rsp는 스택 프레임을 생성하는 부분이므로 중요하게 생각하지 않아도 될 것 같고, 5행에서 write_n 함수를 호출하는 부분이 눈에 띈다. write_n 함수의 코드에서는 syscall 명령어에 주목해보자. 드림핵 로드맵에서 x64 syscall 테이블을 가져와봤다. rax, rdi, rsi, rdx에 값을 세팅해놓은 뒤 syscall 명령어를 실행하면 세팅한대로 시스템콜 요청이 이루어진다. rax, rdi, rsi, rdx이 어떻게 세팅되었는지 문제 코드에서 살펴보자. 1. write_n함수의 9행에서 mov rax, 0x1을 확인할 수 있다. rax에는 0x1이 세팅되어있고, 이는 write 시스템콜을 요청한다는 의미이다. 2. wr..
[드림핵 로드맵] System Hacking - Quiz: x86 Assembly 2 프로그램이 종료된 시점에 데이터가 어떻게 바뀌어 있을 지를 알아내야 하는 문제이다. end로 점프하면 프로그램이 종료된다고 한다. 어떤 조건에서 end로 점프하게 되는지 살펴보자. [code]의 6행을 보면 jg end 라는 코드를 확인할 수 있다. jg 명령어는 jump if greater라는 뜻으로, 직전에 비교한 두 피연산자 중 전자가 더 크면 피연산자로 주어진 주소로 jump하는 명령어이다. 그렇다면 직전에 있는 비교 명령어를 살펴봐야할 것 같다. 5행의 명령어는 cmp rcx, 0x19이다. rcx에 들어있는 값과 0x19를 비교한다. 결과적으로, rcx에 들어있는 값이 0x19보다 크면 end로 점프하고, 그때 프로그램이 종료된다는 것을 알 수 있다. 그리고 rcx의 값이 0x19보다 크지 ..
[드림핵 워게임] rev-basic-3 먼저 동적 분석을 해본다. Windows PowerShell을 열어 다운로드한 chall3.exe 파일을 드래그앤드롭했다. 엔터를 눌러 실행한다. Input : 이라고 뜨며 입력을 대기한다. 임의로 apple을 입력했다. 엔터를 누르면 Wrong이라는 메시지가 뜨고 프로그램이 종료된다. 이제 정적분석을 해본다. IDA를 이용했다. 열 파일에 대한 정보가 나온다. 변경사항없이 OK를 클릭한다. 적용할 심볼파일이 없으므로 No를 클릭한다. Shift+F12 단축키를 눌러 문자열 목록을 본다. Correct 문자열을 찾을 수 있다. 해당 문자열의 상호참조를 찾아가보면 입력값과 올바른 input 값을 비교하는 명령문이 있는 함수를 찾을 수 있을 것이다. Correct 문자열을 더블클릭한다. Buffer 변수를 ..
[드림핵 워게임] patch 먼저 다운로드한 실행파일 patch.exe를 실행해보았다. 플래그로 보이는 이미지가 가려져있다. ida를 이용해 patch.exe를 연다. 처음 뜨는 화면은 열 파일에 대한 정보를 보여준다. 변경사항 없이 OK를 클릭한다. patch문제는 WinAPI를 이용해 만든 프로그램이기 때문에 WinMain 함수를 찾아야 한다. WinMain함수가 일반적으로 상호참조하는 함수를 찾아 WinMain 함수를 찾아 올라가는 방식으로 찾아본다. import 탭을 클릭한다. CreateWindowExW라는 함수를 찾는다. 이 함수는 보편적으로 윈도우를 생성할 때 사용하는 함수로, WinMain에서 호출한다. 더블클릭해서 함수가 임포트되는 곳으로 간다. CreateWindowExW를 클릭하고 단축키 x를 눌러 상호참조하는 ..
[드림핵 워게임] rev-basic-1 먼저 파일을 실행하여 동적 분석을 진행해본다. Windows PowerShell을 연다. 다운로드한 chall1.exe를 PowerShell 창에 끌어다놓고 Enter를 눌러 실행한다. 입력값을 대기하는 상태가 된다. 임의의 값 apple을 입력해보았는데 Wrong 메시지가 뜨고 프로그램이 종료된다. 이제 정적 분석을 진행해본다. IDA로 chall1.exe를 연다 파일에 대한 정보가 나온다. 확인 후 OK를 클릭한다. 심볼을 가져오겠냐는 확인창이다. 심볼 파일이 없으므로 No를 클릭한다. Shift+F12를 눌러 문자열을 찾아본다. Correct 부분을 더블클릭한다. 어셈블리 코드 내에서 Correct 가 있는 부분의 명령어를 찾았다. Buffer 변수를 참조하는 함수를 찾기 위해 Buffer를 클릭한..
[드림핵 워게임] rev-basic-0 먼저 동적분석을 진행해본다. Windows PowerShell을 연다 다운로드한 chall0.exe 파일을 PowerShell창으로 드래그앤드롭한다. Enter를 쳐서 명령어를 입력하면 Input : 이라는 문자가 뜨면서 입력 대기 상태가 된다. 임의의 값 1234를 입력해본다. Wrong이 뜨고 프로그램이 종료된다. 이제 IDA를 이용해 정적 분석을 해본다. IDA가 실행파일을 열기 전에 파일에 대한 정보를 보여준다. 대략 확인한 후 OK를 클릭한다. 심볼(.pdb) 파일을 찾아서 로드하겠느냐고 묻는다. 심볼 파일이 없으므로 No를 클릭한다. 우선 실행할 때 출력되었던 문자열을 찾아가본다. View > Open subviews > Strings 를 클릭하거나 Shift+F12 를 누른다. 출력된 문자열..
[드림핵 Reverse Engineering] Stage 5 [Stage 5] Tools: IDA #IDA #디스어셈블러 #디버거 #디컴파일러 - IDA(The Interactive Disassembler) : Hex-Rays사에서 제작한 디스어셈블러. 디스어셈블 기능 외에도 여러 환경에서의 디버깅, 다양한 아키텍처 디컴파일 등의 여러 기능 제공. - IDA Freeware 설치 : https://hex-rays.com/ida-free/ - IDA 파일 열기 : File > Open > 파일 선택 또는 drag and drop - IDA 둘러보기 Function Window : IDA에서 분석한 함수 목록 나열. Ctrl+F 로 함수 찾기 가능 Graph Overview : 함수의 흐름을 파악할 수 있게 함수를 그래프화하여 보여줌 Output Window : I..
[드림핵 Reverse Engineering] Stage 4 [Stage 4] 어셈블리어 #어셈블리어 #어셈블러 #역어셈블러 - 어셈블리 언어(Assembly Language) : 컴퓨터 세계에서 통용되는 기계어의 난해한 점을 개선하기 위해 고안된 기계어보다 이해하기 쉬운 언어. - 어셈블러(Assembler) : 일종의 통역사로, 개발자가 어셈블리어로 코드를 작성하면 컴퓨터가 이해할 수 있는 기계어로 번역해주는 프로그램. - 역어셈블러(Disassembler) : 기계어를 어셈블리어로 번역해주는 프로그램. - x86-64 어셈블리어 문법 구조 > 구성요소 : 명령어(Operation Code)-동사에 해당, 피연산자(Operand)-목적어에 해당 - 인텔의 x64 주요 명령어 > 데이터 이동 : MOV, LEA > 산술 연산 : INC, DEC, ADD, SUB..