처음부터 차근차근

Crack(지뢰게임, music player 리버싱) 본문

정보보안

Crack(지뢰게임, music player 리버싱)

_soyoung 2022. 4. 10. 12:56
반응형

지뢰찾기 게임 crack 제작

지뢰찾기 게임의 초 부분을 1초에 한 번 --> 0.1초에 한 번 씩 늘어나게 시간을 조작하여 crack 파일을 만든다.

 

1. 지뢰게임 파일을 Ollydbg에서 열고 command 찾기

Search for -> command해서 'bpx SetTimer' command를 찾는다.

 

2. 그 윗 부분에 PUSH 3EB라는 명령문을 찾기

3EB(16진수)를 10진수로 바꾸면 1000이다.

1초는 1000ms이므로 3EB는 1초를 나타낸다.

그러므로 PUSH 3EB '1초에 한 번 증가'하라는 명령문인 것을 알 수 있다.

 

3. PUSH 3EB --> PUSH 64

0.1초 = 100ms

100을 16진수로 변경하면 64이다.

0.1초에 한 번씩 증가하게 변경하기 위해서 PUSH 3EB 명령어를 PUSH 64로 변경한다.

 

이렇게 하면 지뢰게임의 타이머가 0.1초에 한 번씩 빠르게 증가하는 것을 볼 수 있다.

 

 

Music Player 실습

제한 시간 우회 리버싱

Music Player은 위와 같이 1분 미리듣기만 가능해서 1분이 지나버리면 경고창이 뜨면서 노래가 정지된다.

이 제한시간을 우회하여 2분이 될 때까지 멈추지 않고 계속 노래가 재생되게 만든다.

 

1. Music Player 파일을 Ollydbg에서 열고, 명령어 찾기

Search for -> All constants(명령어 찾기) 한 다음 EA60을 입력해서 'CMP EAX, 0EA6' 명령어를 찾는다.

1분 = 60초 = 60000ms 

60000을 16진수로 변환하면 EA6이 나온다.

그러므로 CMP EAX, 0EA6 명령어는 EAX와 1분을 비교하라는 명령어로, 노래가 1분이 되었는지 확인하는 명령어임을 알 수 있다.

 

2. CMP EAX, 0EA6 --> CMP EAX, 1D4C0

2분 = 2 * 60초 = 120초 = 12000ms

12000을 16진수로 바꾸면 1D4C0이 나온다.

그래서 1분이랑 비교하게 하지않고 2분이랑 비교하게 하기 위해 0EA6 부분을 1D4C0로 변경한다.

 

이렇게 하면 1분이 지나도 노래가 계속 재생되며 2분이 지났을 때야 비로소 멈추는 것을 볼 수 있다.

 

 

오류메세지 우회 리버싱

위의 실습으로 1분 미리듣기 --> 2분 미리듣기로 변경을 했지만 1분이 지나면 위와 같은 오류메세지가 뜨게된다.

이 오류메세지를 우회하여 뜨지 않게 하는 실습이다.

 

1. 위에서 만든 프로그램 올리디버거에서 열고, 명령어 찾기

Search for -> All constants 한 다음 0BC를 입력하고 enter한다.

 

2. JGE SHORT ~ 명령어 찾기

0BC를 입력하고 enter하고 나면 그 아래에 오류 메세지 박스를 호출하는 명령어가 있다.

 

3. JGE SHORT 004046BF --> JMP SHORT 004046BF

JGE를 JMP 명령어로 바꿔서 바로 004046BF 주소로 점프하게 하여 오류 메세지를 호출하지 않게 한다.

 

이렇게 하면 1분이 지나도 오류 메세지가 뜨지 않는 것을 볼 수 있다.

 

 

제한 시간 문자열 패치

미리듣기가 끝나면 원래는 00:00으로 문자열이 다시 변하고 '1분 미리듣기까지만 ~' 이렇게 경고창이 뜨는데 이것을 각각 2분으로 변경(문자열 패치)한다.

 

1. 위에서 생성한 파일 올리디버거에서 열고, 텍스트 찾기

Search for -> All referenced test strings 해서 '01:00'을 입력하고, 이 문자열이 있는 곳을 찾아 더블 클릭하여 실제 명령어 줄로 이동한다.

 

 

2. 01:00 문자열이 4029C4에 저장되어 있음을 확인하고 Dump창에다 Ctrl + G(주소찾기) 눌러 4029C4입력하여 주소를 찾는다.

 

 

3. 주소를 찾았으면 두줄 정도 드래그해 블록을 잡고 [Binary]->[Edit] 하여 01:00 --> 02:00으로 변경한다.

주의할점 : 유니코드 칸에서 변경해야하며, 백스페이스는 사용하지 않는다!

 

 

4. 메세지 경고창 주소인 401472로 가서 아래로 스크롤을 내리다 보면 '1분만 미리듣기 가능 ~' 이런 부분이 나오는데 이 부분을 위에서 했던 방식으로 문자열 패치를 한다.

[Binary]->[Edit] 하여 1분 --> 2분으로 변경

 

 

이렇게 하면 경고창과 타이머 부분이 문자열 패치가 되어 각각 2분으로 보이게 된다.

 

 

 

 

출처 : 정보보안(22-1학기)고수정교수 강의 내용 변형 및 요약

반응형

'정보보안' 카테고리의 다른 글

웹해킹- SQL Injection  (2) 2022.04.21
웹 해킹 - 사용자 인증  (0) 2022.04.13
Crack(코드우회)  (0) 2022.03.31
리버싱과 어셈블리어  (0) 2022.03.27
Patch  (0) 2022.03.19
Comments