리버스엔지니어링(역공학)/치트엔진

치트엔진 튜토리얼 5단계 포인터

CodeHS 2019. 1. 31. 20:29

1.포인터


100을 가지고있는 주소가있는데 그 주소를 담고있는 변수가 있다.

하지만 프로그램을 재실행하면 주소를담고있는 변수가 계속바뀌게된다.

그러므로 프로그램을 재실행하더라도 유지를 할 수있게할려면 포인터를 구해야한다.

여기서 포인터란 가르키는 것이다. 즉 주소를 가르키는것인데 치트엔진에서 포인터를 구하면 그주소안의 값도

수정이가능하다 이번글에서는 포인터를 직접 찾아 볼 것이다.


일단 진값을 찾아서 테이블에 가져온다.


그리고 이 주소가 어디에 사용되는지 확인을 하기위해서 find out what writes to this address를 누른다.


그후 체인지 벨류를 누르게되면 값이 하나가 뜨는데 mov [edx],eax

eax의 값을 edx로 대입하라는것이다.

두번째 빨간색네모를 보면 edx값이 나와있다 이것을 담고있는 주소가 하나 더 있다고 보면된다.

그러므로 이주소를 스캔한다.


스캔창으로 가서 4바이트 HEX를 체크한다. 일반적으로 컴퓨터에서 메모리를 표현할때 16진수를 사용하게된다.

그러므로 HEX를 체크하고 EDX의 값을 안에 써넣고 스캔을 해준다 하면 값이 하나가 나오는게 저게 포인터이다.

즉 4번을 보면 001D7E40에서 00601630으로 화살표 표시해놓은걸 볼수 있다 이것은 001D7E40을 00601630이 담고있다는 뜻이다. 그러므로 00601630을 포인터로 추가하게되면 주소가 바뀌더라도 포인터주소를 찾으면 값을 수정할수있다. 즉 재부팅을 하더라도 값을 다시구하지 않아도 포인터 변수의 어드레스만 알고있으면 된다는 말이다.


1번 부분의 버튼을 눌러서 포인터를 추가해보자. 2번 포인터 체크박스를 체크한 후 3번안에 주소를 담고있는 포인터변수의 주소를 써넣는다 그후 OK를 누르면 포인터 변수가 추가된다.


이제 추가된 포인터 변수를 5000으로 바꾸고 체크를 하면 위에 값도 같이바뀐걸 확인할수있다. 체인지 포인터를 눌러서 주소를 바꿔보자 그러면 주소가바뀌어도 값이 변하지않으므로 넥스트 버튼이 활성화될것이다.

다음글에서는 6단계를 다뤄보도록하겠다.