본문 바로가기
# write-up/- ctf

[DEFCON 2017] alchemy

by ddddh 2017. 5. 2.

크랙미 분야 문제들은 나름 난이도가 낮았던 것 같다. 


처음 문제는 풀려 있어서 "alchemy" 바이너리부터 보았는데 같은 분야의 모든 문제들이 비슷하였다.

비슷한 바이너리가 굉장히 많이 주어지는데 nc로 연결하여 recv받는 파일의 Input 값만 맞춰주면 되는 그런 형식이었다.



아무 바이너리나 골라 잡아 IDA로 분석한다.  



실행 후 "Enter code : "라는 문자열이 출력되며 입력 값을 받고 검증 루틴이 지나고 맞을 경우 "sum is "라는 문자열이 출력 된다.




hex-ray를 사용해서 보면 정말 간단한 비교를 하는 것을 알 수 있다.




이제 이 부분을 파싱 해주어 넘겨주기만 하면 된다.



소스 :

잘하시는 분들은 objdump로 하시던데 ... (역시 난 아직 많이 부족하다 더 열심히 해야지 ..

이 소스로 백 퍼센트 모든 바이너리의 값이 파싱되지는 않지만 확률이 높기 때문에 푸는데는 지장이 없었다. (풀면 장땡)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import os
 
for root,dirs, files in os.walk(r"C:\Users\ddddh\Desktop\Defcon\alchemy_dist"):
    for file_name in files:
        file = open("C:\\Users\\ddddh\\Desktop\\Defcon\\alchemy_dist\\"+file_name, "rb")
 
        data = file.read()[0xf1b4:]
 
        input_ = ""
        for x in range(50):
            index = x*0x18
            if data[index:index+3== "\x48\x83\xf9":
                input_ += data[index+3]
            elif data[index:index+3== "\x48\x83\xf8":
                input_ += data[index+3]
            else:
                break
        print file_name + " : " + input_
        file.close()
cs



아웃풋 :

서버가 죽었기 때문에 그냥 출력문으로 확인 ..




'# write-up > - ctf' 카테고리의 다른 글

[DEFCON 2017] witchcraft  (0) 2017.05.02
[DEFCON 2017] sorcery  (0) 2017.05.02
[Plaid CTF 2017] no_mo_flo  (0) 2017.04.27
[ALEX CTF] RE5: packed movement  (0) 2017.02.07
[RC3 2016] 메모리 포렌식 - 500pt  (0) 2016.11.27