정보보안/침해사고 대응&분석

리버싱 연습 - hint.exe

ITtechRoy 2014. 9. 10. 23:41
728x90
반응형

 

실행 화면

그림 11 어떤 파일인지 확인하기 위해 실행시켜본 결과이다. “피보나치 수열 10까지 구해보시오!!!” 라는 문구와함께 피보나치 수열이 나열되는 것을 볼 수 있다. 피보나치 수열이 계속 나열되는 것으로 보아 “Fibonacci(9) = 34” 까지 10개만 나열하도록 수정해주면 해결될 것으로 보인다.

그림 11 hint.exe 실행

 

 

“OllyDbg” 화면

그림 1‑3 “hint.exe” 파일을 “Ollydbg” 열어본 결과이다. 일단 그림 12 에서 보면 1. 코드부분   2. 레지스터부분 3. 덤프 부분 4. 스택부분 있다. 1 부분을 보면 왼쪽부터 코드주소, 기계어, 어셈블리어, 사용되는 문자열을 확인할 있고, 3번을 보면 왼쪽부터 주소, Hex, ASCII 값을 확인할 있으며 4번을 보면 왼쪽부터 Stack주소, Stack, Stack 설명 확인할 있다.

그림 13 Ollydbg 분석

 

 

 

 

 

 

 

“Ollydbg” 화면

그림 1‑4 “all strings referenced text strings” 기능을 이용하여 문자열 부분만 찾은 결과이다. “Fibonacci(%d) = %d “ 보면 그림 1-1 에서의 피보나치수열 나열하는 부분인 것으로 보인다.

그림 14 문자열

 

 

 

“Ollydbg” 화면

그림 1‑5 앞에서 확인한 “Fibonacci” 부분으로 들어온 결과이다. 아스키코드값 밑에 보면 ESI 값과 1FD 값을 비교해서 진행되는 부분이 보인다.

그림 15 분석

 

 

 

“Ollydbg” 화면

그림 1‑6 0040107D 에서 00401048 주소값으로 이동하는 것을 있다. 00401048 주소값에서 진행되어서 00401077 주소값의 ESI 1FD 비교해서 ESI값이 1FD 보다 작아지면 루프에서 빠져나가게 되는 코드로 보인다. ESI값은 한번 순환될때마다 1 작아지는 것을 있고 1FD (10진수로 표현하면509) 보다 작아지면 루프에서 빠져 나오는 것으로 보인다. 따라서 1FD 값을 10으로 바꿔 준다면 피보나치 수열출력 부분에서 빠져나오는 것으로 보인다.

그림 16 Loop 분석

 

 

 

 

 

 

 

 

“Ollydbg” 화면

그림 1‑6 00401077 위치의 “1FD” “0A” 고쳐준 주소값 00401177 브레이크 포인트를 설정한 실행시킨 화면이다. ESI값이 바뀌는 것을 확인할 있고 피보나치값 또한 하나씩 나타나도록 실행시켰다.

그림 17 수정 실행

 

 

 

 

 

 

 

 

“Ollydbg” 화면

그림 1‑6 수열 10까지 출력 종료된 것을 확인할 있었다.

그림 18 Loop 분석

 

 

 

 

 

 

 

 

 

 

앞 부분은 문제를 해결하기 위해 빠르게 분석하기 위한 방법이었고 지금부터는 상세히 분석을 시작하겠다.  F8 ( step over ) 을 이용하여 분석해보면 그림 1‑9 그림 1‑10 코드 부분이 진행됨에 따라 Stack Push 되는 부분을 확인할 수 있다.

 

 

 

그림 1‑11 을 보면 CALL 부분에 모두 Break Point가 설정되어 있는 것을 볼 수 있다. 함수 호출 부분에 F7 ( step into ) 하기 위해 F8 ( step over ) 으로 코드 하나씩 확인하면서 CALL 부분에 Break Point를 설정시켰다.

그림 111 Call 부분 BreakPoint ( 1 )

 

 

 

그림 1‑12 에서 보면 CALL hint.00401030을 호출하는 순간 Command 창에 피보나치 수열이 나열되는 것을 확인했다. 이 부분 앞에서 호출하는 부분을 모두 F7 ( Step into ) 해보도록 하겠다.

그림 112 Call 부분 BreakPoint ( 2 )

 

 

그림 1‑11 에서 확인한 CALL 부분을 중심으로 F7 ( Step into ) 한결과 그림 1‑13 과 같은 부분을 발견할 수 있었다.  피보나치 수열 10까지 구해보시오!!! ” 라는 문자와 함께 “Fibonacci( %d )” 라는 ASCII 값 또한 발견할 수 있었다. 이때 레지스터값을보면 00401030 에서 004011ED Return 되는 값이 PUSH 된 것을 확인할 수 있다.

그림 113 Step into

 

 

 

그림 1‑14 주소값 0040137 부분을 F8 ( step over ) 하는 순간 Command 창에 문자열이 입력되었으며 그림 1‑15 주소값 00401071 EDI CALL 하는 순간 “Fibonacci (0) = 0” 이라는 문자열이 Command 창에 입력되는 것을 볼 수 있다.

그림 114 문자열 출력

 

 

 

그림 115 ASCII 값 출력

 

 

그림 1‑16 주소값 00401048에 진입한 후 F8 ( Step over ) 하면 ASCII 문자열을 출력한 후 빨간색 화살표를 보면 알 수 있듯이 주소값 0040107D 부분에서 다시 주소값 00401048 로 이동되어 계속 반복되는 것을 확인할 수 있다.  이제 앞에서 수행한 ( 1.2.3. 코드 수정 ) 부분부터 수행해 주면 문제를 해결할 수 있다.

그림 116 반복

맛집 해킹 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 문제풀이 기타

728x90
반응형