실행 화면 그림 1‑1 어떤 파일인지 확인하기 위해 실행시켜본 결과이다. “피보나치 수열 10까지 구해보시오!!!” 라는 문구와함께 피보나치 수열이 나열되는 것을 볼 수 있다. 피보나치 수열이 계속 나열되는 것으로 보아 “Fibonacci(9) = 34” 까지 10개만 나열하도록 수정해주면 해결될 것으로 보인다.
|
1.1. ollydbg 실행
“OllyDbg” 화면 그림 1‑3 “hint.exe” 파일을 “Ollydbg”로 열어본 결과이다. 일단 그림 1‑2 에서 보면 1. 코드부분 2. 레지스터부분 3. 덤프 부분 4. 스택부분 을 볼 수 있다. 1번 부분을 보면 왼쪽부터 코드주소, 기계어, 어셈블리어, 사용되는 문자열을 확인할 수 있고, 3번을 보면 왼쪽부터 주소, Hex값, ASCII 값을 확인할 수 있으며 4번을 보면 왼쪽부터 Stack주소, Stack값, Stack 설명 을 확인할 수 있다.
|
“Ollydbg” 화면 그림 1‑4 “all strings referenced text strings” 기능을 이용하여 문자열 부분만 찾은 결과이다. “Fibonacci(%d) = %d “ 를 보면 그림 1-1 에서의 피보나치수열 나열하는 부분인 것으로 보인다.
|
“Ollydbg” 화면 그림 1‑5 앞에서 확인한 “Fibonacci” 부분으로 들어온 결과이다. 아스키코드값 밑에 보면 ESI 값과 1FD 값을 비교해서 진행되는 부분이 보인다.
그림 1‑5 분석
|
“Ollydbg” 화면 그림 1‑6 0040107D 에서 00401048 주소값으로 이동하는 것을 볼 수 있다. 00401048 주소값에서 진행되어서 00401077 주소값의 ESI 와 1FD 를 비교해서 ESI값이 1FD 보다 작아지면 루프에서 빠져나가게 되는 코드로 보인다. ESI값은 한번 순환될때마다 1씩 작아지는 것을 볼 수 있고 1FD (10진수로 표현하면509) 보다 작아지면 루프에서 빠져 나오는 것으로 보인다. 따라서 1FD 값을 10으로 바꿔 준다면 피보나치 수열출력 부분에서 빠져나오는 것으로 보인다.
|
“Ollydbg” 화면 그림 1‑6 00401077 위치의 “1FD”를 “0A” 로 고쳐준 후 주소값 00401177에 브레이크 포인트를 설정한 후 실행시킨 화면이다. ESI값이 바뀌는 것을 확인할 수 있고 피보나치값 또한 하나씩 나타나도록 실행시켰다.
|
“Ollydbg” 화면 그림 1‑6 수열 10까지 출력 후 종료된 것을 확인할 수 있었다.
|
앞 부분은 문제를 해결하기 위해 빠르게 분석하기 위한 방법이었고 지금부터는 상세히 분석을 시작하겠다. F8 ( step over ) 을 이용하여 분석해보면 그림 1‑9 그림 1‑10 코드 부분이 진행됨에 따라 Stack 에 Push 되는 부분을 확인할 수 있다.
그림 1‑11 을 보면 CALL 부분에 모두 Break Point가 설정되어 있는 것을 볼 수 있다. 함수 호출 부분에 F7 ( step into ) 하기 위해 F8 ( step over ) 으로 코드 하나씩 확인하면서 CALL 부분에 Break Point를 설정시켰다.
그림 1‑11 Call 부분 BreakPoint ( 1 )
그림 1‑12 에서 보면 CALL hint.00401030을 호출하는 순간 Command 창에 피보나치 수열이 나열되는 것을 확인했다. 이 부분 앞에서 호출하는 부분을 모두 F7 ( Step into ) 해보도록 하겠다.
그림 1‑12 Call 부분 BreakPoint ( 2 )
그림 1‑11 에서 확인한 CALL 부분을 중심으로 F7 ( Step into ) 한결과 그림 1‑13 과 같은 부분을 발견할 수 있었다. “ 피보나치 수열 10까지 구해보시오!!! ” 라는 문자와 함께 “Fibonacci( %d )” 라는 ASCII 값 또한 발견할 수 있었다. 이때 레지스터값을보면 00401030 에서 004011ED 로 Return 되는 값이 PUSH 된 것을 확인할 수 있다.
그림 1‑13 Step into
그림 1‑14 주소값 0040137 부분을 F8 ( step over ) 하는 순간 Command 창에 문자열이 입력되었으며 그림 1‑15 주소값 00401071 의 EDI 를 CALL 하는 순간 “Fibonacci (0) = 0” 이라는 문자열이 Command 창에 입력되는 것을 볼 수 있다.
그림 1‑14 문자열 출력
그림 1‑15 ASCII 값 출력
그림 1‑16 주소값 00401048에 진입한 후 F8 ( Step over ) 하면 ASCII 문자열을 출력한 후 빨간색 화살표를 보면 알 수 있듯이 주소값 0040107D 부분에서 다시 주소값 00401048 로 이동되어 계속 반복되는 것을 확인할 수 있다. 이제 앞에서 수행한 ( 1.2.3. 코드 수정 ) 부분부터 수행해 주면 문제를 해결할 수 있다.
그림 1‑16 반복
맛집 해킹 hacking web 웹 네트워크 network 학원 해커 크래커 hacker cracker 강아지 dog 고양이 해운대 강남 서면 보쌈 치맥 치킨 맥주 육회 회 포렌식 침해대응 cert 관제 모의해킹 mobile 모바일 무선 wireless 디지털포렌식 Clanguage C언어 C# JSP JAVA tool 해킹방어대회 ctf 문제풀이 기타 맛집 해킹 hacking web 웹 네트워크 network 학원 해커 크래커 hacker cracker 강아지 dog 고양이 해운대 강남 서면 보쌈 치맥 치킨 맥주 육회 회 포렌식 침해대응 cert 관제 모의해킹 mobile 모바일 무선 wireless 디지털포렌식 Clanguage C언어 C# JSP JAVA tool 해킹방어대회 ctf 문제풀이 기타
'정보보안 > 침해사고 대응&분석' 카테고리의 다른 글
침해사고 대응 및 분석 - 악성코드 제거 (0) | 2014.09.21 |
---|---|
리버싱 분석연습 - time.exe (0) | 2014.09.10 |