본문 바로가기

Write Up

[Just For Fun3] Reversing_AVReversing


이번에는 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