안 쓰던 블로그
리버싱-PE분석 및 수정 본문
.exe파일을 하나 주는데 실행할 수 없다고 뜬다. 이걸 실행되게 만드는 게 문제
PEview로 파일을 가져오면 모든 아이템을 이쁘게 볼 수 없다는 에러가 뜬다
왜냐면 원래 있어야 할 섹션 부분이 없기 때문이었다
파일마다 섹션은 다 있어야 하고, 보통 .text, .rdata, .data 3개 정도는 있어야 프로그램 코드를 읽을 텐데
이 부분이 없어서 실행이 되지 않고 있었다
섹션이 원래 몇 개였는지 할 수 있는 방법
IMAGE_NT_HEADERS->IMAGE_FILE_HEADER
Number of Sections가 0이라서 섹션이 다 지워져 버린 것
여기까지 0xCE부분 주소를 확인하고 닫은 뒤(동시 실행이 불가함)
해당 부분 수정하기 위해서 HxD에서 열어 준다
HxD를 열었으면 먼저 수정할 곳을 찾아야 한다
참고로 NT header 구조체는 이렇게 3개로 구분된다
typedef struct _IMAGE_NT_HEADERS {
DWORD Signature; // PE Signature : 50450000 ("PE"00)
IMAGE_FILE_HEADER FileHeader;
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
이 중에서 Signature가 PE라는 문자를 나타내며 HEX값으로는 50 45 00 00이다
이 부분부터 NT header 구조체 시작
그 다음부터는 IMAGE_FILE_HEADER 구조체가 시작된다
typedef struct _IMAGE_FILE_HEADER {
WORD Machine;
WORD NumberOfSections;
DWORD TimeDateStamp;
DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
WORD SizeOfOptionalHeader;
WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
Machine: CPU별로 고유한 값을 가짐
NumberOfSections: 이 다음에 나오는 Section들의 개수로 최소 1 이상이어야 한다
SizeOfOptionHeader: IMAGE_FILE_HEADER구조체 중 마지막 구조체 IMAGE_FILE_HEADER32의구조체의 크기
Characteristics: 파일 속성 부분
즉, 이 부분에서 알 수 있는 정보는(리틀엔디안이라 반대로)
Machine: 01 4C (=1A-32호환)
NumberOfSctions: 0
SizeOfOptionalHeader: 00 E0
Characteristics: 01 0F
섹션이 하나도 없으면 안 된다고 했으니 저 부분을 바꿔주는데
보통 3개씩 있으니까 3으로 수정 후 저장
실행시켜보면 계산기가 잘 나온다
참고글
indosm.tistory.com/entry/PE-%EA%B5%AC%EC%A1%B0-%EC%A0%95%EB%A6%AC1
'CTF > Reversing' 카테고리의 다른 글
리버싱-분기문 우회 (0) | 2020.08.26 |
---|---|
리버싱-실행 프로그램 변경 (0) | 2020.08.26 |
리버싱-문자열 탐색 (0) | 2020.08.26 |
레지스터와 PE구조 (0) | 2020.08.26 |
Jump 문제 풀이 (0) | 2016.07.19 |