미친해커

[Cheat Engine] Cheat Engine Tutorial Step 5 본문

Cheat Engine Tutorial

[Cheat Engine] Cheat Engine Tutorial Step 5

미친해커 2021. 7. 22. 03:00
반응형

Step 5 문제는 문제 모양 자체는 Step 2와 비슷하지만 풀이법은 전혀 다르다. Step 5의 클리어 방법은 저번 문제들처럼 특정 값으로 변경시키는것이 아니라 Change value를 눌렀을 때 값이 변경되지 않도록 하는것이다. 우선 저 100 값부터 한번 찾아보자

 

지금까지 값을 찾는 방법은 많이 설명했으니 이제부터는 생략한다. 이렇게 값을 찾았으면 클리어 조건이 '값이 변경되지 않아야 한다.' 였다. 그렇다면 이 프로그램의 어디서 저 값이 변경되는지를 찾아야 한다. 치트엔진에는 저 값이 어디에서 변경되는지 찾아주는 기능이 존재한다. 그 기능을 이용하면 쉽게 찾을 수 있다.

 

위 그림과 같이 찾은 값을 리스트에 저장하고 리스트에 저장되어 있는 값에 마우스 우클릭을 한다. 그럼 옵션이 나오게 되는데 옵션중에 Find out what writes to this address 라고 하는 기능을 선택하고 저렇게 창이 하나가 나온다면 Yes를 눌러준다. 그러면 창 하나가 뜨는것을 확인 할 수 있다. 그리고 Change value 버튼을 눌러주자

 

위 그림처럼 The following opcodes write to ... 에 하나가 무언가 로그가 남은걸 확인 할 수 있다. 저게 바로 우리 Change value 버튼을 눌렀을 때 값이 바뀌게 되는데 그때 저 값을 바꾸기 위해서는 반드시 저 값에 접근하여 새 값을 써야만한다. 그때 어디서 저 값에 새로운 정보를 썼는지를 잡아준거다.

 

나온 Instruction(인스트럭션)을 클릭하고 Show disassembler를 클릭한다. 그러면 Memory Viewer가 열리면서 해당 값을 수정하는 어셈블리를 가르켜준다. Change value 버튼을 눌렀을 때 값을 바꿔주는 어셈블리는 Tutorial-x86_64.exe+2C5B8에 mov [rax], edx 이다. 지금은 어셈블리를 배우지 않아도 되니 설명은 생락한다. 아무튼 이 mov [rax], edx 어셈블리가 값을 수정하게 된다. 그러면 이 어셈블리가 아무것도 동작하지 않도록 변경해주면 클리어다.

 

변경하고 싶은 인스트럭션을 마우스 우클릭하고 Replace with code that does nothing을 클릭한다. 그리고 OK를 눌러준다, 그러면 기존에 어셈블리가 있던 자리가 nop으로 바뀐것을 확인할 수 있다. nop 어셈블리는 아무것도 하지않고 그대로 통과하는 어셈블리이다. 그러므로 지금 값을 바꿔주는 어셈블리는 nop으로 바뀌어 Change value를 눌러도 값이 바뀌지 않게 될것이다.

 

nop으로 패치한 후 Change value를 눌러주면 Next 버튼이 활성화 되는것을 확인 할 수 있으면서 클리어가 된다. 이번 문제의 핵심은 동작하고 싶지 않은 코드를 nop로 바꿔 아무런 행동도 하지 않도록 만드는 것이다.

반응형
Comments