I wrote a program to solve my math homework so I could find flags. Unfortunatly my program sucks at math and just makes me do it. It does find flags though
[93 solves / 265 points]
리버싱 문제에서 두! 번째로 솔브가 많아서 도전해봤다.
Analysis
분석하다보면 조금 어이없는데(?) 결국 분석해야할 함수는 하나다. _stack_chk_fail 함수이다. 함수명이 헷갈려서 IDA도 분석을 제대로 못해서 분석해야할 함수를 직관적으로 찾지 못했다. 이런 경우는 어셈블리를 직접 확인해야 정확하게 분석할 수 있다.
아무든 분석해야할 로직은 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12
idx = 0LL; for ( i = 0x41; ; i = v3[idx + 1] ) { v3[0] ^= i; if ( FLAG[idx] != v3[0] ) break; if ( ++idx == ' ' ) { puts("Well Done."); goto LABEL_7; } }
break 되지 않으면 flag를 출력해준다. 이를 python으로 다시 재구현했다. 이때 v3 변수가 헷갈리게 아래처럼 정의되어 있어서 주의하자.