CodeEngn basic 18
코드엔진 basic 18번 문제풀이
프로그램을 실행해보면 name과 시리얼 값을 입력하는 창이 나온다.
PEiD를 사용해 프로그램을 열면 nothing found *라는라는 문자가 뜨기 때문에 die를 사용하여 열어보니 ARM Protector를 사용하고 있는 프로그램이었다.
ARM Protector에 대하여 찾아보니 다른 내용만 나왔기 때문에 올리 디버거로 프로그램을 열었다. 그리고 관련된 문자열을 찾아보니 아래와 같은 문자열 들을 찾을 수 있었다.
문자열을 클릭하여 그 주소로 가서 분석을 해보니 시리얼 입력 값이 다를 경우 나타나는 메시지 박스 위에 분기문이 있는 것을 찾을 수 있었고 그 분기문은 eax값을 or 하여 값이 0이면 zero flag를 설정해서 성공 메시지박스로 점프를 하는 구조이기 때문에 eax값을 반환하는 함수를 살펴보니 문자열을 비교하여 다르면 eax값을 1로 설정하고 같으면 0으로 설정하는 lstrcmp함수였고 비교되는 문자열을 살펴보니 내가 입력한 시리얼 값과 06162370056B6AC0값을 비교하는 것을 알 수 있었다. 입력한 시리얼 값과 06162370056B6AC0값이 동일해야 eax값을 0으로 반환하므로 플래그는 06162370056B6AC0인 것을 알 수 있다.