2012-03-06 1 views
0

내가 PE에 대한 자습서를 읽고 있었다 섹션 테이블에 점프하고는 섹션 테이블에 하나 SizeOfHeadersImageBase와 + SizeOfHeaders이

하지만 SizeOfHeaders에 ImageBase와를 추가하여

이동을 말한다

입니다

모든 헤더 섹션 + 테이블의 크기

,

그래서 ImageBase에 SizeOfHeaders를 추가하면 테이블이 아닌 섹션으로 이동하게됩니까?

+0

튜토리얼에 오류가있을 수 있습니까? –

답변

1

SizeOfHeaders 실제로는 DOS 스텁을 포함한 전체 헤더의 크기입니다.

섹션 테이블의 주소를 가져 오려면 먼저 선택적인 헤더의 주소를 가져오고 FileHeader.SizeOfOptionalHeader을 추가하십시오.

+0

ImageBase가 주어지면 ImageBase + PE 헤더 (Signature + FileHeader + Optional Header)가됩니다 ... Optional Header의 주소가 주어지면 FileHeader.SizeOfOptionalHeader를 추가해야합니다, 맞습니까? – questions

+0

@questions : correct :) – pezcode

1

SizeOfHeaders은 일부 파일에서 일치 할 수도 있지만 섹션 테이블의 위치를 ​​찾는 데 사용되지 않습니다 (하지만 그렇게 생각하지는 않습니다). 여기

그것이 윈도우 헤더에 어떻게하는지 (및 시스템 로더)입니다 :

#define IMAGE_FIRST_SECTION(ntheader) ((PIMAGE_SECTION_HEADER)  \ 
    ((ULONG_PTR)(ntheader) +           \ 
    FIELD_OFFSET(IMAGE_NT_HEADERS, OptionalHeader) +     \ 
    ((ntheader))->FileHeader.SizeOfOptionalHeader \ 
    )) 

참고 SizeOfOptionalHeader의 실제 값이 선택되지 않았는지, 그것은 매우 크거나 부정적인 것일 수 있습니다 - 일부 악성 코드는 도구를 속일 때 속임수로 사용합니다.

더 자세한 내용은 물론 이상한 트릭을 보려면 here을 참조하십시오.

+0

제공된 링크는 훌륭했습니다 .. 감사합니다. – questions