피카츄 리버싱 3부...

2017. 6. 5. 15:550x02 Reverse Engineer/0x03. Etc

728x90

Day 2


이번에 해볼 작업은 피카츄 배구의 속력을 조절하는 작업을 진행하려고 한다.



1) 바이너리 실행 후 어느 곳에 브레이크 포인트를 걸어야 하는지 파악 


 



2) All intermodular calls를 통해 살펴보니 다음과 같은 API함수 발견


 



3) GetMenu 원형 


 


4) GetMenu 전부 BP 작업 진행 


 


5) GetMenu BP 건 후 게임 실행하고 해당 메뉴 클릭 


 

주소 004017AA에서 프로세스가 Pause상태 진입하게 되었다.



6) 구체적으로 분석하기 위해 해당 함수 종료 후 리턴되는 다른 함수의 주소를 알아보았다. 


주소 40156D로 리턴되는 것을 확인하였다. 


7) 주소 40156D BP


 


004017A0 함수 호출 하는 부분이 노출되어 있다.



8) 의심 되는 값 발견 


 


9) 다른 버튼을 눌러봄 (속도 보통)


 


10) 0x28 값을 [esi+0x50]에 대입하는 것을 확인 


 


11) 다른 버튼을 눌러봄 (속도 빠름)


 



속도에 따라 16진수의 값이 바뀌는 것이 확실해 졌음. 

간단하게 0x21값을 더 낮춰서 테스트 해보았다.


 


단순하게 16진수 값을 바꾸는 것만으로 패치가 되지만, 조금 더 깊게 알아보고 싶어졌다. 


함수를 들여다 보다가 시간관련 API함수를 찾아내었다. 

속도는 시간에 좌우될 것이라는 판단이 들어서 분석에 들어갔다.


우선 SetTimer는 별 반응 없었다. 

구글링을 해보니, 시스템 타이머 설치 함수였다.


다른 함수를 찾아보기로 하였다.


 찾아본 함수는 timeGetTime함수 이다.


윈도우(운영체제)가 시작되어서 지금까지 흐른 시간을 1/1000 초 (milliseconds) 단위로 DWORD형을 리턴하는 함수다.


연관이 있을 것 같다.



이 루틴을 보게 되면 게임이 진행, 중단 되는 원리를 알 수 있다.

그리고, esi+0x54에는 timeGetTime 리턴 값이 들어 있다. 


속도가 더 빨라지려면 esi+0x50의 값이 작아지면 된다.




'0x02 Reverse Engineer > 0x03. Etc' 카테고리의 다른 글

피카츄 리버싱 5부...  (0) 2017.06.05
피카츄 리버싱 4부...  (0) 2017.06.05
피카츄 리버싱 2부...  (0) 2017.06.05
피카츄 리버싱 1부...  (4) 2017.06.04
KISA 1번 리버싱 문제  (0) 2017.05.31