CodeEngn Basic17 풀이
Wargame | CTF/Reversing

CodeEngn Basic17 풀이

이건좀 특이하네요 앞전문제와 반대입니다. 키값을 알려주고 그에따른 Name값을 알아내라고하네요.

여기서 Check it 값을 누르면 key값에 있는 값이 비워지고 문자를 더입력하라고 나옵니다. 

올리디버거로 확인해보겠습니다.



All referenced text strings로 확인해본결과 패킹되어있지않아서 다 드러납니다. 성공메세지 출력하는곳으로 가줍니다.

45BB22 의 주소에서 사용자가 Name에 입력한 문자열의 길이를 받아온후에 45BB24의 주소에서 상수 3이랑 비교합니다.

원래 45BB27의 주소에는 JGN 0045BB3E 였으나 제가 JMP로 어셈블하였습니다. Name이 3글자 미만이면 Serial안의 내용을 Please Enter More Chars...로 바꿔버립니다. 문제에서는 Name이 한글자라고 힌트를 주었으니 한글자를 입력해도 점프하도록 바꾸었습니다.

점프한후에 좀더 진행해보면 시리얼을 구하는 알고리즘을 만나게됩니다. 여기서 시간을좀 잡아먹었네요;; 어떤 알고리즘을 거쳐서 우리가 원하는 시리얼값인 BEDA-2F56-BC4F4368-8A71-870B 을 띄워야하니까 알고리즘을 분석할필요가 있습니다.

다행히 다 볼필요는 없었고 처음 8자리를 구하는 알고리즘만 분석해서 우리가 원하는 값을 찾을수 있었네요.

알고리즘분석후 반복해서 우리가원하는 Name값을 찾기위해 소스를짜줍니다.  앞의 4자리만 비교해서 쉽게 찾았습니다. 우리가 원하는 Name값은 F 네요 ASCII 코드값으로는 0x46입니다.

확인해보니 성공메세지를 출력합니다. 문제에서는 정답인증을 Name값의 MD5값이라고 하였으므로 MD5로 변경해주는 사이트에서 값을 받아왔습니다.  정답은 800618943025315F869E4E1F09471012 이거네요.

역으로 Name을 찾아내는거라 조금애먹었네요..

풀이완료!

'Wargame | CTF > Reversing' 카테고리의 다른 글

CodeEngn Basic19 풀이  (0) 2018.03.22
CodeEngn Basic18 풀이  (0) 2018.03.20
CodeEngn Basic16 풀이  (0) 2018.03.19
CodeEngn Basic15 풀이  (0) 2018.03.19
CodeEngn Basic14 풀이  (0) 2017.11.20