본문 바로가기
반응형

Study/Reversing24

[리버싱] PE파일 참조:http://www.reversecore.com PE(Portable Executable) 파일이란? Win32 운영체제라면 어디에서라도 잘 돌아가는 파일 포맷을 말한다. PE라는 개념을 도입한 이유 PE 헤더에는 실행 파일을 실행하기 위한 각종 정보(메모리 적재 방법, 실행 위치, 필요한 DLL 목록 등)가 기록되어 있다. 즉, PE구조를 통해 파일이 실행되기 위해 필요한 정보들을 볼 수 있으며, 파일 실행 시, 코드가 실행되기 전에 PE의 정보부터 읽어 들여 바이너리를 메모리에 올리기 위한 데이터 설정 작업을 하게 된다. PE 파일의 종류 - 실행 파일 계열 : exe, scr - 라이브러리 계열 : dll, ocx - 드라이버 계열 : sys - 오브젝트 파일 계열 : obj ※ obj 파일을.. 2017. 9. 14.
[리버싱] CALL, JMP, RET(RETN) 명령어에 대해 알아보자 CALL 함수를 호출할 때 사용되는 명령어 오퍼랜드가 가리키는 곳으로 프로그램의 흐름이 변경됨 JMP와 차이점은 함수가 끝나고 다시 복귀할 수 있도록 EIP값이 변경되기 전에 기존의 위치를 스택에 저장함 다시 돌아올 때는 스택에서 해당 정보를 꺼내어 복귀함 JMP 오퍼랜드가 가리키는 곳으로 프로그램의 흐름이 바로 변경됨 EIP값이 저장되지 않아 다시 돌아올 수 없음 옵션에는 127byte 범위 내에서 점프하는 short 같은 세그먼트 내에서 점프하는 near 현재 세그먼트를 벗어나는 far RET(RETN) CALL을 통해 호출된 함수에서 다시 복귀하기 위해 사용하는 명령 스택에 저장된 정보를 기반으로 흐름이 바뀌는 것이기 때문에 의미상으로는 POP EIP와 동일하지만 EIP의 내용은 직접적인 수정이 안.. 2017. 9. 3.
[리버싱] 인터럽트에 대해 알아보자 인터럽트(Interrupt)란? 컴퓨터가 작업을 수행하던 도중 예기치 못한 특수한 상황이 발생하여 작업을 중단하고, 그 특수한 상황을 먼저 처리한 후, 원래의 작업으로 되돌아가 나머지 작업을 계속 수행하게 되는 일련의 과정 외부 인터럽트, 내부 인터럽트, 소프트웨어 인터럽트로 분류하는데, 외부나 내부 인터럽트는 CPU의 하드웨어에서의 신호에 의해 발생하고 소프트웨어 인터럽트는 명령어의 수행에 의해 발생함. 인터럽트 종류 외부 인터럽트(External Inteerupt) 1. 전원 이상 인터럽트 2. 기계 착오 인터럽트 3. 외부 신호 인터럽트 4. 입, 출력 인터럽트 내부 인터럽트(Internal Interrupt) 1. 잘못된 명령이나 데이터를 사용할 때 발생하며, 트랩(Trap)이라고도 부른다. 2... 2017. 9. 3.
[리버싱] 함수: 프롤로그&에필로그와 호출 규약 함수 호출 과정에 대해 알아보자. 1. 함수가 사용할 파라미터를 스택에 넣고 함수 시작지점으로 점프(함수 호출) 한다. 2. 함수 내에서 사용할 스택프레임을 설정한다. (프롤로그) 3. 함수의 내용을 수행한다. 4. 수행을 마치고 처음 호출한 지점으로 돌아가기 위해 스택을 복원한다. (에필로그) 함수의 프롤로그와 에필로그는 함수호출 규약에 따라 조금씩 다르다. 함수 호출 규약이란? 호출자(Caller)와 피호출자(Callee) 간에 '함수를 호출할 때 전달되는 인자의 순서나 사용이 끝나고 나서의 스택 정리 등'에 대한 약속이라고 할 수 있다. 크게 _cdecl, _stdcall, _fastcall이 있다. cdecl 주로 C언어에서 사용되며 함수를 호출한 함수(Caller)에서 스택이 정리된다. 가변 길.. 2017. 9. 1.
[리버싱] 스택프레임에 대해 알아보자 스택 프레임이란? 어떤 함수가 호출되었을 때 그 함수가 가지는 공간 구조 이러한 코드가 실행 되었을때 main()이라는 함수가 호출 되고 그 다음에 printf()라는 함수가 호출 된다. main() pushprintf() push printf() popmain() pop프로그램 종료 스택프레임은 LIFO 구조로 이해하면 된다. 2017. 8. 24.
[리버싱] 메모리 구조 코드(code) 영역 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(text)영역이라고도 부른다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다. 데이터(data) 영역 전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장된다. 데이터 영역은 쓰임새에 따라 3가지 영역으로 나뉜다. - 읽기 전용으로 초기화되는 영역 (.rodata) --> 상수키워드(const)로 선언되는 영역, 시스템에 사용된 각종 문자열 예를들어, printf()의 포맷스트링이나 상수 문자열 - 읽기/쓰기가 가능한 영역으로 초기화되는 영역 (.data) --> 전역변수 중 초기값을 갖는 경우 - 초기화되지 않은 영역 (.bss) --> 전역변수로 초기화 되.. 2017. 8. 24.
반응형