본문 바로가기

리버싱/x64dbg 디버거를 활용한 리버싱과 시스템 해킹의 원리

ch11 - 코드 인젝션 11.1 PE 재배치와 코드 패치 원리 11.2 DLL 인젝션 11.3 쓰레드 인젝션 11.4 코드 인젝션 11.5 프로세스 인젝션 11.1 PE 재배치와 코드 패치 원리 1.1 PE 재배치(relocation) - 프로그램이 로드(load)될 주소에 이미 다른 프로그램이 적재되어 있다면, 다른 주소로 찾아서 로드된다. (로드될 위치가 바뀌면 실행 프로그램이 사용하는 주소들의 재배치가 필요) - 윈도우 PE 파일이 로드되는 주소는 IMAGE_OPTIONAL_HEADER의 ImageBase 값이다. 이 값을 기준으로 코드, 데이터 공간, 그리고 여러 섹션의 주소가 결정된다. 윈도우 비스타 이후에 추가된 ASLR기능이 사용되면, 실행될 때마다 로드되는 주소가 달라진다. 정적 라이브러리는 프로그램이 실행할 때.. 더보기
ch10 - 방패와 창 01 스택 오버플로우 공격 특징 02 데이터 공간 실행 방지 03 데이터 공간 오염 방지 04 공격 방지 기법의 회피 방법 01 - 스택 오버플로우 공격 특징 1) 스택을 오버플로우 하여 스택에 쉘 코드(shell code)를 복제한다. 2) 복귀 주소(return address) 위치에는 복제된 쉘 코드의 시작 주소를 기록한다. 3) 현재의 함수가 끝나면, 복귀 주소를 EIP 레지스터로 가져온다. 4) 결국, 복제된 쉘 코드의 시작 주소를 EIP로 가져오게 되어 쉘 코드가 실행된다. 2)에서는 복제된 쉘 코드의 시작 주소가 실행할 때마다 달라지도록 ASLR(Address Space Layout Randomization) 기능을 부여할 수 있다. 3)에서 스택에 오버플로우가 발생하였음을 검사하는 것이 c.. 더보기
ch09 - 버퍼 오버플로우 공격 01 시스템 메모리 02 스택 오버플로우 공격 03 데이터 공간 오버플로우 공격 04 UAF 공격 01 - 시스템 메모리 1.1 시스템 메모리 영역 - 프로세스 메모리는 코드, 데이터, 스택, 힙 등으로 나누어진다. 각 영역은 세그먼트로 나누어 있으며 일정한 크기를 가진다. PE 헤더 정보(PE Header) : 메모리 맵에서 첫 세그먼트는 PE 헤더 정보가 들어가는 부분으로 실행 파일의 헤더와 같은 내용이다. 세그먼트 크기가 0x1000이기 때문에 PE 헤더가 들어간 곳의 주소는 0x400000~0x400FFF이다. 이 세그먼트는 읽기 권한만 부여되어 있다. 코드 세그먼트(Code Segment) : ".text"라고 표시된 세그먼트는 텍스트 세그먼트 또는 코드 세그먼트라고 불린다. 그래서 실행과 읽기.. 더보기
ch08 - 안티 리버싱 / WindDgb 01 디버거 탐지 02 난독화 안티 리버싱(Anti-Reversing) : 디버거를 통한 분석을 어렵게 하는 기술이다. 일반적으로 복제 방지나 디지털 저장권 보호를 위해 소프트웨어적으로 불법적인 접근을 막는 기술을 말한다.(정적 방식 / 동적 방식) 정적 안티 리버싱 기술 - 디버거를 탐지하여 프로그램이 정상적으로 실행하지 못하도록 방해한다. 대표적인 것이 디버거를 탐지하여, 디버거를 수행 중일 때는 다른 동작을 수행하는 방법 동적 안티 리버싱 기술 - 디버거로 코드 수행 과정을 관찰하는 것을 방해하여 원 프로그램의 동작 원리를 이해하기 어렵게 방해한다. 패킹, 암호화, 중단점 설정 무시나 오류 처리, 코드 난독화(code obfuscation), 가상 머신 탐지, API 리다이렉트 등 여러 가지 기법이.. 더보기
ch07 - 파일 패킹과 언패킹 01 PE 파일 패킹(packing) 02 PE 파일 언패킹(unpacking) 03 수동 언패킹(manual unpacking) ch07 - 파일 패킹과 언패킹 패커(packer) : PE 파일을 실행 가능한 형태로 파일을 압축시켜주는 프로그램으로 압축과 동시에 보호(anti-debugging, encryption 등) 기능을 포함하고 있으면 프로텍터(protector)라고 부르고 단순히 파일의 사이즈만 줄여준다면 그냥 패커(UPX, Aspack)라고 부른다. 프로텍터는 리버싱으로부터 보호하기 위한 것으로 압축 해제 기능뿐만 아니라 안티 리버싱 기법이 적용된 것을 말하며 기법으로는 안티 디버깅(anti-debugging), 가상 머신 탐지(anti-vm), 코드 난독화(code obfuscating),.. 더보기
ch06 - 윈도우 실행 파일 구조 01 윈도우 PE 파일 02 윈도우 PE 파일 구조 03 IAT(Import Address Table) 04 EAT(Export Address Table) 1. 윈도우 PE 파일 1.1 윈도우 PE(Portable Executable) 파일이란? - 윈도우에서 실행 파일은 PE 파일의 구조를 가지여, 여러 가지 확장자로 사용되고 있다. 파일이 실행되는 정보를 볼 수 있고 어느 메모리에서 로딩되는지 등의 정보를 알 수 있다. 윈도우에서 사용되는 실행 파일 종류 - 실행 계열 : exe(실행파일), scr(스크린세이버), msi(윈도우즈 패키지 인스톨 프로그램), bat(명령어 배치파일), cmd(명령어 스크립트), vbs(VB 스크립트) 등.. - 라이브러리 계열 : dll(동적 라이브러리), ocx(OL.. 더보기
ch05 - 코드 분석과 패치 01 문자열 패치 02 코드 패치 03 실행 파일의 코드 분석 연습 1. 문자열 패치 패치 : 프로그램의 파일이나 실행 중인 프로세스의 메모리 내용을 변경하는 작업을 말한다. - 패치가 필요한 경우 프로그램의 일부 기능에 오류가 있거나, 새로운 모듈이 개발되어 그 모듈과의 연결이 필요하거나, 프로그램에 보안 취약점이 존재하여 그 취약점을 삭제하는 등, 프로그램의 일부 코드를 수정하여 문제점을 해결하고자 할 때 패치가 사용된다. 크랙(crack) : 패치와 비슷한 개념이지만 그 의도가 비합법적이고 비도덕적인 경우를 말한다. ex) 유료 소프트웨어를 불법적으로 사용하기 위해서 소프트웨어 인증 과정을 우회하는 경우, 특정 프로그램에 악의적인 코드를 심거나 특정 행위를 수행하지 못하게 코드를 수정하는 경우 1... 더보기
ch04 - 어셈블리어의 이해 1. 어셈블리어 명령어 어셈블리어에선 16진수를 쓰며 10진수와 비교하면 다음과 같다. 10진수 - 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32... 16진수 - 0 1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20... - 인텔 기반 표기 방법(윈도우)과 AT&T 기반 표기 방법(리눅스)이 있다. 1.1 데이터 이동 명령어 - 데이터 이동 방법의 5가지(x86에서는 다섯 가지 모두 사용 가능하지만, ARM에서는 메모리에서 메모리로 직접 이동하는 것은 불가능) 1) 값을 직접 레지스터로 대입하기 2.. 더보기