무민이의 반반무많이

PE 파일 줄이기(Tiny PE) ② 본문

Reversing/Basic

PE 파일 줄이기(Tiny PE) ②

M00min 2016.10.04 19:05

(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)


■ DOS Header와 DOS Stub의 불필요한 부분 확인

1. IMAGE_DOS_HEADER에서 Signature를 나타내는 맨 처음의 4바이트와 Offset to New EXE Header를 나타내는 맨 끝의 8바이트를 제외한 모든 값은 필요가 없다.


2. Signature와 Offset to New EXE Header를 제외한 나머지 영역을 0으로 채운다. (해당 영역을 0으로 채우지 않고 삭제해버리면, 뒷 부분의 주소값이 앞으로 밀리게 되어 정상적인 참조가 불가능하므로 실행과정에서 오류가 발생하게 된다!)


3. MS-DOS Stub Program에서 모든 값은 필요가 없다.


4. 해당 영역의 모든 값을 0으로 채운다.


5. 저장 후 결과를 확인하면, 불필요한 부분의 값을 0으로 바꿔주었기 때문에 크기의 변화는 없고, 프로그램은 정상적으로 실행되는 것을 알 수 있다.


■ data Section을 DOS Header로 옮기기

1. data Section을 확인하면 총 15h의 영역이 존재하는 것을 확인할 수 있다. 해당 영역을 복사한다.


2. IMAGE_DOS_HEADER의 Signature 뒷부분에 붙여넣는다. (정확한 크기만큼 붙여넣어서, IMAGE_DOS_HEADER가 뒤로 밀리지 않도록 주의한다!)


3. data Section이 제대로 옮겨졌는지 확인하기 위해, 기존의 data Section의 값들을 0으로 바꿔준다.


4. data 영역의 위치가 변경되었으므로 해당 영역을 참조하고 있던 부분의 값을 변경해주어야 한다. data Section의 VA를 확인한다. 00403000 부터 시작되는 것을 확인할 수 있다.


5. 변경된 위치의 VA를 확인한다. 00400002 부터 시작하고, 기존의 위치에서 2FFE 만큼 감소한 것을 확인할 수 있다. (00403000 - 00400002)


6. 기존의 위치를 참조하고 있는 부분을 찾는다. 참조하는 부분이 총 2개라는 것을 알 수 있다.


7. 해당 부분의 값에서 2FFE만큼 빼준 값으로 변경한다.


8. 저장 후 결과를 확인하면, 위치를 옮기고, 기존의 값을 0으로 채워주었기 때문에 크기의 변화는 없고, 프로그램은 정상적으로 실행되는 것을 알 수 있다. 이제 기존의 data Section이 비어있기 때문에, 해당 Section을 삭제하여 Section의 갯수를 2개로 줄일 수 있다.


■ data Section 삭제 (Section 갯수 : 3 → 2)

1. 기존에 data Section 위치에 존재하던 값들을 삭제한다.


2. IMAGE_NT_HEADERS의 IMAGE_FILE_HEADER에서 Section의 갯수를 확인한다. 86 위치에 Section의 갯수가 존재하는 것을 확인할 수 있다.


3. 해당 위치로 이동해서 Section의 갯수를 2개로 변경한다.


4. IMAGE_NT_HEADERS의 IMAGE_OPTIONAL_HEADER에서 Size of Image를 확인한다. 기존에 RVA 값이 IMAGE_DOS_HEADER부터 IMAGE_SECTION_HEADER .date까지 1000, SECTION .txt 1000, SECTION .rdata 1000, SECTION .data 1000 총 4000의 크기를 가지고 있었다.


5. data Section을 삭제해서 RVA 크기가 1000이 감소했으므로, Size of Image를 3000으로 변경한다.


6. data Section Header도 필요가 없어졌기 때문에, 값을 0으로 채우기 위해 위치를 확인한다. 000001C8의 위치부터 000001EC위치의 C0000040의 값까지가 data Section Header인 것을 확인할 수 있다.


7. 해당 위치의 값들을 0으로 바꿔준다.


8. 저장 후 구조를 확인하면 data Section이 삭제되어 총 2개의 Section이 존재하는 것을 확인할 수 있다.


9. 결과를 확인하면, 파일의 크기는 기존의 data Section 크기인 15h 만큼 감소한 1,536 바이트이고, 정상적으로 실행되는 것을 알 수 있다.

'Reversing > Basic' 카테고리의 다른 글

PE 파일 줄이기(Tiny PE) ④  (0) 2016.10.13
PE 파일 줄이기(Tiny PE) ③  (0) 2016.10.12
PE 파일 줄이기(Tiny PE) ②  (0) 2016.10.04
PE 파일 줄이기(Tiny PE) ①  (0) 2016.10.03
PE 파일의 구조와 이해 ④  (0) 2016.09.23
PE 파일의 구조와 이해 ③  (0) 2016.09.22
0 Comments
댓글쓰기 폼