#About
Author : Xsp!d3r
Korean :
Name이 CodeEngn일 때 Serial은 무엇인가
English :
Find the Serial when the Name is CodeEngn.
#Contents
해당 문제는 Name 값에 따라 달라지는 Serial 값을 구하는 것을 목표로 한다
#Solution
[그림 1] - 실행 화면
18.exe의 실행화면이며 Serial 값에 임의의 값을 넣고 체크하면 아래와 같은 에러 메시지를 확인할 수 있다
[그림 2] - 에러 메시지
분석을 위해 디버거로 열고 조금만 위 아래로 스크롤 하다보면 아래와 같은 화면을 확인할 수 있다
[그림 3] - 분기문 JE
004011F6을 보면 분기문이 존재하며 해당 라인의 결과에 따라 성공/실패 메시지가 출력된다 따라서 해당 분기문에서
사용되는 조건이 어디로부터 오는 것인지 확인 하는 과정을 거치게 되면 문제가 해결될 것 같다
004011F4에서 OR EAX, EAX 명령을 수행하는데 있어 레지스터 EAX는 함수의 리턴 값을 담는
용도로 쓰이기 때문에 바로 윗 라인에 사용되는 함수 lstrcmpiA의 리턴 값일 것이다
lstrcmpiA 함수는 두 문자열을 비교한 결과를 리턴하며 무엇을 비교하는지 알기 위해 004011EF에 bp를 걸고 임의의 값을 입력하는 과정을 진행해보았다
[그림 4] - 임의의 값 입력
[그림 5] - 입력 값 확인
위 과정을 통해 Serial에 임의로 입력해준 256이라는 값이 String1에 저장되며, String2와 비교 한 결과 값을 리턴함을 알 수 있다
따라서 String1과 String2의 값이 같아야 성공 메시지가 출력되는 구문으로 분기하게되며, 사용자 입력 값이 었던
String1의 값을 06162370056B6AC0으로 입력해준다면 아래와 같이 성공 메시지를 확인할 수 있다
[그림 6] - 올바른 시리얼 값 입력
[그림 7] - 크랙
'Wargame' 카테고리의 다른 글
CodeEngn Basic 20 (0) | 2017.10.23 |
---|---|
CodeEngn Basic 19 (0) | 2017.10.19 |
CodeEngn Basic 17 (0) | 2017.10.17 |
CodeEngn Basic 16 (0) | 2017.10.13 |
CodeEngn Basic 15 (0) | 2017.10.12 |