본문 바로가기

Reverse Engineering

올리디버거(OllyDBG)를 이용한 KeyFile 체크 문제 풀이와 바이너리 수정

KeyFile : 인증을 위해서 시리얼키를 원하는 것과 비슷하게 키값을 파일에 저장하거나 어떤 파일 이름이 같은 위치에 있는 것을 확인하는 인증을 할 때 사용되는 파일을 의미한다.

파일과 관련된 문제에서는 파일이나 레지스트리 사용하는 것을 확인하기 위해서 모니터링툴을 사용하는데, Filemon을 주로 사용할 것이다.
         
                                       (Filemon 사용법 참고 : http://dakuo.tistory.com/22)


CrackMe 15 문제를 풀어보도록 하겠다.
다운로드 하여 Project1.exe을 실행해보면


올리디버거로 열어서 스트링에 참고할 만한 내용이 있는지 찾아본다.
스트링 추출을 하고 살펴보면 solved라는 문자열을 보인다.


이상한 점은 File Monitor라고 해서 Sysinternals 홈페이지 표시되어 있다는 것이다.
아마도 문제 제작자가 파일을 모니터링 해보라고 힌트를 준것 같다. 프로그램을 실행해 놓고 Filemon을 실행해보도록 하겠다.


Filemon을 실행하고 문제 파일의 이벤트만 볼수 있게 Incude에 Project1.exe를 넣고 OK 버튼을 누른다.


Filemon을 켜놓은 상태에서 문제 파일을 실행하면 화면과 같은 이벤트를 볼 수 있다.
C:\challneges-crackme15\kernel32.dll을 찾고 있다. 따라서 해당 위치에 kernel32.dll이라는 이름으로 파일을 만들어둔다. 파일을 만들어도 문제 파일에서는 A 문자열만 나타난다.

올리디버거를 열어서 solved 위치 근처를 분석해보면


mov 명령으로 solved 문자열을 넣고 뭔가 call을 하는 것을 알수 있다.
이 명령이 시작되는 부분을 보면 분기점이 존재하고, 이 분기점의 점프 위치는 solved의 다음 위치이다.

00442514  |. /E9 8E000000   JMP Project1.004425A7

여기서 분기를 못하도록 JMP 구문을 NOP 처리한다.

JMP 구문이 작동하지 않고 다음 명령들이 진행되는데, 그 후에 점프 구문을 또 만나게 된다.

00442574  |. /74 51         |JE SHORT Project1.004425C7

이 부분을 한번 더 NOP 처리해주면 문제는 해결되었다고 표시된다.




또 다른 풀이로는 처음 점프 구문을 solved 문자열이 mov되는 곳으로 바로 이동시켜도 같은 결과를 낼 수 있다.

00442514     /EB 7A         JMP SHORT Project1.00442590

이번에는 어셈코드를 직접 수정하지 않고 hex dump 창에서 바이너리를 직접 수정하는 방법을 설명하겠다. 일단 Ctrl+F2를 눌러 문제 파일을 재시작하고 두 번째 풀이 위치인 00442514로 이동(Ctrl+G)을 한다.

00442514     /E9 8E000000   JMP Project1.004425A7

현재 이렇게 되어있는 것을 다음처럼 변경하려고 한다.

00442514     /EB 7A         JMP SHORT Project1.00442590
00442516     |90            NOP
00442517     |90            NOP
00442518     |90            NOP

스페이스바를 눌러서 어셈코드 수정 창에서 바꿔주어도 되지만, hex dump 부분의 바이너리 를 수정해보겠다.

(참고 : 어셈블리어를 수정하고 그것을 취소하려고 할 때는 수정된 라인에 커서를 둔 상태에서 Alt+BackSpace를 누르면 된다)


기존에 있는 값은 E9 8E 00 00 00 이고, 수정해야 하는 값은 EB 7A 90 90 90 이다.
블록을 씌운 다음에 우클릭 메뉴에서 Binary -> Edit 를 선택한다.


바이너리를 수정해준다.


저장한 파일을 실행해보면 문제 풀이가 완료됨을 알 수 있다.



이와 같은 리버싱 과정들을 보면 간단한 인증 절차는 점프문 한 개 수정하는 것으로도 우회가 가능하다.