티스토리 뷰

반응형
재배치의 핵심은 ImageBase 기준으로 하드코딩된 포인트를 찾는 것!!

 

무슨말이냐 ?

ImageBase가 0x400000 이라고 하면 코드내에서 "Call [ 0x401200 ]" 와 같이 0x400000를 사용된 부분을 하드코딩되었다고 표현한다. 이러한 부분들을 Relocation 되었을 때 새로 바뀐 ImageBase로 수정해주는 작업을 거쳐야한다. 때문에 재배치의 핵심은 이런 하드코딩된 포인트를 찾는 것이라 할 수 있다.

 

PE File Format에는 이러한 포인트들이 기록된 Table이 존재한다.

 

위 사진에서 보이는 IMAGE_BASE_RELOCATION이 해당 Table이다.

 

해당 테이블의 Offset 및 Size는 Optional Header의 BASE_RELOCATION Table을 통해 찾을 수 있다.

 

 

 

[ IMAGE_BASE_RELOCATION ]

 RVA of Block은 해당 블록의 Offset이고, Size of Block은 말 그대로 Size이다.

 

 이 때 아래에 차례대로나오는 항목이 하드코딩된 목록들인데 예를들어 300B라고 하면,

 3은 Type이고 나머지 3자리가 Offset이다. 때문에 하나의 블록에는 최대 1000개 까지가 들어가고,

 그 이상이 될 경우 추가적으로 블록을 추가해야한다.

 

 RVA of Block = 1000 이고 300B 라면, RVA 100B에 하드코딩된 주소가 존재한다는 뜻이다.

 아 참고로 Type 3은 x32 에서 일반적으로 사용하는 것이라고 하니 신경쓰지 않아도 된다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함