kj0on

[x32dbg/x64dbg] Heap 메모리 스캔 범위 본문

Tools/Tips

[x32dbg/x64dbg] Heap 메모리 스캔 범위

kj0on 2025. 6. 23. 17:22
목차 접기

1. x32 힙 메모리 스캔 범위

[이미지1] __vbaStrVarMove 호출 후 레지스터

Visual Basic __vbaStrVarMove함수 호출 후 0x00669A34를 반환한다. 해당 주소는 동적 할당된 변수의 주소다.

 

[이미지2] 덤프 참조

해당 주소로 이동을 하면 잘못 된 메모리 주소라고 나온다.

 

[이미지3] 메모리 맵

이유는 메모리 맵에서 Heap영역을 보면 알 수 있다. 주소는 0x00640000이고, 사이즈는 0x0000B000이다. 표시되는 영역을 보면 0x00640000 ~ 0x0064B000이다. 하지만 위의 0x00669A34는 해당 영역을 벗어난다.

 

[이미지4] 덤프

실제로 덤프에서 해당 위치로 가보면 0x0064B000 부터는 값이 존재하지 않는다.

 

[이미지5] Cheat Engine Memory View

치트엔진에서 Heap영역으로 이동 해 보면 Size가 0x36000으로 나타난다. 따라서 Heap 영역은 0x00640000 ~ 0x00676000이다.

 

[이미지6] Cheat Engine Memory View

해당 위치로 가보면 0x00676000 부터는 값이 존재하지 않는다.

 

[이미지7] EIP

위의 과정 모두 EIP의 위치가 동일하다. x32dbg에서 해당 EIP 까지 이동 후 Cheat Engine을 실행하여 동일한 프로세스를 부착했다. 코드 진행을 하지 않았기 때문에 힙 영역에는 변화가 없다.

 

[이미지8] Cheat Engine Memory View

따라서 치트엔진과 x32dbg에 나타나는 Size의 의미는 "스캔범위"를 뜻하며 이 값은 프로그램 마다 달라진다. x32dbg에서 0x00669A34를 참조하지 못하는 이유는 해당 영역을 스캔하지 않기 때문이다. 반면 치트엔진의 경우 스캔하는 범위가 x32보다 크기 때문에 해당 영역을 참조할 수 있다.

 

[이미지9] EIP (x32dbg Mar 15 2025)

최신 버전의 x32dbg에서는 해당 "스캔범위"가 늘어났다. 동일한 코드 위치에서 메모리 맵을 확인해준다.

 

[이미지10] 메모리 맵 (x32dbg Mar 15 2025)

프로그램 재시작으로 인해 힙영역 사이즈와 위치는 변한다. 사이즈를 확인해 보면 이전 버전 보다 사이즈가 더 커진 것을 확인할 수 있다.

 

[이미지11] 덤프

최신버전에서는 참조가 가능하다.