Practical Malware Analysis 6-2
실습 6-2
실습 환경 : Vmware (Windows 7 32 bit)
사용한 툴 : IDA Free 5.0
[01] main 함수가 호출하는 첫 번째 서브루틴은 무슨 오퍼레이션을 수행하는가?
IDA로 파일을 열어 main 함수를 살펴보면 main 함수가 첫 번째로 호출하는 서브루틴인 0x401000을 확인할 수 있다.
0x401000을 분석해보면 실습 6-1에서 확인했던 if구조의 인터넷 연결을 확인하는 서브루틴임을 확인할 수 있다.
[02] 0x40117F에 위치한 서브루틴은 무엇인가?
이 역시 실습 6-1에서 확인하였던 printf구조와 동일하다.
[03] main 함수가 호출하는 두 번째 서브루틴은 무엇인가?
main 함수가 두 번째 호출하는 서브루틴인 sub_401040을 살펴보면
InternetOpenA 함수를 사용하여 WinNet 라이브러리 사용을 초기화 하고 User-Agent를 설정한다. 그리고 InternetOpenUrlA 함수를 사용하여 오픈할 URL의 핸들을 가져오고 그 결과 값을 hfile에 넣은 뒤 비교하는데 결과 값이 0이면 Error메시지를 출력하고 결과 값이 0이 아니면 점프한다.
점프하였을 경우 살펴보면 InternetReadFile 함수를 볼 수 있는데 이 함수는 InternetOpenUrlA 함수에서 얻은 핸들에서 데이터를 읽는 함수이다. 즉 InternetOpenUrlA 함수가 오픈한 웹 사이트를 읽는 것을 알 수 있다. InternetReadFile 함수는 데이터를 성공적으로 읽으면 0이 아닌 값을 반환하는데 아래의 jnz문을 통해 점프하게 된다.
점프하게되면 이런 형태의 구조를 볼 수 있는데 InternetReadFile 함수로 읽은 데이터 버퍼를 하나씩 <!–와 비교하는데 이는 웹 페이지의 주석 문자이다. 즉 이 서브루틴은 웹 페이지를 읽어 주석 문자를 확인한 뒤 주석 문자를 발견하면 주석 안의 데이터를 출력하는 서브루틴 같다.
[04] 이 서브루틴에서 사용한 코드 구조는 어떤 유형인가?
위에서 확인 했듯이 InternetOpenUrl 함수로 오픈한 핸들을 InternetReadFile 함수로 웹 페이지를 읽고 주석 문자인 <!–을 비교하여 확인한 뒤 같으면 <!– 바로 다음 문자를 반환한다.
[05] 이 프로그램에서 네트워크 기반의 행위(indicator)가 존재하는가?
InternetOpen 함수로 User-Agnet를 설정하고 InternetOpenUrl 함수로 URL핸들을 가져오는 2가지 네트워크 기반의 행위가 존재한다.
[06] 이 악성코드의 목적은 무엇인가?
인터넷 연결 설정을 확인하여 연결이 되어있지 않으면 Error메시지를 띄우고 연결이 되어있으면 User-Agnet를 설정하고 URL에서 웹 페이지를 가져온다. 그 뒤 웹 페이지의 주석인 <!–을 찾아서 그 다음에 오는 문자를 파싱한다.