본문 바로가기

리버싱핵심원리6

[리버싱 핵심 원리] 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.
[리버싱 핵심 원리] 10장, 함수 호출 규약 10장, 함수 호출 규약 함수 호출 규약? Calling Convention은 우리 말로 '함수 호출 규약'이라고 한다. 이것은 '함수를 호출할 때 파라미터를 어떤 식으로 전달하는가?'에 대한 일동의 약속이다. 함수 호출 전에 파라미터를 스택을 통해서 전달한다. 스택이란 프로세스에서 정의된 메모리 공간이며 아래 방향(주소가 줄어드는 방향)으로 자란다. 또한 PE 헤더에 그 크기가 명시되어 있다. 즉 프로세스가 실행될 때 스택 메모리의 크기가 결정된다(malloc/new 같은 동적 메모리 할당과는 다르다). Q, 그렇다면 함수가 실행완료되었을 때 스택에 들어있던 파라미터는 어떻게 해야 될까요? A, 그대로 둔다. 스택에 저장된 값은 임시로 사용하는 값이기 때문에 더 이상 사용하지 않는다고 하더라고 값을 지.. 2020. 11. 7.
[리버싱 핵심 원리] 15장, UPX 실행 압축된 notepad 디버깅 15장, UPX 실행 압축된 notepad 디버깅 15.1 notepad.exe의 EP Code 원본의 notepad.exe의 EP 코드이다. 010073B2 주소에서 GetModuleHangleA() API를 호출해서 notepad.exe. 프로세스의 ImageBase를 구한다. 그리고 010073B4와 010073C0 주소에서 각각 MZ와 PE 시그니처를 비교한다. 15.2.notepad_upx.exe의 EP Code notepad_upx.exe를 OllyDbg로 열어보면 위와 같은 경고 메세지 박스가 나타난다. 디버거가 해당 파일이 압축되었다고 판단하였다. 예/아니오 중에 아무거나 선택해서 넘어가면 UPX EP코드가 나타난다. EP 주소는 01015330이며, 이곳은 두 번째 섹션의 끝부분이다. 실.. 2020. 11. 7.
[리버싱 핵심원리] 9장, Process Explorer - 최고의 작업 관리자 9장, Process Explorer - 최고의 작업 관리자 Process Explorer? 1) windows 운영체제에서 최고의 프로세스 관리 도구는 Process Explorer 2) 유명한 sysinternals(현재는 MS에 인수되었음)의 Mark Russinovich가 만든 프로세스 관리 유틸리티 3) 이 분이 만든 유용한 유틸리티에는 FileMon, RegMon, TcpView, DbgView, AutoRuns, Rookit Revealer을 만들어 공개 Process Explorer을 다운로드 받은 후, 실행시키면 이와 같은 화면을 볼 수 있다 화면 위의 좌측의 경우, 현재 실행 중인 프로세스들을 Parent/Child의 트리 구조로 표시된다. 우측의 경우, 프로세스 각각의 PID, CPU.. 2020. 9. 28.
[리버싱 핵심 원리] 6장,abex' crackme #1 분석 06, abex' crackme #1 분석 crackme : 크랙 연습 목적으로 작성되어 공개된 프로그램 exex 확장자로 되어있는 파일을 exe 확장자로 변경해 실행시키면 위와 같은 메세지를 볼 수 있다. CD-Rom 단어를 보고 HD가 HDD(Hard Disk Drive)를 의미한다 [ 정적 분석] Ok 단어가 나와야 한다. JE라고 되어있는 부분을 JMP로 바꿔준다. JE는 Equal 부분이기 때문에 같으면 점프한다. 때문에 점프 명령어인 JMP로 바꾼다. copy to executable을 이용해 저장한다. OK가 나오는 것을 확인할 수 있다. 2020. 9. 15.
[리버싱 핵심 원리] 2장, Hello World! 리버싱 02. Hello World! 리버싱 1. Hello World.exe 1.1 Hello World.exe 1) 소스코드 및 실행 화면 1.2 디버거와 어셈블리 언어 1.2.1. 프로그램 처리 과정 소스코드(.cpp) -> 실행파일(.exe) -> 디버거 유틸리티 -> 어셈블리 언어 1) 실행 파일에 작성된 기계어는 사람이 알아보기 어렵기 때문에 좀 더 편하게 보기 위해서 디버거 유틸리티 사용 2) 디버거에 탑재된 디스 어셈블러 모듈은 이 기계어를 어셈블리 언어로 변역해서 보여줌 2. HelloWorld.exe 디버깅 2.2 OllyDbug 직관적인 인터페이스와 강렬한 확장 기능으로 무장한 Win32 디버거 설치: www.ollydbg.de/ 1) Code Window : 기본적으로 disassembly.. 2020. 9. 14.