#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

+ Recent posts