본문 바로가기

Reversing23

[리버싱 핵심 원리] 17장, 실행 파일에서 .reloc 섹션 제거하기 17장, 실행 파일에서 .reloc 섹션 제거하기 17.1 .reloc 섹션 EXE 형식의 파일에서 Base Relocation Table 항목은 실행에 큰 영향이 끼치지 않는다. 단, DLL, SYS 형식의 파일은 Base Relocation Table이 거의 필수적이기 때문에 이 내용은 EXE 파일에만 해당되는 내용이다. .reloc 섹션이 제거 되면 당연히 PE 파일의 크기가 줄어드는 효과를 볼 수 있다. .reloc 섹션은 보통 마지막에 위치하는데, 이렇게 마지막에 위치한 섹션을 제거하는 건 생각보다 어렵지 않다. 17.2 reloc.exe 실습 파일의 끝에 존재하는 .reloc 섹션을 제거하려면 4단계의 작업과정을 거친다. (1) .reloc 섹션 헤더 정리 (2) .reloc 섹션 제거 (3).. 2020. 11. 15.
[리버싱 핵심 원리] 16장, Base Relocation Table 16장, Base Relocation Table 16.1. PE 재배치 PE 파일(EXE, DLL, SYS)이 프로세스 가상 메모리에 로딩(loading)될 때 PE 헤더의 ImageBase 주소에 로딩된다. DLL(SYS) 파일의 경우 ImageBase 위치에 이미 다른 DLL(SYS) 파일이 로딩되어 있다면 다른 비어 있는 주소 공간에 로딩된다. 이것을 PE 파일 재배치라고 한다. 즉, PE 재배치란 PE 파일이 ImageBase에 로딩되지 못하고 다른 주소에 로딩될 때 수행되는 일련의 작업들을 의미한다. 16.1.1. DLL/SYS TEST.EXE 프로세스에 A.DLL이 10000000 주소에 로딩되어 있다. 이후 B.DLL이 같은 주소(10000000)에 로딩을 시도하면 PE 로더는 비어 있는 주.. 2020. 11. 7.
[리버싱 핵심 원리] 5장, 스택(Stack) 05, 스택(Stack) : 차곡차곡 쌓여진 데이터를 의미 [ 스택의 특징] - 메모리의 데이터들을 효율적으로 다루기 위해 고안된 데이터 참조 방식 중 하나 - 가장 먼저 입력된 데이터가 가장 아래쪽에 쌓이고, 나중에 입력된 데이터는 그 위에 쌓이게 되는 구조를 가진다 ( FILO(First in Last out) 구조) - 구조상 특징이 마치 더미를 쌓아 올린 모습과 흡사 - 가장 먼저 처리해야 될 것을 가까운 곳에 둔다. - push: 스택에 새로운 자료 추가 / pop: 스택에 저장된 값을 뺌 - TOP: 스택에 쌓인 데이터의 가장 높은 위치의 메모리 주소 값(실제로는 가장 낮은 주소 값) - 기준이 되는 위치 - Bottom: 스택에 쌓인 데이터의 가장 낮은 위치의 메모르 주소 값 (실제로는 가장.. 2020. 11. 7.
[리버싱 핵심 원리] 4장, IA-32 Register 기본 설명 04, IA-32 Register 기본 설명 4.1.CPU 레지스터란? 레지스터: CPU 내부에 존재하는 다목적 공간 - Ram과는 다른 성격을 가진다. - CPU가 RAM에 있는 데이터를 엑세스 하기 위해서는 물리적으로 먼 길을 돌아가야 하기 때문에 시간이 오래 걸린다. 그러나 레지스터는 CPU와 한 몸이기 때문에 고속으로 데이터를 전송할 수 있다. 4.1.1.레지스터를 알아야 하는 이유? - 리버싱 초급 단계에서 애플리케이션 디버깅을 잘 하려면 디버거가 해석해 주는 어셈블리 명령어를 공부해야 한다. - 어셈블리 명령어의 대부분은 레지스터를 조작하고 그 내용을 검사하는 것들인데, 정작 레지스터를 모르면 명령어 자체도 이해하기 힘들다. 4.2. IA-32의 레지스터 - Intel Architecture .. 2020. 11. 7.
[리버싱 핵심 원리] 3장, 리틀 엔디언 표기법 03C 3.1. 바이트 오더링(Byte Ordering) 데이터를 저장하는 방식 (바이트를 배열하는 방법) 3.1.1. 리틀 엔디언 & 빅 엔디언 1) 엔디언(Endian) : 여러 개의 연속된 대상을 배열하는 방법 2) 리틀 엔디언(Little Endian) : 데이터를 저장할 때 역순으로 저장 [ 특징 ] - 사람이 보기에 직관적이지 않다. - Intel x86 CPU에서 사용 - 산술 연산, 데이터 타입 확장/축소될 때 더 효율적 3) 빅 엔디언(Big Endian): 데이터를 저장할 대 앞에서부터 순차적으로 저장 [특징] - 사람이 보기에 직관적 - 대형 UNIX 서버에 사용되는 RISC 계열의 CPU에서 많이 사용 - 네트워크 프로토콜에 사용 2020. 11. 7.
[리버싱 핵심 원리] 8장, abex' crackme #2 분석 08, abex' crackme #2 분석 첫 화면 Check 클릭 About 클릭 실행화면이다. 이름과 시리얼을 맞는 것을 입력해야 한다. Visual Basic? : 윈도우용 응용 프로그램을 개발할 수 있는 프로그래밍 언어 - 비주얼 언어는 화면 디자인을 위해 많은 줄의 코드를 작성하지 않고 미리 만들어진 도구를 이용하여 그림 그리듯이 디자인할 수 있는 언어 VB 전용 엔진 (1) VB 파일은 MSVBVM60.dll (Microsoft Visual Basic Virtual Machine 6.0)이라는 VB전용 엔진을 사용한다. (2) VB 엔진의 사용 예를 들어보면 메세지 박스를 출력하고 싶을 때 VB 소스코드에서 MshBox() 함수를 사용한다. (3) VB 컴파일러는 실제로 MSVBVM60.dll.. 2020. 11. 7.