| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- Python
- image section header
- 코드엔진
- Dos Stub
- 크랙미
- Image dos header
- 실행파일
- __vectorcall
- 파이썬
- Programmers
- x32
- Reversing
- __fastcall
- Rich Header
- __stdcall
- stack frame
- 32bit
- 프로그래머스
- RVA
- crackme
- CodeEngn
- pe format
- 리치헤더
- 리버싱
- Calling Convention
- rev
- 함수 호출 규약
- x64
- __cdecl
- ABI
- Today
- Total
kj0on
[x32dbg/x64dbg] Heap 메모리 스캔 범위 본문
1. x32 힙 메모리 스캔 범위

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

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

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

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

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

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

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

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

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

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

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