Layer7 과제/리버싱 23

ELF PE 설명

ELF는 리눅스 실행 파일을 의미하고, PE는 윈도우 실행 파일을 의미한다. ELF부터 자세히 설명하자면, 리눅스에서 실행 가능한 바이너리(실행 파일), 목적 파일, 공유 라이브러리, 그리고 코어 덤프를 위한 표준 파일 형식이다. 목적 파일은 컴파일이 끝나서 기계어로 변환된 파일이다. 목적 파일과 실행 파일의 차이점은 링킹(linking) 과정을 거치지 않았다는 것이다. 둘 다 기계어로 변환된 것은 맞지만, 목적 파일은 아직 실행을 위해 필요한 데이터들이 없는 상태이다. 따라서 아직은 실행하지 못하는, 미완성품이다. 공유 라이브러리는 라이브러리 중에서 다른 사람들과 공유할 목적으로 만들어진 라이브러리를 말한다. 코어 덤프란(혹은 메모리 덤프, 시스템 덤프) 컴퓨터 프로그램이 특정 시점에 작업 중이던 메모..

[리버싱] prob3, prob4, prob5

-참고-: (리버싱 2차시 포스팅 내용 중) 함수가 인자를 받을 때, 어떤 레지스터를 사용하는지는 아래의 표와 어셈블리어 코드를 보고 유추해야 한다. prob3 prob3 정적분석: time과 srand와 rand가 있는 것을 보아서 난수를 생성하는 코드라는 걸 알 수 있다. 같은 값이 나오는 취약점을 막기 위해서 시드를 변경하고 있다. 부터는 반복문이다. 10번 반복하는 반복문이다. scanf로 사용자로부터 입력을 받고 있는데, edi를 확인해보면 그 자료형을 확인할 수 있다. 따라서 edi에 0x400944에 있는 값을 넣었으므로, x/s 0x400944로 어떤 자료형으로 입력받는지 확인할 수 있다. x/s 0x400944의 결과값이 %d이므로, int형으로 입력받는다는 것을 알 수 있다. 그 다음에..

[리버싱] 3차시 과제2

main 0: rpb를 push한다. main 1: rbp에 rsp를 저장한다. main 4 : rsp의 값과 0x20를 뺀 후에 그 값을 rsp에 저장한다. main 8: mov rax에 fs:0x28부터 QWORD만큼까지에 해당하는 값을 저장한다. 스택 카나리 기법이다. main : rbp-0x8에서부터 QWORD만큼까지에 rax값을 저장한다. main : eax와 eax를 xor연산한다. 따라서 0이다. main : edi에 0xfeedc0de값을 저장한다. (0xfeedc0de로 최기화) main : 0x400580에 있는 함수를 호출한다. main : rbp-0x10에서 DWORD까지에 0x0 저장한다. main : 0x4007ca에 위치한 함수로 점프한다. main : edi에 0x4008d4..

[리버싱] 3차시

main +0: 스택에 rbp를 스택에 넣는다. rbp는 함수의 경계를 구분할 때, 함수와 함수의 맨 아래 경계를 가리킨다. main +1: 옮긴 rbp에 rsp를 대입한다. rsp도 함수의 경계를 구분할 때 사용되는데, rbp가 맨 아래 경계를 가리킨다면, rsp는 맨 위 경계를 가리킨다. main +4: rsp의 값에서 0x10만큼 뺀 값을 rsp에 저장한다. 0x10는 10진수로 10이다. main +8: 0x28은 10진수로 40이다. main +17: rbp에서 0x8(10진수로: 8)만큼 뺀 주소에 rax의 값을 QWORD(8byte)만큼 복사한다는 뜻이다. ptr은 포인터의 약자이다. main: 21: eax와 eax를 xor한 값을 eax에 저장한다. 0이 저장된다. eax는 산술연산과 함..

[리버싱] 2차시 과제 (2)

start : 실행 후 자동 중단 r : 실행 ctrl + c : 실행 중단 c : 계속하기 vmmap : 메모리 상황 보기 elfheader : 메모리 헤더들의 주소값 확인 disassemble 함수명 : 함수 디스어셈블 목록 확인 => ex) disassemble main u or nerarpc or pdisassemble : disassemble 명령어의 결과값을 정리된 형태로 출력 b *주소값 : break point 걸기 => ex) b *main+124 del 번호 : break point 삭제하기 => ex) del 1 ni : 한 줄씩 코드 실행 (call 함수 내부 건너뜀) si : call 함수 내부까지 한 줄씩 실행 finish : 진행 중인 함수를 종료 set 주소값 = 값 : 해당..