이번에는 AVReversing입니다. 이름부터 AVR바이너리임을 짐작할 수 있어요.
AVR바이너리를 디버깅 하는 방법은 나중에 따로 포스팅 할 것이기 때문에 별다른 언급은 하지 않겠습니다. 먼저 IDA로 열어봅시다.
문자열도 깔끔하네요. 먼저 간단하게 요약을 해 보자면
여기 sub_1EF함수를 호출할 때 "input: "이라는 문자열을 출력해 줍니다. 그리고
sub_5B6함수에서 입력을 받습니다. 입력한 Input값은
메모리 0x1096에 위치하게 됩니다. 그러고 난 다음에
sub_8A함수에서 모든 연산이 일어 납니다. 핵심 함수에요.
sub_8A함수의 전체적인 모습입니다. 200점짜리 문제라서 그런지 루틴 자체는 그렇게 어렵지 않습니다. 분석을 해 보자면
이 부분에서 Input의 글자수가 26글자인지 비교하구요.
이 부분에서 입력한 Input값들을 루프를 돌면서 각 글자들과 루프 카운트를 xor시켜줍니다. 그리고 마지막으로
여기서 각 값들을 16진수의 16의 자리수와 1의 자리수를 바꿔 줍니다. 0x31은 0x13 이런 식으로요.
그리고 최종적으로
이 sub_180함수에서 원래 존재했던 테이블 값과 비교를 합니다.
0x27부터 0x02까지가 테이블 입니다. 이제 간단하게 소스를 짜 주면
이렇게 키가 나오게 됩니다. 사실은 인풋 키가 플래그이기 때문에 저 값이 최종 플래그가 됩니다.
이번에는 Reversing.kr의 미니 CustomShell을 푸는 듯한 기분이 들었네요.ㅋㅋㅋㅋ
AVR리버싱을 할 줄 알았다면 좀 쉬웠을지도 모르겠지만 접해보지 않았었다면 좀 어려울 것 같은 문제였습니다.
마지막 남은 memmem문제를 풀지 못해서 좀 아쉬웠습니다..ㅠㅠ
리버싱 실력만이 아닌 패킷분석, 메모리 덤프 분석 및 정보 수집, 암호학, 포렌식 등 여러가지 기본 지식이 있어야 풀 수 있는 문제이어야 해서 아쉽게도 풀지를 못했어요.. 나중에 다시 암호학 지식 좀 쌓고 풀어볼렵니다..
Flag : rnenT4L_5tate_I5_rEVErsin9
'Write Up' 카테고리의 다른 글
정보보호올림피아드2015 본선 Q3 (0) | 2015.10.17 |
---|---|
정보보호올림피아드2015 본선 Q2 (2) | 2015.10.17 |
Layer7 CTF Write-UP (2) | 2015.09.01 |
YISF 2015 Write-Up 예선 (0) | 2015.08.12 |
[Just For Fun3] Reversing_Damnida (0) | 2015.07.26 |