Wargame.kr 사이트에서 Crackme 기초 문제이다!
사실 쉬운문제인데 너무 돌아간 느낌이 있다...
간단한 리버싱 문제라길래 냉큼 받아 풀었다.
(문제 화면)
프로그램을 실행하면 다음과 같이 이름과 패스워드를 물어본다.
(프로그램 실행 화면)
프로그램은 C# 으로 개발되어있다. (그래서 이 문제를 냉큼 받아서 했다.!)
(왜냐하면 나에게는 dotpeek 이 있기 때문에!!!!)
(바로 디컴파일 하니 보기 좋은 소스코드가 나왔다.)
메인 함수부터 보자!
(메인함수)
이름은 BluSH4G 로 입력해야하고...
그다음 입력이 조금 처리가 되있다. s1에는 입력받은 문자와 이름을 myEncrypt 함수에 넣어 처리를 하고 그 값과 getps 함수의 결과값과 비교한다.
getps 함수는 어떤 url에 name 값을 전달하면 특정 문자열이 온다.
그 값은 sNfpY/vo6zye3TKPpH6Ekmtx26qLLriF/RpV4Fsyho/YkA2kvF9ybHLWjgGoV5EE 였다.!
문제는 암호화 함수 부분!
(암호화 함수 부분)
뭘하는지는 냉큼 이해 되었다.
암호모드 ECB모드로 초기벡터와 키는 name에 어떤 처리를 한 값을 주어 DES로 암호화 한다.
그러면 어떤 처리를?..
(mPadding 함수)
이 함수에서 이름을 처리해서 그 값을 초기벡터와 키값으로 사용한다.
즉 우리는 이 값을 알아야한다. 이름을 BluSH4G 로 입력하라고 했고 길이는 7이므로 하나의 * 문자가 붙을것이다. 결과값은 BluSH4G* 이 될것이다.
그렇다면
BluSH4G*을 초기벡터, 키 값으로 사용하여 전달받은 문자열을 DES 복호화 하면된다.
(복호화 과정)
여기서 조금 엉뚱땅 팠는데..
암호화 함수에서 마지막에 Base64 인코딩을보고 나혼자 C# 컴파일러 만지면서 디코딩과정부터 만지고 있었다. 생각해보면 DES 암호화 후 Base64로 표현하여 출력하는게 일반적이어서 일반적인 사이트에서 기본적으로 제공해주고 있었다.
나는 고로 파란 버튼을 클릭하기만 하면 됬었다.
(문제 해결)
'WarGame > 500 Project' 카테고리의 다른 글
(43/500) - pwnable.kr - fd (0) | 2017.07.05 |
---|---|
(42/500) - Lena's Tutorial 01 (0) | 2017.07.05 |
(40/500) Wargame.kr - EASY_CrackMe (0) | 2017.06.27 |
(39/500) Suninatas - Binary(11) (0) | 2017.06.27 |
(38/500) Suninatas - Binary(10) (0) | 2017.06.27 |