전체 글 118

Layer7 리버싱 5차시 과제(1) - prob5 풀이

목차 1. prob5 분석 및 코드 복원 1. prob5 분석 및 코드 복원 일단 main 함수를 뜯어보자, 처음에 read를 호출하는 장면을 볼 수 있다. read함수는 생소할 수 있으니 설명을 해보겠다. read는 말그대로 입력을 받아오는 함수인데, 맨 앞에 파일 디스크립터를 줄 수 있어 사용자 입력, 파일 등 여러 곳에서 입력을 받을 수 있다. 여기서는 0x0(standard input)으로 주는 것으로 보아 사용자로부터 입력을 받는 것 같다. 두 번째 인자로는 버퍼 주소를 줄 수 있는데, [rbp-0xd0]을 주는 장면에서 버퍼 위치가 [rbp-0xd0]이라는 사실을 알 수 있다. 세 번째 인자로는 입력받을 사이즈를 지정해줄 수 있다. 0xc8을 인자로 주는 것으로 보아 사용자로부터 0xc8보다 ..

reversing 2022.08.01

Layer7 리버싱 4차시 과제(2) - prob2 풀이

목차 1. prob2 분석 및 페이로드 제출 1. prob2 분석 및 페이로드 제출 분석을 시작해보자. 일단 처음에 아까도 봤던 함수 프롤로그(스택 프레임 생성)이 보인다. rsp에서 0x20을 뺐으므로 지역변수 크기는 대략 32바이트 정도 될 것이다. 아까 prob1을 분석할 때도 봤던 스택 카나리가 또 나왔다. 스택 카나리를 사용하므로 아마 main함수의 맨 아래쪽에는 스택 카나리값이 ebp-0x8에 잘 들어있는지 확인하는 코드가 있을 것이다. 존재한다. 그럼 이 두 부분을 제외하면 아마 모두 사용자가 직접 작성한 코드가 될 것이다. 분석을 시작하려했는데, main이 시작하자마자 srand@plt라는 함수를 호출한다. srand는 rand함수를 사용하기 전 랜덤값을 만들어낼 시드를 정해주는 함수이다...

reversing 2022.07.27

layer7 리버싱 4차시 과제(1) - prob1 풀이

목차 1. prob1 정적 분석 2. prob1 동적 분석 1. prob1 정적 분석 prob1을 gdb로 열고, disass 명령어를 통해 main함수를 출력해보았다. 이걸 하나씩 해석해보자. 일단 main+0부터 main+4까지는 저저번 시간에 배운 스택 프레임을 형성하는 코드이다. rbp(스택의 바닥을 가리킴)를 스택에 push하고 rsp(스택의 천장을 가리킴)값을 rbp값으로 옮겨 함수가 끝났을 때를 대비해 현재 스택의 바닥을 임시로 저장하고, 새로운 스택프레임의 바닥을 가리키게 된다. 그 다음 rsp에서 0x10, 즉, 16을 빼주었고, 이것은 main함수의 지역변수를 담기 위한 공간이다. main+8에서는 fs라는 공간에서 값을 가져오는데, 이는 스택 카나리라고 하는 보호기법 때문에 사용한다...

reversing 2022.07.27

Layer7 리버싱 3차시 과제

1. 어셈블리어 2. 레지스터 3. 메모리 구조 1. 어셈블리어 우리가 짜는 C언어 코드, 자바스크립트 코드 등 하이레벨 언어들은 각 컴파일러마다 다르게 해석해 각기 다른 기계어가 만들어진다. 따라서 기계어만을 가지고 원래 코드대로 복구하는 것은 각 컴파일러마다의 해석 방식을 알아야 하고, 서로 다른 코드가 겹치는 경우도 있기 때문에 굉장히 어려운 일이다. (물론 아이다 등의 디컴파일러가 있지만, 완벽하진 않다.) 이렇게만 보면 리버싱이 가능한 건가라는 생각이 들지만, 우리에겐 기계어가 있다. 이 기계어만 보면 코드 해석이 사실상 불가능하지만, 기계어와 1대1로 대응되는 어셈블리어를 보면 사람도 어느정도 해석이 가능하다. 이런 이유 때문에 우리는 어셈블리어를 볼 줄 알아야 리버싱을 제대로 할 수 있다. ..

reversing 2022.07.25

layer7 리버싱 2차시 과제

목차 1. 프로그램의 분석 방법(정적 분석, 동적 분석) 2. 실행파일이 만들어지는 과정 3. 알면 좋은 리눅스 명령어 정리 4. vim(vi improved) 명령어 정리 1. 프로그램의 분석 방법(정적 분석, 동적 분석) 프로그램을 분석하는 방법은 크게 정적 분석과 동적 분석의 두 가지로 나뉜다. 정적 분석은 프로그램의 코드나 명령어만을 보고 프로그램의 실행과정을 유추하는 분석이고, 동적 분석은 프로그램을 직접 실행시켜 보면서 프로그램의 실행과정을 확인하는 분석이다. 각각을 예를 들어 설명해보자. 만일 실행파일이 있고, 그 프로그램이 악성 프로그램인지 잘 모르겠다면 IDA, x64 dbg 같은 디컴파일러, 디스어셈블러 등으로 코드를 보고 한 해석만으로 실행과정을 유추해낼 것이다. 이렇게 코드 분석만으..

reversing 2022.07.20

Layer7 하드웨어 3, 4차시 과제

목차 1. Soc 2. 하드웨어 인터페이스 3. 펌웨어 4. 논리회로 5. 펌웨어 획득 6. 펌웨어 이미지 분석 Soc(단일 칩 체제) Soc(단일 칩 체제)는 완전한 제품과 그 시스템이 한 개의 칩에 들어 있는 것을 말한다. 즉, 하나의 칩 안에서 여러 직접 회로(여러 독립된 전자회로를 모아 하나의 칩으로 만든 것)의 역할을 구현하는 체제이다. Soc은 주로 모바일 기기 등의 저전력 소비 디바이스에 효율적으로 사용되며, 구성 요소로는 다음 5가지가 있다. 1. 마이크로 컨트롤러, 마이크로 프로세서와 같은 디지털 신호 처리기 2. RAM, ROM과 같은 플래시 메모리 칩셋 3. GPS, 진동자와 같은 위치 및 위성 시스템 4. CPU, GPU와 같은 연산 및 시뮬레이션 구현을 위한 칩셋 5. 모뎀과 같은..

hardware 2022.06.20

Layer7 과제 - 하드웨어 2차시(CPU, 동작 과정, ISA, 메모리 계층 구조)

목차 1. CPU 구조 2. CPU 동작 과정 3. ISA(Instruction Set Architecture) 4. 메모리 계층 구조 1. CPU 구조 Central Processing Unit의 약자로, 컴퓨터 프로그램의 명령어를 해석하고 연산하며, 그 결과를 출력 및 저장해준다. CPU 안에는 코어와 캐시 메모리가 존재하는데, 일단 코어란 우리가 알고 있는 연산, 제어 등을 수행하는 장치이다. 한 개의 CPU 칩 안에 한 개의 코어만을 가지는 CPU를 싱글코어라 부르며, 여러 개의 코어를 가지는 CPU를 멀티코어라고 한다. CPU에 코어가 많을 수록 한 번에 복수 개의 연산을 수행할 수 있다는 뜻이므로 컴퓨터 성능의 가장 핵심적인 부분이다. 이런 코어의 요소에는 제어 장치, 연산 장치, 기억 장치가..

hardware 2022.06.12

선린인터넷고등학교 천하제일 코딩 대회 예선 3등 후기

이틀 전인 6월 10일, 제 6회 천하제일 코딩 대회 예선이 열렸다. 예선도 팀끼리 뭉쳐서 푸는 건줄 알았는데 가서 보니 모든 팀 인원이 각자 다른 방에서 문제를 풀고 각 팀원이 푼 문제 수의 평균과 페널티 점수를 통해 순위를 매기는 방식이었다. 페널티 점수 : 문제를 푼 시간(분 단위) + 틀렸습니다의 개수 * 20 -> 한 번 틀리면 문제를 20분 늦게 푼 거랑 동일함 어쨌든 3시 45분에 예선이 시작되고 문제를 풀어나갔다. 1, 2 번은 날먹인데 노가다 요소가 있어서 2번까지 푸는데 20분이나 걸렸다. 그러다 3번 문제를 만나게 되었는데, 문제 이해 자체가 안 돼서 그냥 4번으로 넘어갔다. 4번은 왠진 모르겠으나 1, 2 번보다 날먹이 심했다. 그냥 반례만 생각했더니 1분컷이 났다. 다음으로 5번 ..

programming 2022.06.12

Layer7 과제 - 하드웨어 2차시(파이프라이닝, 분기 예측, 비순차적 실행, 추측 실행)

목차 1. 파이프라이닝 ( pipelining ) 2. 분기 예측 ( branch prediction ) 3. 비순차적 실행 ( out-of-order execution ) 4. 추측 실행 ( specultion execution ) 1. 파이프라이닝 (pipelining) 명령어가 한 번에 하나만 실행된다고 하면 꽤나 비효율적인 프로세서가 될 것이다. 음식을 예를 들어 설명해보자. 우리는 다음의 3가지 동작으로 계란 3개를 모두 구워야 한다. 1. 계란을 프라이팬 위에 올린다. 2. 인덕션을 작동시킨다. 3. 계란을 접시 위에 올린다. 클럭 주기 1 2 3 4 5 6 7 8 9 계란 1 과정 1 과정 2 과정 3 계란 2 과정 1 과정 2 과정 3 계란 3 과정 1 과정 2 과정 3 이렇게 순차적으로 ..

hardware 2022.06.12

Layer7 - 하드웨어 1차시(수업 내용 요약)

부팅 순서 1. Power On Self Test(POST) 실행으로 하드웨어 무결성 검사 2. BIOS UEFI 검사 3. OS 부팅 ( 부팅 조건 설정 가능) HDD Hard Disk Drive : 옛날에 HDD가 처음 만들어졌을 때는 플로피 디스크를 사용하고 있었기 때문에 상대적으로 단단한 HDD에 Hard라는 이름을 붙이게 되었다. SSD Solid State Drive의 약자로, 자기적인 특성을 이용한 HDD와 달리 SSD는 전기적인 원리를 사용해 데이터를 저장한다. CPU와 작동속도 차이가 나기 때문에 버퍼를 이용한다. ROM ROM은 Read Only Memory의 약자로, 이름에서 알 수 있듯이 쓰기가 불가능해 읽기만 할 수 있으며 전원이 꺼져도 내용이 증발하지 않는 비휘발성 기억 장치이다..

hardware 2022.06.08