[해킹 대회 문제] wargame.kr - Crypto Crackme Basic 문제풀이(Write Up)
wargame.kr - Crypto Crackme Basic 문제풀이(Write Up)
문제 분류: 리버싱(Reversing)
이번 시간에 풀어 볼 문제 또한 wargame.kr에서 제공하는 간단한 리버싱(Reversing) 문제입니다. 문제 이름은 Crypto Crackme Basic이며 간단한 암호화 라이브러리 코드에 대한 분석을 물어보는 문제입니다.
▶ 문제풀이 사이트 주소: http://wargame.kr
바로 문제에서 제공해주는 프로그램을 다운로드 받아서 실행해봅시다.
다만 본 프로그램은 C# .NET Framework를 이용해 개발이 된 것으로 보입니다. 따라서 프로그램을 실행하는 과정에서도 .NET Framework가 설치되어 있는지 물어봅니다. 저는 설치가 안 되어 있어서, .NET Framework 3.5를 설치하는 과정이 필요했습니다.
설치 이후에 프로그램을 실행할 수 있는데, 이름과 비밀번호를 정확히 입력해야 Flag를 얻을 수 있는 문제 유형인 듯 합니다.
가장 먼저 IDA Pro를 이용하여 프로그램이 어떻게 동작하는지 확인하도록 하겠습니다. 나아가 적절한 Name과 Password 값을 찾아야 정답 처리를 받을 수 있을 것입니다.
다만 기본적인 IDA Pro를 이용해서는 C# 프로그램을 쉽게 분석할 수 없다는 것을 깨달았습니다. 다시 말해 소스코드를 제대로 분석하기 어려운 상태입니다. 그러므로 동적 분석을 하거나 C# 전용 디컴파일러가 필요할 것 같습니다. 저는 대표적인 C# 디컴파일러인 dotPeek을 이용하도록 하겠습니다.
dotPeek 다운로드: https://www.jetbrains.com/decompiler/
공식 홈페이지에 접속한 이후에는 기본 설정 그대로 설치를 진행할 수 있습니다.
바로 [DOWNLOAD] 버튼을 눌러서 기본 설정 그대로 설치를 진행합니다.
다른 프로그램은 받지 않고, dotPeek만 선택하여 INSTALL하였습니다.
설치 이후에는 dotPeek을 실행합니다.
실행 이후에는 프로그램을 Drag & Drop하여 놓습니다. 그러면 자동으로 해당 프로그램을 정적 분석할 수 있도록 도와주는 것을 알 수 있습니다.
이제 전체 소스코드를 거의 원래 개발 환경에서의 상태 그대로 확인이 가능합니다. 다시 말해 소스코드 분석을 위해 직접 C# 개발환경을 구축해서 동적으로 분석하는 방법도 있지만, 이렇게 간단히 C# 디컴파일러 도구를 이용하는 것 만으로도 리버싱이 가능한 것 입니다. 이제 하나씩 함수를 분석하겠습니다.
먼저 mPadding 함수입니다. mPadding(string s) 함수는 다음과 같이 동작합니다.
- s의 길이가 8자인 경우, 문자열 그대로 반환
- s의 길이가 8자를 초과하는 경우, 문자열의 뒤쪽 8자만 반환
- s의 길이가 8자 미만인 경우, 부족한 길이만큼 문자열 뒤에 '*'를 추가하여 반환
getps(string name) 함수는 다음과 같이 동작합니다.
- 특정한 웹 서버로 파라미터 값을 전송하고, 웹 서버의 응답 값을 가져 옴
myEncrypt(string password, string name) 함수는 다음과 같이 동작합니다.
- 입력 받은 비밀번호를 "mPadding(name)"으로 DES 암호화 한 결과를 Base64로 인코딩하여 반환
이제 이러한 정보를 활용하여 문제를 풀 수 있습니다.
일단 서버로 보내지는 값은 항상 같습니다. 왜냐하면 BluSH4G이라는 문자열은 8자 미만이므로 항상 뒤에 *이 붙기 때문입니다. 따라서 소스코드를 분석한 결과, 최종적으로 호출되는 URL 주소는 다음과 같습니다.
http://wargame.kr:8084/prob/28/ps.php?n=BluSH4G*
접속 결과 반환되는 문자열은 다음과 같다는 것을 알 수 있습니다.
JbY4qKhzRgPY1rtQayPU+RtQJ8+ndUFC1wz8h0eBOEsRs00MHv9Czv2luONBu34b
이제 이 값을 DES 복호화 하면 요구하는 비밀번호가 무엇인지 알아낼 수 있는 것입니다. Base64 형태를 가지고 있는 DES 암호화 구문을 특정한 키로 DES 복호화 해주는 사이트가 있으니, 이를 이용하면 될 것 같습니다.
https://www.tools4noobs.com/online_tools/decrypt/
다음과 같이 DES 암호화의 Key 값을 함께 넣어서 복호화를 진행합니다.
이렇게 구한 Flag 값을 기입하면 정답 처리를 받을 수 있습니다.
'해킹 방어 대회(CTF)' 카테고리의 다른 글
[해킹 대회 문제] wargame.kr - flee button 문제풀이(Write Up) (2) | 2019.07.13 |
---|---|
[해킹 대회 문제] wargame.kr - already got 문제풀이(Write Up) (0) | 2019.07.13 |
[해킹 대회 문제] wargame.kr - DLL with notepad 문제풀이(Write Up) (0) | 2019.07.09 |
[해킹 대회 문제] wargame.kr - keypad CrackMe 문제풀이(Write Up) (0) | 2019.07.09 |
[해킹 대회 문제] wargame.kr - EASY_CrackMe 문제풀이(Write Up) (1) | 2019.07.06 |