실행 파일에서 .reloc 섹션 제거 하기 전에 .reloc이 뭐하는 섹션이길레 제거를 하는지 알아보겠습니다.
.reloc 섹션은 버퍼오버플로우 같은 메모리주소를 통한 공격을 방지 하기 위해서 적용한 섹션으로
프로그램 로딩시 주소를 매 부팅시 마다 달라지게 하는 섹션입니다.
.reloc 섹션은 로딩시 주소만 바뀌게 하는 섹션이므로 제거 해도 영향을 미치지 않기 때문에 한번 제거 해보도록 하겠습니다.
1단계 .reloc 섹션 헤더 정리

위의 사진을 보시다 시피 .reloc 헤더는 270 옵셋에서 시작해서 297까지
섹션 해더의 크기가 총 28임을 알 수 있습니다.

위에서 확인한 .reloc 섹션 헤더의 시작 부분에서 28만큼 (270~297) 만큼 0으로 덮어 써주세요.
2단계 .reloc 섹션 제거
맨 처음 올라간 사진을 보시면 .reloc 섹션의 시작 옵셋은 C000 입니다.

PEviwer를 통해서 C000 부터 끝까지 지워주세요.
(.reloc 섹션은 끝 부분이라 C000 부터 다 지워도 상관 없습니다.)
3단계 IMAGE_FILE_HEADER 수정
2단계 까지 통해서 .reloc 섹션을 제거 하였으니 IMAGE_FILE_HEADER에 있는 정보인 섹션 헤더 갯수를 하나 빼주어야 합니다.

총 섹션 갯수가 5개이고 그 위치는 0xDE 주소 입니다.

그 주소로 가서 05되어 있는 부분을 04로 바꿔 주세요.
4단계 IMAGE_OPTIONAL_HEADER 수정
.reloc 섹션이 없어 졌으므로 .reloc 섹션 크기 만큼 전체 이미지 크기를 줄어 주셔야 합니다.

전체 섹센의 이미지 크기는 11000으로 나와 있고,그 위치는 128 입니다.
이제 .reloc 섹션의 이미지 크기만 구하면 되는데 그것은 맨 처음 사진을 보면 size of Raw Data라고 적혀 있는 부분이 .reloc 섹션의 이미지 크기 입니다. 1000 이죠

128 위치로 가시면 원래는 00 10 01 00 라고 되어 있는 부분을 00 00 01 00 라고 수정 해주시면
.reloc이 제거가 되는 것입니다.
(ps 참고로 주소가 거꾸로 된것은 당연히 아시겠지만? 리틀 엔디안 표기법 때문입니다.)
공부 한것을 정리 한것이기 때문에 오타나 잘못된 것이 있을 수 있습니다.
그런 것은 댓글로 말해주시면 감사하겠습니다.
'Information Security > Reversing' 카테고리의 다른 글
[Code injection] 지뢰 찾기 핵 만들기 - 바로 승리 (7) | 2022.01.04 |
---|---|
[Code injection] 지뢰 찾기 핵 만들기 - 무적 (1) | 2022.01.03 |
[Code injection] 지뢰 찾기 핵 만들기 - 시간 고정 (4) | 2021.12.31 |
[Code injection] 지뢰 찾기 핵 만들기 - 지뢰 보이기 (0) | 2021.12.30 |
[리버싱 핵심 원리] 실행 압축 및 UPX 툴 설명 (2) | 2021.12.21 |
댓글