본문 바로가기

아이티 :D/Reversing

RVA to RAW

PE 분석글을 쓰기에 앞서 RVA, RAW, VA에 대해서 포스팅을 하겠습니다.


컴퓨터는 한가지의 작업만 하는게 아니기에 메모리나 디스크의 주소공간들은 연속해서 사용되어지지 않습니다.

때문에 사용가능한 주소공간들이 비연속적 (띄엄 띄엄) 존재하게 됩니다. 

그래서 가상공간에 메모리를 만들어서 (32비트 환경에서는 4G의 크기를 가집니다) 거기서 연속된 주소공간을 

재구성합니다.


1.  VA (Virtual Address)

가상메모리상에서 연속된 주소공간을 가르킵니다.

RVA + Imagebase 공식으로 구할 수 있습니다. 

     - Imagebase 값 (400000)

     - RVA 값 (1000)

    


    - RVA + Imagebase = VA 값 (401000)




2. RVA (Relative Virtual Address)

가상메모리에 로드된 파일에서의 상대적인 가상 주소값을 의미합니다.

물리메모리 => 가상공간에 메모리를 할당해서 파일을 로드함 => 가상메모리상의 로드된 파일에서 다시 0x00000000으로 시작하는 가상주소를 사용함

혹시 이해가 되실까요? .....ㅠㅠ 



3. RAW

물리적인 장치속의 파일에서 주소값을 가르킵니다.

RVA - VA + Point to raw data 가 구하는 공식입니다.

위 공식에서 VA + Point to raw data 는 section header속의 값입니다.

USER32.dll의 RAW값을 구해보겠습니다.


- RVA 값 (342EA)

- VA, Point to rawdata 값 (각 2d000)

해당 파일에서는 VA와 Point to raw data 값이 동일하네요.

그리고 위 RVA값이 342EA인데, 해당값은 rdata 섹션내에 속하기 떄문에 rdata섹션에서 

VA와 Point to raw data를 구했습니다.


- RVA - VA + Point to raw data = RAW 값 (342EA)

해당 주소값에 USER32.dll이 존재하는걸 확인 할 수 있습니다.





4. PE파일의 Optional header 내에 Address of entry point 값은 무엇을 의미할까?

entry point 의 RVA값을 의미합니다.



5. 그렇다면 VA의 entry point를 구하려면?

Address of entrypoint + Imagebase가 구하는 공식입니다.

- Address of enrtypoint (28dca) + Imagebase (400000) = VA entrypoint(428dca)

 - immunity debugger로 확인한 entry point값 


마무리

PE 상세분석중에 제가 개념들이 헷갈려서 정리를 하는 목적이 큽니다.

PE분석기를 python으로 제작하고 있는데 상세분석하는 과정을 포스팅 할 예정입니다

순서를 보면 PE 상세분석중에 현재 포스팅이 올라왔어야 하는건데 ㅎㅎ

부족한 포스팅 읽어주셔서 매우매우 감사합니다 ! :)








'아이티 :D > Reversing' 카테고리의 다른 글

PE format 상세분석  (3) 2016.11.02