실습 6-4

실습 환경 : Vmware (Windows 7 32 bit)

사용한 툴 : IDA Free 5.0

[01] 실습 6-3과 6-4의 main 함수에서 호출한 함수 간의 차이점은 무엇인가?

lab6-4 1

lab6-4 2

6-4의 main 함수를 그래프화 시켜 전체적인 구조를 살펴보니 6-3의 구조와 차이점을 확인할 수 있었다. 6-4는 401000에서 인터넷 연결 여부를 검사하고 401040에서 웹 페이지 주석에서 파싱을 하며 4012B5는 printf이고 401150에서 파싱된 문자열을 입력받아 switch문을 통하여 여러 동작을 수행한다.

[02] 어떤 새로운 코드 구조가 main 함수에 추가 됐는가?

위에서 확인했듯이 6-4에는 for문 구조가 추가 되었다.

[03] 이 실습의 HTML 함수 파싱이 기존 실습과 차이점은 무엇인가?

lab6-4 3

lab6-4 4

lab6-4 5

위를 살펴보면 웹 페이지 주석을 파싱하는 함수인 401040의 파라미터로 ecx를 받는 것을 확인할 수 있는데 이 파라미터는 위에서 for문으로 사용되는 값이다. 즉 401040의 파라미터로 0~5A0h 값을 받는 것을 확인할 수 있고 401040으로 가서 분석을 진행해 보면 Internet Explorer 7.50/pma%d를 확인할 수 있는데 아래의 _sprintf에 의하여 %d에 입력받은 파라미터인 0~5A0h값이 들어가는 것을 확인할 수 있었고 그 값은 InternetOpenA 함수에 의해 User-agnet로 사용된다. 뒷 내용은 6-3에서 분석했던 것과 동일하게 웹 페이지의 주석을 찾으면 그 다음 문자를 파싱한다.

[04] 프로그램이 얼마나 오래 동작하는가?(인터넷에 연결돼 있다고 가정함)

lab6-4 6

프로그램이 정상적으로 인터넷에 연결되어 있으면 웹 페이지 주석에서 주석 다음문자를 파싱한 뒤에 401150에서 Switch문으로 파싱된 문자를 입력받아 여러 행위를 수행하고 빠져나와 EA60h(60,000ms) 60초 동안 Sleep 하고 난 뒤에 eax를 1증가 시키고 var_C에 저장한 뒤 다시 되돌아가는데

lab6-4 7

var_C와 5A0h(1440)를 비교하여 var_C의 값이 5A0h(1440) 보다 작거나 같을 경우 다시 웹 페이지 주석에서 문자를 파싱하고 클 경우 eax를 0으로 초기화 하고 종료하는 것을 확인했다. 즉 1분동안 Sleep을 1440번 한 뒤에 종료한다는 의미이므로 24시간 동안 동작할 것이다.

[05] 이 악성코드에서 네트워크 기반의 행위(indicator)가 존재하는가?

새로운 User-Agent인 Internet Explorer 7.50/pma%d를 받는데 %d는 위에서 확인한 것처럼 프로그램이 실행되는 분을 받는다.

[06] 이 악성코드의 목적은 무엇인가?

이 악성코드는 인터넷 연결여부를 확인하여 연결이 되지 않으면 종료하고 연결이 되면 새로운 User-Agent인 Internet Explorer 7.50/pma%d (%d는 프로그램이 실행되는 동안의 시간(분)을 담음) 을 입력받은 웹 페이지 핸들을 가져와 읽고 주석을 찾아 주석파싱한다. 그리고 파싱된 문자를 파라미터로 입력하여 로컬 시스템에서 수행할 동작을 지정하는 Switch문에 사용하여 디렉터리를 생성하거나 삭제하고 파일을 복사하거나 레지스트리를 조작하고 100초간 Sleep하는 등의 동작을 수행한다. 이 프로그램은 종료되기 전까지 24시간 동안 동작할 것이다.

이번 장의 문제를 풀면서 어셈블리 형태를 보고 코드의 구조를 대략 파악하는 방법을 배울 수 있었다.