ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2022/02/28][짤막한 이야기 - 주소 체계]
    짤막한 이야기 2022. 2. 28. 13:04
    728x90
    반응형

    [2022/02/28][짤막한 이야기 - 주소 체계]
    주소 체계는 프로그램을 분석함에 있어서 매우 중요한 개념 중 하나이다.
    주소 체계라는 것이 별도로 존재하는 이유는 프로그램이 “파일”일 때의 상태와 “프로세스”일 때의 상태가 조금 다르기 때문이다.
    흔히들 설명하는 예시로는 파일은 접힌 우산, 프로세스는 펼쳐진 우산에 비유된다.
    파일은 하드디스크에 저장되어 있는 상태의 오브젝트를 의미하며, 말 그대로 EXE와 같은 실행파일을 더블클릭하여 실행하기 전의 상태를 의미한다.
    반면 프로세스는 파일을 실행하여 메모리에 적재한 상태를 의미하며, 이는 파일과 확실하게 대비되는 개념이다.
    (요즘은 사용할 수 있는 더 좋은 Viewer가 많지만) PEView의 경우 주소 체계를 명확하게 구별하여 4가지 상태로 보여준다.
    좌측상단에서부터 설명하자면 pFile은 파일 상태에서의 주소이다. 파일 상태에서 특정한 바이트(그림의 6A006800)가 0x600의 위치에 있음을 보여준다.
    pView는 특정 파일의 시작을 0으로 보는 것이 아니라 해당 파일의 현재 섹션 시작위치를 0으로 보고 주소를 계산하는 것이다. 실제로는 역공학에서 잘 사용되지 않는다.
    VA(Virtual Address)는 가상주소로써 프로세스 상태에서의 주소이다. 파일상태에서는 0x600의 위치에 존재하던 바이트열이 프로그램 실행 후에는 0x401000의 위치에 존재한다는 의미이다.
    RVA(Relative VA)는 상대적 가상주소로써 프로세스 상태에서의 주소이다. VA와 값이 같지 않은 이유는 상대적이라는 단어에 포함되어있다.
    파일 상태에서는 주소체계를 항상 자기자신(파일 그 자체)을 0(기준)으로 하여 주소를 계산한다.
    그런데 프로세스 상태에서는 주소체계를 항상 자기자신이 적재되는 위치(이 프로그램을 실행할 경우, 메모리상에서 어느 위치에 적재되는지를 결정하는 값을 이미지베이스[ImageBase]라고 한다.)에서 계산한다.
    즉, 프로세스 상태에서는 0x400000이라는 위치에 이 프로세스의 첫 시작점이 적재되는 것이다. VA는 이러한 이미지베이스를 포함한 값이다.
    RVA는 프로세스가 메모리의 어느 위치에 적재되는지 고려하지 않고 자기자신(프로세스 그 자체)을 0(기준)으로 하여 주소를 계산한다.
    따라서 VA = RVA + ImageBase라는 식이 성립하게 되며, 위 그림에서의 ImageBase는 0x400000, RVA는 0x1000이 된다.
    VA와 pFile간의 주소체계도 변환식이 존재하는데, 이를 이해하기 위해서는 먼저 다음에 소개하고자 하는 섹션의 주소 체계를 먼저 이해하여야 한다.
    [관련된 짤막한 이야기 - 섹션[2021/10/01]]
    [관련된 문서 - 핀툴 프로그래밍 기본서[제3부. 핀툴로 UPX 언패킹하기]]
    #이야기 #루니프 #핀 #핀툴 #패킹 #언패킹 #IAT #주소체계 #파일 #메모리

    728x90
    반응형
Designed by Tistory.