ISITDTU CTF Reversing cool

2018. 7. 30. 13:580x07 CTF/[스스로 푼 것]

728x90

문제 의도 : md5 decrypt && xor value 


바이너리를 실행하면 전형적인 키 값 입력 리버싱 문제임을 알 수 있다.

이러한 문제는 루틴을 잘 이해해야 한다.




코드를 보고 판단해보자.

antidebug가 있지만 이건 간단하게 patch를 할 수 있으니 굳이 신경쓰지 않아도 된다.


위에 알 수 없는 문자열들은 32바이트 즉, md5이다.

md5 decrypt를 하면 fl4g _i5_ h3r3 이라는 값을 볼 수 있다. 


해당 문제의 핵심은 이 부분이라고 볼 수 있다.


convert_md5함수에 접근해보자.



입력한 data가 고정 되어있는 md5값과 같은지 다른지 체크하는 부분이 있다. 

같든 다르든 메모리 해제(free)를 해준다. 


convert_md5의 반환 값에 따라 fail()로 갈 지 새로운 작업을 진행할 지 결정되게 된다.


이런 시나리오를 생각해볼 수 있다. 

임의 의 값 입력 -> md5 encoding -> 값 vs ECFD4245812B86AB2A878CA8CB1200F9 일치 여부 

-> 같다면 다음 루틴 진행 



쭉 반복해보면, fl4g_i5_h3r3!  까지 구할 수 있고,  우리는 if (strlen(flag) != 28) 에서 실제 플래그의 길이가 28자리인것을 알고 있기 때문에 

현재 구한 것은 13바이트, 15바이트가 모자란 것을 눈치 챌  수 있다.


나머지 15바이트는 이 루틴에서 결정 된다.



xor_val은 다음과 같다. 


저 값을 이용해서 연산을 수행하면 된다.


flag = "fl4g_i5_h3r3!"


data = "7D4D2344360276036F5B2F46761839".decode("hex")


m = 0


for i in flag:

#    print chr(ord(i))

    m = m ^ ord(i)

 #   print m



for i in data:

    flag += chr(m ^ ord(i))

    m = m ^(m ^ ord(i))

#    print m



print flag



'0x07 CTF > [스스로 푼 것]' 카테고리의 다른 글

HexionCTF XOR - Crypto  (0) 2020.04.18
ISITDTU CTF Reversing inter  (0) 2018.08.03
ISITDTU CTF Reversing Embeedding  (0) 2018.07.30
ISITDTU PWN Unexploitable 미완성  (0) 2018.07.30
0ctf_momo_3  (0) 2018.06.10