이름이 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 입니다.
이 값을 비밀번호로 입력해보면
다음과 같이 맞는 비밀번호라는것을 알수 있습니다.
'워게임 > 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 |