난 정말 최고야 멋있어
CTFLearn - Time to Eat 본문
EAt 함수 중간에 디버깅 전용 print를 하나 삽입함
print(f"\n ======DBG INFO =====\neat : {eat}\neats : {eats} \neAt : {eAt}\n =====END INFO=====\n") |
입력값으로는 숫자3개+영어3개+숫자3개 조합을 받음
여기서 eAt 의 값이 E10a23t9090t9ae0140 이여야 플래그를 얻을 수 있다
이때 2가지 입력값을 넣어 봤을 때의 디버그 정보
case)123abc456
======DBG INFO ===== eat : 369654cba321 eats : Eat9654 eAt : E36a96t549cb6a3521 =====END INFO===== |
case)456abc123
======DBG INFO ===== eat : 1368321cba654 eats : Eat9321 eAt : E13a68t3291c3ba2651 =====END INFO===== |
잘 살펴보면
eat는 A + '입력값을 거꾸로 한 문자열'
eats 는 Eat9 + B
의 형태를 가지고 있고
eAt 는 eats에서 1글자, eat에서 2글자를 따와 하나로 엮은 문자열임을 알 수 있다
조금더 살펴보면
A 는 첫번째 3글자 * 3 의 값을 가지고
B 는 마지막 3글자를 거꾸로 한 값을 가진 다는 것을 알 수 있다
E10a23t9090t9ae0140를 분해를 해보면
eat = 1023900tae14
eats = Eat9900
eat에서 원본문자열은 41eat009 A는 1023 (아무래도 어떤 조건 때문에 첫글자가 생략된것으로 보임..)
A를 3으로 나누면 341
eats 에서 마지막 세글자는 009
따라서 입력값은 341eat009 가 된다
CTFlearn{ eaten_341eat009 }
소스가 난독화 되어 있어서... 제대로 분해를 못하고 감으로 때려맞춰서 미흡한 부분이 많다..
나중에 시간나면 따로 분석해봐야겠다