반응형

※ 참고: 포인터 스캐너 사용법

 

Cheat Engine으로 간단하게 Pointer를 찾을 수 있다.

 

Cheat Engine에서 Tutorial 프로세스를 열어 준다. Value를 변경해 가며 정확한 Address를 찾는다.

 

찾은 Address에서 오른쪽 클릭 하고 'Find out what accesses this address'를 클릭한다.

 

Cheat Engine에 debugger를 붙여 준다.

 

 

아래와 같은 창이 뜬다.

 

Tutorial로 돌아가 Change value 버튼을 클릭해 값을 변경 하면 018F3D30 주소에 접근한 opcode들이 표시 된다. 그 중 두 번째 opcode가 018F3D30 위치의 값을 바꾼다는 것을 알 수 있다. (아래 창에서 << 표시된 opcode) More information을 클릭하면 약간의 추가 정보가 표시 된다.

 

Cheat Engine에서 value가 저장된 Address인 018F3D30을 다시 Hex scan 한다.

 

018F3D30이 저장된 Address가 Pointer의 Address 이다. Add Address Manually 버튼을 클릭한다.

 

 

Pointer를 체크한다.

 

Pointer의 Address를 입력한다. offset 값은 없으므로 0으로 둔다.

 

Value가 저장된 위치를 가리키는 Pointer가 추가 된다.

 

Value를 5000으로 수정하고 Active를 체크한다. (Value가 5000으로 고정 된다)

 

 

Tutorial에서 Change value 버튼을 클릭하면 Value가 바뀌지만 메모리 상에서는 다시 5000으로 돌아간다. Change pointer 버튼을 클릭하면 Pointer가 가리키는 주소(Value 값이 저장된 주소)가 바뀌고 Cheat Engine 에서 찾아 놓은 Pointer 가 가리키는 주소값도 똑같이 바뀐다. Next 버튼이 활성화 되고 Pointer를 찾았음을 확인 할 수 있다.

 

 

이번에는 아래와 같은 코드로 프로그램을 만들어서 정확히 확인해 보자. 

 

Pointer.exe
다운로드

 

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
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
int main()
{
    int* p = new int;
    *= 100;
    int choice;
 
    cout << "Value(*p): " << *<< endl;
    cout << "Pointer value(p): " << p << endl << endl;
    cout << "1: Change value\n2: Change pointer value\nChoose: ";
 
    while (cin >> choice)
    {
        switch (choice)
        {
        case 1:
            (*p)++;
            cout << endl << "Value(*p): " << *<< endl;
            cout << "Pointer value(p): " << p << endl << endl;
            break;
        case 2:
            p = new int;
            *= 100;
            cout << endl << "Value(*p): " << *<< endl;
            cout << "Pointer value(p): " << p << endl << endl;
            break;
 
        default:
            break;
        }
 
        cout << "1: Change value\n2: Change pointer value\nChoose: ";
    }
 
    delete p;
 
    return 0;
}
cs

 

프로그램을 실행 시키면 포인터에 저장된 주소(p)와 그 주소에 저장된 값(*p)이 표시 된다.

아래와 같이 1을 선택하면 값을 1 증가 시키고 2를 선택하면 포인터에 저장된 주소를 다시 할당 한다.

 

프로그램을 다시 실행하고 Cheat Engine으로 Value를 변경해 가며 주소를 찾는다.

 

 

 

프로그램에서 주소값을 표시해 주므로 Cheat Engine에서 찾은 주소가 맞는지 쉽게 확인 된다.

마찬가지로 Find out what accesses this address 로 어떤 코드가 이 주소에 접근하는지 확인해 보자.

 

 

More informatioin의 내용도 확인해 보자.

 

Value의 주소값을 Hex Scan으로 검색한다. 아래와 같이 두 개의 주소가 확인 되었다.

 

 

프로그램에서 2번을 선택해 Pointer가 가리키는 주소를 변경해 보자.

 

00F3F764에 저장된 값이 프로그램과 동일하게 변경되는걸 확인 할 수 있다. 00F3F764가 포인터의 주소이다.

 

Add Address Manually로 Pointer를 추가해 준다.

 

 

 

프로그램에서 Value와 Pointer value를 변경하면 Cheat Engine에 찾아 놓은 포인터에도 똑같이 적용되는걸 확인 할 수 있다.

 

 

 

반응형

'Reverse Engineering' 카테고리의 다른 글

x64dbg 패치한 파일 저장하기  (0) 2019.03.05
x64dbg Color Scheme 바꾸기  (0) 2019.02.19
Back to user mode  (4) 2019.02.10
Windows 10에서 *.hlp 파일 열기  (10) 2019.02.05
IDA Pro Skin 바꾸기  (1) 2019.02.04
Posted by J-sean
: