[2013 HUST]6번 문제

6번 문제는 드디어 제일 좋아하는 리버싱 문제이다.


먼저 문제링크로 접속하면 압축파일을 하나 받는다.



압출을 풀려고하면 암호가 걸려있다. 파일명을 괜히 저렇게 한것이 아니다.


암호는 숫자와 영문조합이다. "advanced_zip_password_recovery" 툴로 "brute force" 모드, 숫자, 영문 조합, 암호길이는 기본 값 5를 주면


1분만에 풀린다.


압축을 풀면 exe 파일 하나와 2개의 사진파일이 나온다. 


스테가노?, 리버싱? 여태까지 리버싱이 안나왔기 때문에 리버싱에 무게를 두고 exe부터 분석했다.


먼저 어떤 놈인지 실행해보면 아래와 같은 팝업창이 뜨고 종료된다.



머냐고? 이게 머냐고? ...다짜고짜 머냐고 묻는다.....닥치고 분석


스트링을 흝어보려고 열어보면 UPX 문자열이 박혀있다. UPX로 패킹되어 있는 것이다.


바로 UPX 툴로 언팩을 해드리자.


인자값을 넣고 분석을 해보면 이 프로그램은 다음과 같다.


1.입력된 문자열을 암호화(함수에 넣은다)함수에 넣는다.

2.암호화 된 값을 하드 코딩된 특정값과 비교한다.

3.특정값과 일치하면 "콩그레츄레이션"


즉 입력된 문자열이 키다.



아래와 같이 올리에서 분석할 프로그램에 인자값을 주고 분석을 시작할 수 있다.




해당 프로그램은 인자값에 제일 첫글자가 잘린다.(키를 알아내는데는 아무런 상관이 엄다.)

4010000 함수가 암호화 하는 함수이면 입력했던 문자열을 인자로 받는다.

함수의 리턴 값을 바로 특정값과 비교 후 같으면 "콩그레츄레이션"으로 흘러간다~



암호화 하는 함수를 IDA Hexlay 기능으로 수도 코드를 보면 다음과 같다.




우리는 이것을 역으로 해주면 키가 나온다.


역으로 해주는 코드는 다음과 같다.(파이썬)


str=[0x3c,0x69,0x5a,0x67,0x1f,0x52,0x52,0x30,0x50]

key=""

a=0

for i in str:

key=key+chr((i^1)+16+a)

a+=1

print key



답은 : Mymy2hiHi


저작자 표시
신고

'Simple Story > CTF' 카테고리의 다른 글

[2014 Codegate]Reversing 250 write up  (0) 2014.03.02
[2013 HUST]6번 문제  (0) 2013.12.04
[2013 HUST]5번 문제  (0) 2013.12.04
[2013 HUST]4번 문제  (7) 2013.11.29
[2013 HUST]3번 문제  (0) 2013.11.28
[2013 HUST]2번 문제  (0) 2013.11.28