Security/Reversing

    [Rev] 프로그램 정적 분석 접근 방식 1 - main 함수 분석 (Ghidra)

    [Rev] 프로그램 정적 분석 접근 방식 1 - main 함수 분석 (Ghidra)

    1. main 함수 분석 2. Import 함수 분석 3. 문자열 분석 1. main 함수 분석 main 함수 분석의 특징은 대상 프로그램을 전체적으로 분석하고 이해할 수 있다는 점이다. 그러나 프로그램의 처음부터 분석하고 싶거나 용량이 큰 프로그램의 분석에는 적합하지 않다. C 언어로 프로그램을 작성할 경우 main 함수가 최초로 실행되는 함수로 코드를 시작하지만 프로그램 실행 시에는 main 함수 앞에 초기화 처리 등이 진행된다. 보통 PE 포맷의 실행 파일은 PE 헤더 내의 AddressOfEntryPoint의 RVA(Relative Virtual Address)에 ImageBase를 가산한 주소에서 실행된다. 기드라에서 엔트리 포인트 심벌명은 entry이다. Symbol Tree 창의 [Expor..

    [Rev] 호출 규약

    호출 규약이란 함수 호출 시 인수 전달 방법과 반환값의 수취 방법을 정의한 것. 호출 규약에 따라 레지스터와 스택의 이용 방법이 다르기 때문에 리버싱을 통해 코드를 이해하기 위해선 호출 규약을 파악하는 것이 필수이다. 호출 규약은 아키텍처나 프로그램의 포맷, 컴파일러나 링커에 따라 변한다. cdecl x86의 C/C++에서 가장 일반적인 호출 규약. 함수의 인수는 역순으로 스택에 쌓이고 반환값은 EAX 레지스터에 저장되며 함수 호출원이 스택을 POP한다. stdcall 윈도우 API에서 이용되는 호출 규약. 함수의 인수는 역순으로 스택에 쌓이고 반환값은 EAX 레지스터에 저장되지만 함수가 종료될 때 그 함수 자체가 스택을 PUSH한다. 인수를 위해 확보한 스택 영역은 RET 명령 operand에 의해 P..

    [Rev] 메모리 영역

    [Rev] 메모리 영역

    모든 실행 파일은 메인 메모리에서 읽히고 CPU에서 실행된다. 메모리 공간은 프로세스별로 분리되어 있다. 코드(code) 영역 : 실행할 코드가 저장되는 메모리 영역 데이터(data) 영역 : 코드 실행 시 읽고 쓰는 데이터, 글로벌 변수가 저장되는 메모리 영역 힙(heap) 영역 : 프로그램 실행 시 동적으로 확보되는 메모리 영역 스택(stack) 영역 : 프로그램 실행 시 함수의 인수, 로컬 변수, 리턴 주소 등을 저장하기 위해 사용되는 영역