2017. 6. 5. 15:55ㆍ0x02 Reverse Engineer/0x03. Etc
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 |