이번 포스트에서는 레나 튜토리얼의 Level 13 문제에 대해 다루겠다.
문제를 실행하면 다음과 같다.
## 문제 해석 :
보안 관련 프로그램이다. 등록(Register)하면 되는 것으로 보인다.
## 문제 풀이 :
먼저 Ollydbg를 통해 해당 파일을 열어보겠다.
해당 프로그램에 안티 디버깅 기법이 적용되어 있으므로 먼저 다음과 같이 예외처리를 설정해준다.
해당 프로그램을 실행하여 Register 코드를 아무거나 입력해보면 다음과 같은 에러창이 뜬다.
Ollydbg의 스레드 기능을 통해 다음과 같은 현재 실행 중인 스레드 리스트를 확인할 수 있다.
메인 스레드에 들어가서 커널을 확인해보면 다음과 같이 에러 메시지 박스를 호출하는 부분을 볼 수 있다.
해당 함수를 호출하는 곳으로 가서 확인해보면 다음과 같다.
여기서 BP를 걸고 재실행해보면 스택 영역에 다음과 같은 내용이 담겨있다.
4174B1에서 왔다는 사실을 알 수 있다. 해당 위치에 가서 확인해보면 다음과 같다.
윗부분을 확인하면 우리가 봤던 에러창과 똑같은 내용이 담겨 있다. 또한 아래쪽으로 내리다 보면 "Congratulations!"에 관한 내용이 담겨 있다는 것을 알 수 있다.
좀더 위로 올라가다 보면 위와 같은 JNZ 분기문이 존재한다는 것을 확인할 수 있다. 해당 분기문은 0이 아닌 경우 "Congratulations!" 문구를 출력하는 곳으로 가게 해준다.
그럼 AL값이 0이 아닌 다른 값으로 바꿔야 한다. AL값은 바로 위의 417495의 CALL 명령어에서 정하므로 해당 위치에 BP를 걸고 내부 구조를 조사해보겠다.
CALL 명령어의 내부 구조를 조사하다보면 위와 같이 XOR 명령어를 발견할 수 있다. 이는 AL 값을 0으로 초기화하는 작업이므로 해당 코드를 변조해보겠다.
### 실행 결과 :
프로그램 기능은 잠금해제 되었으나 About 부분을 확인해보면 여전히 아래와 같이 미등록 문구가 뜬다.
Ollydbg의 검색 기능을 활용하여 해당 문구를 찾아보겠다.
위에 찾은 문구의 위치로 가면 아래와 같이 JE 분기문을 발견할 수 있다.
해당 분기문은 0이 아닐 때 인증되었다는 문구를 출력해주므로 AL의 값이 0이 아닌 값으로 변경해야 한다. 그러므로 AL값을 정하는 바로 위의 CALL 명령어에 들어가서 내부조사를 해봐야 한다.
CALL 명령어의 내부의 마지막 부분에 위와 같은 AL 값을 설정하는 코드가 존재한다. 여기서 BL도 0으로 되어 있으므로 해당 코드를 변조해야 한다.
### 실행 결과 :
이로써 해당 프로그램의 Crack를 마치겠다.
'Wargame > Lena Tutorial' 카테고리의 다른 글
Lena Tutorial (Level 15) (0) | 2022.09.12 |
---|---|
Lena Tutorial (Level 14) (0) | 2022.09.05 |
Lena Tutorial (Level 12) (0) | 2022.09.03 |
Lena Tutorial (Level 11) (0) | 2022.09.02 |
Lena Tutorial (Level 10) (0) | 2022.09.01 |