ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2022/03/16][짤막한 이야기 - 다이나믹 베이스]
    짤막한 이야기 2022. 3. 16. 08:18
    728x90
    반응형

    [2022/03/16][짤막한 이야기 - 다이나믹 베이스]
    다이나믹 베이스(Dynamic Base) 또한 Windows의 EXE 파일(= 소프트웨어)이라면 반드시 가지고 있는 속성이다.
    이는 앞선 포스트에서의 이미지베이스(ImageBase)에 적용되는 개념으로 볼 수 있으며, 이 이미지베이스를 “프로그램 실행 시마다 매번 다르게 부여”하는 특징이 있다.
    즉, 이미지베이스 값이 0x400000으로 되어있어도 실행할 때 반드시 0x400000이라는 보장이 없는 것이다.
    아래 디버거에서의 스크린샷을 보면 주소가 0xD22886으로 되어있으며, 이는 이미지베이스가 0x400000이지만 다이나믹 베이스가 적용되어 있어서 실제 적재된 이미지의 시작위치가 0x400000이 아닌 0xD10000으로 변경된 경우이다.
    ASLR(Address Space Layout Randomization)이라는 보호 기술을 한번이라도 들어본 적이 있다면, 이 다이나믹 베이스가 무엇인지 쉽게 파악할 수 있을 것이다.
    ASLR이 전 시스템 차원에서 적용되는 메모리 영역의 위치 랜덤화라면 다이나믹 베이스는 단일 프로그램 차원에서 적용되는 메모리 영역의 위치 랜덤화라고 보면 되는 것이다.
    그리고 이는 패킹과 언패킹에서 매우 중요한 역할을 한다.
    기존의 언패킹 툴 중 일부는 다이나믹 베이스가 적용되어 있을 경우 올바르게 언패킹을 수행하지 못한다.
    왜냐하면 언패킹이라는 행위 자체가 프로그램을 실행(즉, 이미지를 메모리에 적재)한 상태에서 언패킹이 완료된 원본 코드와 원본 데이터를 가져오는 방식인데,
    다이나믹 베이스가 적용된 경우에는 언패킹을 시도하는 시점에서의 적재 시작위치와 언패킹 완료된 후 다시 실행하였을 때의 적재 시작위치가 달라서 올바른 메모리 영역을 참조하지 못한다.
    위 그림을 예로 들면, 언패킹을 시도하는 시점에서는 0xF40000을 시작위치로 적재하여 언패킹을 시도하였으나, 언패킹이 완료된 후에는 0xD10000을 시작위치로 적재하여 언패킹된 프로그램을 실행하려고 하였기 때문에 “cmp dword ptr ds:[0xF5702C], 0xBB40E64E”의 명령어에서 에러가 나게 된다.
    이 경우, 언패킹 대상 프로그램의 다이나믹 베이스를 해제한 후 언패킹을 수행하거나, 위 명령어를 “cmp dword ptr ds:[0xD2702C], 0xBB40E64E”로 수정하여 에러를 회피할 수 있다.
    물론, 메모리를 참조하여 연산을 수행하는 경우의 모든 명령어를 수정(“mov eax dword ptr ds:[0xF5702C]”도 수정해야함)하여야하기 때문에 매우 귀찮은 일이 아닐 수 없다.
    [관련된 짤막한 이야기 - 파일과 프로세스(=이미지)[2022/03/02]]
    [관련된 짤막한 이야기 - 이미지베이스[2022/03/15]]
    [관련된 문서 - 핀툴 프로그래밍 기본서[제3부. 핀툴로 UPX 언패킹하기]]
    #이야기 #루니프 #핀 #핀툴 #이미지베이스 #시작주소 #다이나믹베이스 #ASLR #패킹 #언패킹 #UPX #압축 #패킹된코드 #원본오브젝트 #해커 #개발자 #분석가 #코딩

    728x90
    반응형
Designed by Tistory.