티스토리 뷰
반응형
재배치의 핵심은 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 에서 일반적으로 사용하는 것이라고 하니 신경쓰지 않아도 된다.
반응형
'Reversing > Concept' 카테고리의 다른 글
[Reversing] Detours을 이용한 Windows API 후킹 (0) | 2020.02.27 |
---|---|
[Reversing] UPackPE ( Feat. 나뭇잎 ) (0) | 2020.01.14 |
[Reversing] PE File Format 2 ( Feat. 나뭇잎 ) (0) | 2020.01.14 |
[Reversing] RVA → RAW ( Feat. 나뭇잎 ) (0) | 2020.01.14 |
[Reversing] PE File Format 1 ( Feat. 나뭇잎 ) (0) | 2020.01.14 |