728x90
반응형

리버싱 20

ARMv8

ARM은 대표적인 RISC 계열 마이크로프로세서로, 구조가 단순하고 낮은 소비전력이 강점이다. ARMv4부터 시장의 성장기에 경쟁하던 아키텍처에 비해 저전력 고성능을 인정받으면서 자리 잡게 됬다. 시장의 요구에 따라 아키텍처가 지속적으로 발전하여 VFP와 SIMD 등 퍼포먼스를 위한 기능과 코드 크기 감소, 가상화와 시큐리티 지원 기능이 추가되며 현재의 ARMv8에까지 이르게 됬다. ARMv8은 Cortex-A/R/M 시리즈에 따라 다르게 구현된다. 이 중 가장 먼저 발표된 ARMv8-A는 애플리케이션 프로세서 프로파일에 해당한다. ARMv8의 가장 큰 특징은 64비트 아키텍처다. 하지만 실행 상태(execution state)라는 개념이 도입하여 32비트 ARMv7용 코드도 실행 가능하다. 실행 상태는..

리버싱/ARM 2021.02.09

ARM Assembly

ARM CPU의 기본 구성 R0 ~ R15 총 16개의 범용 레지스터를 가지고 있다. 범용 레지스터 R13은 특수 레지스터 SP로 사용된다. SP(Stack Pointer)는 스택의 주소를 저장하는 레지스터이다. 범용 레지스터 R14는 특수 레지스터 LR로 사용된다. LR(Link Register)는 함수 호출 시 되돌아갈 함수의 주소를 저장하는 레지스터이다. 범용 레지스터 R15는 특수 레지스터 PC로 사용된다. PC(Program Counter)는 다음 실행할 프로그램의 주소를 가지고 있는 레지스터이다. 명령어들 MOV ARM에서 레지스터의 데이터 이동을 MOV 명령을 사용한다. ex) MOV R0, R1 (R1의 내용을 R0으로 복사) MOV R0, #1 (상수 1을 R0으로 복사) LDR (Loa..

리버싱/ARM 2021.02.09

ARM 크로스 컴파일러 및 실행

ARM 32Bit sudo apt-get install gcc-arm-linux-gnueabi sudo apt-get install g++-arm-linux-gnueabi ARM 64Bit sudo apt-get install gcc-aarch64-linux-gnu sudo apt-get install g++-aarch64-linux-gnu ARM 크로스 컴파일 하기 arm-linux-gnueabi-gcc -o test test.c (32Bit) aarch64-linux-gnu-gcc -o test test.c (64Bit) ARM 실행 qemu-arm -L /usr/arm-linux-gnueabi ./실행파일 qemu-aarch64 -L /usr/aarch64-linux-gnu ./실행파일 gdb-mu..

리버싱/ARM 2021.02.01

IMAGE_DOS_HEADER 구조와 DOS 스텁

PE 파일은 몇십 파이트의 MS-DOS 스텁(Stub)으로 시작한다. MS-DOS 스텁은 예전의 MS-DOS MZ 포맷으로 PE에서는 크게 의미가 없다. 덤프에서 "This program cannot be run in DOS mode."라는 식별 가능한 문자열을 볼 수 있을 뿐이다. PE 프로그램을 예전 MS-DOS나 윈도우 3.1에서 실행하면 바로 이 문자열이 출력된다. 사실 MS-DOS 스텁은 위의 문자열을 출력하기 위한 조그만한 16비트 도스용 애플리케이션에 지나지 않는다. DOS 스텁은 64바이트의 IMAGE_DOS_HEADER 구조체와 해당 스텁 코드로 이루어진다. WinNT.h에는 IMAGE_DOS_HEADER 구조체가 다음과 같이 정의되어 있다. typedef struct _IMAGE_DOS..

리버싱 2021.01.25

RVA와 섹션

RVA는 디스크 상에 파일로 존재하는 PE의 파일 오프셋과 함께 로드되어 메모리의 이미지로 존재하는 PE의 메모리 번지 사이의 간극을 절충시켜주는 중요한 개념이다. 섹션은 PE 파일 전체를 구성하는 파일/메모리 블록의 단위다. RVA(상대적 가상 주소 - Relative Virtual Address) PE 파일 내의 파일 오프셋과 RVA는 관점이 다르다! PE 구조에서 번지에 관계된 값, 즉 가상 주소 공간 상의 번지들은 전부 RVA 개념으로 표현된다. RVA는 이미지가 메모리에 로드되었을 떄, 더 정확히 표현하면 해당 프로세스의 가상 주소 공간 내에 로드되었을 때 그 시작 주소에 대한 상대적 번지를 가리키는 개념으로, 메모리에서 PE의 시작 주소에 대한 상대적인 오프셋 값으로 생각할 수 있다. 파일 상..

PE 파일의 전체 구조

PE 파일 포맷은 COFF(Common Object File Format)라는 포맷을 계승한 파일 포맷으로, COFF의 확장판이라고 보면 된다. COFF 포맷은 MS에서 사용하던 이전 버전의 여러 실행 파일뿐만 아니라 라이브러리 파일, OBJ 파일에 대한 공통 포맷을 제공한다. 이 PE 파일 포맷은 64bit 경우 PE+라고도 하지만, 기본적으로 PE 파일 포맷을 바탕으로 한다. IMAGE_XX_XXXX 형태의 명칭들은 모두 WinNT.h 헤더 파일에 정의된 구조체다. PE 파일은 처음에 MZ로 시작하는 IMAGE_DOC_HEADER 구조체로 시작해서 도스와의 호환을 위한 코드인 도스 스텁을 담고 있다. 이 스텁 다음부터 실제 PE 포맷이 시작된다. 실질적인 PE 포맷의 시작은 IMAGE_NT_HEADE..

PE 파일

MS는 EXE와 DLL이 갖는 파일 구조를 PE 파일 포맷이라고 명명했다. 이때 PE는 "Portable Executable"의 약자로, 이 포맷으로 구성된 PE 파일들은 플랫폼에 관계 없이 윈도우 운영체제가 돌아가는 시스템이면 어디서든 (Portable) 실행 가능 (Executable)하다는 의미에서 PE라는 이름을 붙였다. WinNT.h 헤더 파일 내의 PE 관련 구조체들은 '파일'이라는 명칭 대신 '이미지(Image)'라는 명칭으로 표현된다. 파일이 아니고 왜 이미지일까? 이때 말하는 이미지는 JPEG나 BMP, GIF 등으로 알려진, 그림이나 사진과 같은 이미지를 의미하는 것이 아니라 Image라는 단어의 어원적 의미로 사용된다. 어떤 실체에 대한 그림자, 허상, 그것의 반영이라는 의미에서의 이..

WinDbg, mona세팅 (구/신 버전 다 있음)

WinDbg Preview 세팅 (최신 버전) 최신 버전은 Microsoft Store에서 다운을 받을 수 있다. App 형태로 나왔다. 검색 창에 WinDbg Preview를 검색하면 나온다. 여기서 설치하면 우선 WinDbg는 설치가 끝난다. 들어가서 sympath는 .symfix, .sympath 명령어를 입력하면 자동으로 path가 마이크로 소프트 주소로 세팅된다. 아니면 설정에 들어가서 직접 입력해도된다. 구 버전은 프로그램으 x86, x64 버전이 나눠져 있지만 최신 버전인 하나로 다 가능하다. 대신 취약점 분석 시 확장 프로그램으로 python이나 mona 같은 툴을 사용할 때, 분석하는 파일이 지원하는 아키텍처에 맞춰 사용해야한다. (예를 들어 x86 파일을 분석하면, python도 x86..

WinDbg Preview

WinDbg Preview는 Windbg의 최신버전이다. WinDbg와 동일한 기본 엔진을 사용하므로 익숙한 모든 명령, 확장 및 워크 플로는 이전과 동일하게 작동한다. 일반적인 특징 이전 세션 구성 정보를 호출하는 기능이 포함되었다. (Recent) 쉬운 피드백 채널 덤프 파일 프로세서 감지 -> 쉽게 관리되는 디버깅을 위해 프로세서 아키텍처를 자동 감지한다. 성능 향상 윈도우는 이제 비동기식으로 로드되며 취소할 수 있다. -> 다른 명령을 실행하면 WinDbg Preview가 로컬, 감시 또는 기타 창로드를 중지한다. 윈도우 개선 Disassembly 창 개선 -> 디스어셈블리 창도 개선되어 스크롤 할 떄 현재 명령의 강조 표시가 그대로 유지된다. Memory 창 개선 -> 강조 표시 및 향상된 스크..

디버깅 환경

디버깅 가능한 환경이 6가지 있다. WinDbg Preview Windows Debugger (WinDbg) Kernel Debugger (KD) NTKD Console Debugger (CDB) NT Symbolic Debugger (NTSD) WinDbg Preview WinDbg Preview는 현대적인 비주얼, 빠른 윈도우, 본격적인 스크립팅 경험, 확장 가능한 디버거 데이터 모델 전면 및 중앙으로 구축된 WinDbg의 마지막 버전이다. WinDbg Preview는 WinDbg와 동일한 기본 엔진을 사용하므로 익숙한 모든 명령, 확장 및 워크플로는 이전과 동일하게 작동한다. 더 많은 정보는 Debugging Using WinDbg Preview 에서 보면된다. WinDbg WinDbg는 유저모드,..

728x90
반응형