BLOG main image
분류 전체보기 (224)
Reversing (13)
Pwnable (4)
Linux Kernel (3)
Crypto (2)
Wargames (68)
Programming (18)
Write Up (32)
Project (22)
Web (2)
My Life (52)
Memo (3)
etc (2)
발표자료 (1)
42,655 Visitors up to today!
Today 3 hit, Yesterday 27 hit
daisy rss
tistory 티스토리 가입하기!
2015.07.26 23:57


이번에는 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_AVReversing  (0) 2015.07.26
[Just For Fun3] Reversing_Damnida  (0) 2015.07.26
Name
Password
Homepage
Secret