[Lenas Reversing for Newbies] 08
1. 프로그램 실행
첨부된 setup.exe 파일을 실행시켜 ArtGem.exe를 실행시켜보자.
? 표시 버튼을 눌러 Register 항목을 선택하면 다음과 같이 Key-Code를 이용하여 등록할 수 있다.
아무 값이나 입력해보자.
"Invalid Key!" 문자열이 나타나는 부분을 중점으로 디버깅을 진행해보면 될 것 같다.
2. Debugging(with OllyDbg)
"Invalid Key!" 문자열이 나타나는 부분을 확인해보니 위와 같은 코드들이 보인다. 조금 위에는 "Thank You for Registering!"이라는 문자열이 나타나는 것으로 보아 조건에 따라 다른 문자열을 갖는 MessageBox가 호출되는 듯하다. 가장 근처에 있는 conditional jump를 보니 동그라미 친 부분의 JE SHORT 명령어가 나타난다. 해당 지점에 BP를 설정하고 적중하는지 확인해보면 그러지 않는다. 스크롤을 조금 올려 "Invalid Key!" 문자열 참조 부분까지 점프하는 conditional jump를 찾아보자.
00438578에 BP를 설정하고 register 버튼을 누르면 BP가 적중하는 것을 알 수 있으며, 해당 주소에서는 점프가 일어난다. EAX 레지스터에 0이 세팅되어 있으므로 0이 아닌 값을 담게끔 패치를 해주어야 할 것 같다. 위로 조금 더 스크롤을 올리면 아래와 같은 함수가 있다.
해당 함수 전후로 EAX레지스터 값을 비교해보면 호출 이전에는 입력한 Key-Code 값이, 이후에는 0이 세팅되는 것을 확인할 수 있다. F7(Step in)을 하여 함수 내부로 들어가보자.
함수 자체의 코드는 길지만 conditional jump를 위주로 분석을 해보자. F8을 눌러 코드를 하나씩 실행하다 보면 00434C2C의 JNZ 명령에 의해 점프를 하게 된다.
위와 같이 함수 끝 지점에 도달하고 XOR EAX, EAX를 통해 0으로 세팅해준 뒤 RETN 하게 된다. 이때, XOR EAX, EAX가 없다면 EAX 레지스터에는 0이 아닌 값이 들어 있게 되므로 해당 부분을 NOP으로 바꿔보자.
F9를 눌러 실행해보자.
위와 같이 등록에 성공했다는 메시지 박스가 출력된다. 프로그램 창에서 About을 들어가 보면 마찬가지로 크랙이 이뤄져 등록된 것처럼 인식한 것을 확인할 수 있다.
마지막으로 copy to executable을 통해 파일로 저장하면 크랙 작업이 마무리된다.
3. Comment
Lenas 강의에서는 w32dasm이라는 툴로 이번에 디버깅을 진행하고 패치를 .exe 파일에서 LordPE 툴을 이용하여 수정하는 방법을 진행하였다. 단순히 이번 문제를 해결하는 데는 OllyDbg를 이용하는 것이 더 간편해 보이지만, 정적 분석만으로 문제를 해결하는 경우 w32dasm과 LordPE 조합을 이용하는 것도 괜찮아 보인다.