티스토리 뷰

문제를 풀기 전에 저는 리눅스파일 ELF을 분석한 적이 없어서 당황했습니다ㅋㅋㅋ그래서 찾아봤는데 리눅스 환경에서 

GDB를 이용한 방법과 IDA가 제공하는 IDA_Remote_Debugging이 있었습니다. 저는 GDB보다는 IDA_Remote_Debugging를 통해서 문제를 풀어봤습니다. 올리디버거로만 하다가 IDA로 디버깅하려니까 정말 어색하네요ㅋㅋIDA_Remote_Debugging 사용방법은 따로 올리겠습니다. 해킹대회에서도 이 방법을 많이 사용한다고 하네요. 처음 알았음...흑..


IDA_Remote_Debugging 설정을 하고 디버깅할 수 있는 환경에서 문제 풀이에 들어가겠습니다.

1. IDA를 이용해서 Easy_ELF파일을 열어줍니다. Functions Window가 보이는데, 0804851B 함수 안에 Correct와 Wrong 텍스트가 보이는 것을 보니 주요 코드인 것 같아서 MAIN_CODE로 임의로 바꾸었습니다. N을 누르면 변경 가능합니다.

2. MAIN_CODE를 클릭하면 오른쪽에 어셈블리가 쫙 뜹니다. 첫 루틴에 BP(F2)를 걸고 실행(F9)를 해보겠습니다.

3. 잘 안보이지만 실행을 한 상태입니다. IDA 디버깅이 처음이라 그런지 어색하네요..

4. 08048540 함수에서 무슨 오류인지 모르겠는데 줯같은 오류가 발생하네요. 그래서 EIP를 임의로 변경했습니다..아시는 분은 댓글로 남겨주시길..

5. 오류가 나는 코드 8048434코드 안에 들어가봤습니다. 무슨 기능만 하는지 눈으로 볼려고 들어가봤는데 scanf가 보이네요.

입력 값을 받는 다는 것을 보실 수가 있습니다. 입력 값을 사용자로부터 받아서 비교하는 크랙미하고 비슷하겠구나라고 예상을 했습니다. 

6. 804851가 MAIN_CODE입니다. 들어가보겠습니다.

7. 복잡해보이지만 간단합니다. 위에서 scanf로 받아들인 문자를 하드코딩된 문자들과 비교하여서 맞으면 correct입니다.

밑의 그림에는 31과 같아야 내부에 진입하고 34,32,88과 하드코딩된 문자열과 xor을 한 후에 다시 scanf로 입력한 문자열중 하나와 58을 비교하여서 진행하네요. 

8. 밑의 그림도 간단합니다. xor한 값이 3개였는데 그 값이 7C, 78, DD인지 물어보네요.. 여기서 단서는 7C, 78, DD이네요.

저같은 경우는 무식하게 EAX를 바꿔서 계속 점프하면서 소스코드를 이해했네요...하..다른방법이 있을텐디

9. 마지막 루틴입니다. 마지막까지 시스템에 하드코딩된 문자열과 같아서 쭉 진행되어왔다면 eax에 1을 넣어서 return 하네요.

10. 정리를 한번 해봤습니다.



11. 4C 31 4E 55 58을 아스키 코드로 바꿔봤습니다.


12. Easy_ELF 실행 후에 L1NUX를 입려갛면 Correct!가 출력되는 것을 볼 수가 있습니다.


13. Clear

문제 푸는 것은 어렵지 않았는데, ELF분석이 처음이라 준비과정에서 애좀 먹었네요..하


'Wargame > reversing.kr' 카테고리의 다른 글

reversing.kr_CSHOP 풀이  (0) 2015.07.03
reversing.kr_Ransomware 풀이  (2) 2015.07.02
reversing.kr_Easy Unpack 풀이  (0) 2015.06.30
reversing.kr_Easy Keygen 풀이  (0) 2015.06.30
reversing.kr_Easy Crack 풀이  (0) 2015.06.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함