워게임/CodeEngn

[CodeEngn] Basic RCE L16

name2965 2022. 7. 8. 23:40
728x90

 

 

이름이 CodeEngn일때 시리얼키를 구해야하는 문제입니다.

 

먼저 주어진 실행파일을 exeinfope로 열어보면

 

 

 

 

32비트 실행파일에 dev-c++ 로 작성된 프로그램이고 패킹은 탐지되지 않았습니다.

 

이제 한번 실행시켜보면

 

 

 

다음과 같이 프로그램이 시작합니다.

 

여기에 주어진 이름인 CodeEngn과 아무 값이나 입력해보면

 

 

 

 

잘못된 비밀번호라는 문자열과 함께 프로그램이 종료됩니다.

 

이제 이를 기반으로 정확하게 분석해보겠습니다.

 

 

 

 

이 프로그램의 main 함수입니다.

 

C++로 작성되어서 약간 난해하지만 분석을 해보면

 

이름을 입력받은뒤에 그 이름의 길이를 구하고

그 길이값을 이용해서 연산을 한번하고 그다음에 비밀번호를 입력받습니다.

그리고나서 다시한번 연산값에 708225 를 곱한뒤 그 값과 입력값을 비교합니다.

 

이름은 CodeEngn 으로 정해져 있으므로 이름의 길이는 8입니다.

 

그러면 첫번째 연산을 거치게되면서

12 * 8 * 12 * 8 * 12 * 8 + 23 = 884759 라는 값이 나오게됩니다.

 

그리고나서 비밀번호를 입력받은뒤 

884759 * 708225 = 626608442775 

라는 값이 최종적으로 나오게 됩니다.

 

그런데 이 값이 저장되는 변수의 자료형은 unsigned int 입니다.

최종 연산값을 16진수로 표현하면 91E4C60D97 가 나오므로

모든값이 변수에 들어갈수 없습니다.

 

그러므로 이 변수에 들어가는 값은 앞에 2자리가 짤리는값인 E4C60D97 가 되는것입니다.

 

그러므로 이 프로그램의 비밀번호는 E4C60D97이 10진수로 표현된

3838184855 입니다.

 

이 값을 비밀번호로 입력해보면

 

 

 

다음과 같이 맞는 비밀번호라는것을 알수 있습니다.

 

 

728x90

'워게임 > CodeEngn' 카테고리의 다른 글

[CodeEngn] Malware Analysis L01  (0) 2022.10.06
[CodeEngn] Basic RCE L17  (0) 2022.07.17
[CodeEngn] Basic RCE L15  (0) 2022.07.06
[CodeEngn] Basic RCE L14  (0) 2022.07.06
[CodeEngn] Basic RCE L13  (0) 2022.07.06