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

+ Recent posts