1. 설치 방법https://github.com/pwndbg/pwndbg GitHub - pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB Made EasyExploit Development and Reverse Engineering with GDB Made Easy - pwndbg/pwndbggithub.com여기에 들어가서 git clone https://github.com/pwndbg/pwndbgcd pwndbg./setup.shgdb위 명령어를 그대로 치면 아래와 같은 화면이 나와야 한다. quit을 입력하면 pwndbg를 나갈 수 있다. 2. pwndbg 개요 리눅스는 실행 파일 형식으로 ELF (Executable and ..
1. 문제 요약바이너리가 레지스터에 반환하는 값을 디버깅으로 찾는 문제이다.출력문이라면 디버깅을 하지 않고도 문자열만을 검색하여찾을 수 있지만,바이너리가 해당 문자열을 레지스터에다가 반환하기 때문에 디버깅 사용은 필수이다.2. 문제 풀이GDB 디버거 연결우선 기본적으로 바이너리를 디버거로 열어준다.이렇게 열어줘야 정상적으로 열린다. (나는 처음에 모르고 위에 Tool Chest에 있는 Debugger를 눌렀더니 계속 빈 프로젝트 파일만 오픈이 되었다.)그 후에 디버거 메뉴에서 GDB LOCALLY IN-VM을 열어 디버거를 우분투의 GDB와 연결시켜준다.그러고 일단 starti 메뉴를 체크하고 실행을 시켜준다. 여기까지가 항상 기본 작업이다.브레이크 걸기가장 먼저 해주어야 할 것은, 동기화이다.Ghidr..
1. 문제 이해 해당 프로그램을 실행시켰을 때 플래그가 출력되지 않고 숨겨져 있음을 알 수 있다. 그래서 디버거를 사용하여 출력 함수 다음으로 실행되는 함수가 어떤 데이터를 갖고 있는지 알아내야 한다. 2. 문자열 검색 Below function takes the flag as an argument :) 는 그냥 봐도 20바이트는 넘기 때문에 문자열 검색의 minimum 값을 20으로 설정하고 찾아본다. 3. 문자열 참조 그러면 우리가 찾고자 했던 문자열의 위치로 이동할 수 있고, 문자열이 쓰여 있는 곳이 곧 메인 함수이기 때문에 우리는 문자열 참조를 하여 메인 함수의 위치로 이동할 수 있다. 4. 디버깅 디컴파일된 메인함수를 보면 출력 함수 밑 부분에 FUN_004015e2 라는 함수가 어떤 데이터를 ..
1. 문제 이해 우선 simple_patch_me 파일을 실행시켜서 동적분석을 하게되면 1년이 지난 후 플래그를 알려주는 프로그램이라는 것을 알 수 있다. 그러면 우리는 I will show you the flag after 1 year :p 라는 문자열을 찾기만 하면 main 함수로 이동할 수 있을 것이다. 2. 문자열 검색 Search - Search for Strings 를 클릭해서 문자열의 길이가 15 바이트가 넘으니 최소 길이를 15로 설정하고 검색해주면 우리가 찾고자하는 문자열을 찾을 수 있다. 마찬가지로 한 번 클릭해주고 창을 닫아준다. 3. 문자열 참조 그러면 어셈블리 코드에서 해당 문자열이 사용된 위치로 이동해있는데, 그 상태에서 우클릭을하여 그 문자열을 참조하고 있는 함수를 찾아 해당 ..
1. 프로그램 분석 우선 프로그램이 어떻게 작동하는지 알기 위해, 실행시켜보자 $ ./simple_crack_me_2 12341234123412342134123412341234123412342134 your input length is wrong x( $ ./simple_crack_me_2 12342134asdfasdfadsf your input length is wrong x( $ ./simple_crack_me_2 asdfasfasd123 your input length is wrong x( $ ./simple_crack_me_2 123123asdasd your input length is wrong x( $ 우선, 입력 값을 입력했을 때, 입력 값의 길이가 틀리다는 문자열이 출력된다. 입력 값의 일..
Simple Crack Me | 워게임 | Dreamhack Simple Crack Me Description Exercise: Simple Crack Me에서 실습하는 문제입니다. 이 문제는 사용자에게 숫자를 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너 dreamhack.io 1. 시작 단계 프로젝트를 생성해준다. 생성하지 않으면 Tool Chest에 용 그림이 뜨지 않는다. 들어오면 처음에는 프로젝트 폴더가 비어있을 텐데, File에서 Import File을 해서 simple_crack_me를 해준다. 처음엔 여기서 불러오기가 안되길래 Ghidra를 처음부터 다시 깔았는데 꼭 User 폴더에 생성해야한다. 그 이유는 나도 모르겠다..
◾문제 파악 프로그램을 실행시키면 문자열을 입력하라는 Input 메시지가 뜨게 되고 아무 문자열이나 입력하면 Wrong 이라는 결과 값이 표시가 된다 고로 Correct를 표시하게 하는 문자열도 존재한다는 것을 알 수 있다 ◾정적 분석 IDA 프로그램을 사용하여 chall0.exe 파일을 분석해본다 우선 Correct라는 문자열이 사용된 위치를 찾기 위해 문자열 검색을 하자 shift + F12를 누르면 문자열 리스트가 나오게 된다 여기서 Correct라는 문자열을 쉽게 찾을 수 있다 더블 클릭하여 어셈블리 코드에서 문자열을 출력하는 위치를 찾는다 버퍼에 Correct가 저장되어 출력되는 것이므로 Buffer를 선택하고 x 단축기를 눌 상호참조를 해본다 그러면 이런식으로 메인 함수로 이동하게 되고, F5..
정적 분석은 주로 main 함수를 찾고 분석하므로서 시작됨 함수를 찾는 방법은 크게 진입점(EntryPoint, EP)를 찾아 분석 대상 함수의 특성이나 외적 정보 분석 이 두 가지 정도가 있는데, 보통 진입점과 main 함수의 시작 시점이 동일하지 않기 때문에 진입점을 찾아 그 지점부터 분석하는 것 보다는 main 함수의 특성이나 외적 정보를 이용하여 찾음 1. 문자열 찾기 정적 분석을 할 때, 가장 많이 사용되는 정보는 "문자열" 디버깅 메세지나 로그 파일 생성 시에 여러 문자열들이 포함됨 로그 관련 문자열에는 로그를 생성하는 함수의 이름과 인자가 포함됨 shift + F12를 해서 문자열을 찾는 화면으로 이동한다 2. 상호 참조 해당 문자열이 어디서 사용됐는지 x를 눌러서 상호 참조 기능으로 해당 ..