2012년 8월 29일 수요일

윈도우즈 시스템 프로그래밍 [7] - 프로세스간 통신 (IPC)




윈도우즈 시스템 프로그래밍을 공부하면서 정리한 글입니다.



7장.  프로세스간 통신 (IPC) 1



I. 프로세스간 통신(IPC)의 의미



- IPC = Inter-Process Communication ( 프로세스 사이의 통신 )
- 통신 : 기본적으로 데이터를 주고 받는 행위
- 대부분 하나의 프로그램 = 하나의 프로세스 but  여러개의 프로세스를 가진 프로그램도 종종 있음



1. 프로세스 사이에서 통신이 이뤄지기 위한 조건


- 서로 통신하고자 하는 프로세스가 만날 수 있는 여건 (공유하는 메모리 영역이 존재)이 되어야 함
- 여건이 허락되지 않으면 전화 or 메신저 같은 보조 수단이 필요


2. 프로세스들이 서로 만날 수 없는 이유


- 프로세스는 서로 데이터를 주고 받을 만한 접선 장소가 없기 때문에 데이터 주고받는 것은 불가능
- 프로세스는 자신에게 할당된 메모리 공간 이외의 접근은 불가능


3. 프로세스들이 만나지 못하게 디자인한 이유 


- 안정성을 높이기 위해





II. 메일 슬롯 방식의 IPC




1. 메일 슬롯 (Mail Slot)의 원리


- 파이프와 더불어 대표적인 IPC 기법
- 메일 슬롯 : 편지를 넣을 가느다란 우체통의 입구
- 기본 원리 : 데이터를 주고받기 위해 프로세스가 우체통을 마련


2. 메일 슬롯 (Mail Slot) 구성을 위해 필요한 요소


 ① Receiver가 준비해야할 것

HANDLE CreateMailslot (
   LPCTSTR lpName,
   DWORD nMAXMessageSize,
   DWORD lReadTimeout,
   LPSECUritY_ATTRIBUTES lpSecurityAttributes
);

1) lpName : 생성하는 메일 슬롯의 이름
   - 주소의 기본 형식 : \\computer name\mailslot\[path] name

2) nMaxMessageSize : 메일 슬롯의 버퍼 크기를 지정
   - 0을 전달할 경우 시스템이 허용하는 최대 크기로 지정

3) lReadTimeout : 최대 블로킹 시간을 ms 단위로 전달
   - 메일 슬롯은 전소오딘 데이터를 읽기위해 파일 입/출력 함수 ReadFile 함수를 이용
   - 메일 슬롯이 비어 있다면 데이터가 채워질 때 까지 Blocking 상태에 놓임 
   - 0을 전달하면 데이터가 있든 없든 블로킹 상태를 빠져나와 다음 단계를 실행
   - MAILSLOT_WAIT_FOREVER을 인자로 전달하면 데이터가 존재할 때 까지 블로킹 상태에 놓임

4) lpSecurrityAttributes : 핸들의 상속 여부를 지정

5) 함수의 변환 타입 : HANDLE
   => 메일 슬롯은 커널에 의해 관리되는 리소스 이므로 커널 오브젝트가 생성되며, 그 핸들이 반환됨


② Sender가 준비해야 할 것

- 메일 슬롯 이름을 알아야 함 (&주소 ( 디렉토리))

ex)

   HANDLE hMailSlot;
   hMailSlot=CreateFile("\\\\.\\mailslot\\ ", ...);   // 파일을 생성하거나 개방할때 사용
   CHAR message[50];
   WriteFile(hMailSlot, message, ...);

- CreateFile, WriteFile : Windows에서 제공하는 파일 관련 시스템 함수 ( <-> ANSI 표준함수)
- CreateFile을 통해 메일 슬롯으로 보내기 위한 통로(리소스)를 형성
   => 데이터 전송을위한 Data Stream을 형성
- 메일 슬롯은 파일이 아니지만 파일 입/출력 함수를 사용
   -> Windows 파일 시스템을 기반으로 구현되어 있기 때문

- 주소 골격 : \\computername\mailslot\[path] name
- 주소에서 'mailslot' 부분은 바뀌지 않음
- computername에 '.'의 의미 : 로컬 컴퓨터






- Sender 프로세스는 우체통(메일 슬롯)의 주소를 알고 있어야 데이터 전송이 가능
- 메일 슬롯 = 메모리 공유 역할
- 데이터 전송이 양방향이 아닌 단방향(우체통)
- 여러개의 리시버가 같은 주소를 가질 수 있음
   => 센더가 그 주소로 전송하면 모든 메일 슬롯에 데이터 전송이 가능 (브로드 케스팅)





- CreateFile : 파일 만들거나 오픈
- WriteFile : 파일에 데이터 작성

- IPC 메일 슬롯을 이용하지 않고 파일만으로 데이터를 주고받을 수 있음
   ex)
       프로세스 A가 파일 a.txt를 만들고 프로세스 B가 a.txt를 읽음
        => BUT 안정성에 문제가 있음 ->  메일 슬롯을 이용

ex) Receiver.cpp

#define SLOT_NAME _T("\\\\.\\mailslot\\mailbox");

int _tmain(int argc, LPTSTR argv[]) {
   HANDLE hMailSlot;
   TCHAR messageBox[50];
   DWORD bytesRead;

   hMailSlot = CreateMailSlot (
      SLOT_NAME,
      0,
      MAILSLOT_WAIT_FOREVER,
      NULL
   );

   ReadFile(hMailSlot, messageBox, sizeof(TCHAR)*50, &bytesRead, NULL);

   closeHandle(hMailSlot);   // UC 1줄여 커널 오브젝트의 소멸을 도움

ex) Sender.cpp

#define SLOT_NAME _T("\\\\.\\mailslot\\mailbox");

int _tmain(int argc, LPTSRT argv[]) {
   HANDLE hMailSlot;
   TCHAR message[50];
   DWORD bytesWritten;

   hMailSlot=CreateFile (  //  Receiver과 연결을 만들기 위해
      SLOT_NAME,
      GENERIC_WRITE,  // 여기서부터
      FILE_SHARE_READ,
      NULL,
      OPEN_EXISTING,
      FILE_ATTRIBUTE_NORMAL,
      NULL   // 여기까지 거의 고정
   );

   _fgetts(message, sizeof(messsage)/sizeof(TCHAR), stdin);
   WriteFile(hMail, message, _tcslen(message)*sizeof(TCHAR), &bytesWritten, NULL);

   CloseHandle(hMailSlot);

- 메일 슬롯 주소에서 '.'는 컴퓨터 자신, '*'는 모든 컴퓨터
  => 브로드 케스팅 이용 가능




III. Signaled vs Non-Signaled => 커널 오브젝트의 상태




1. 상태에 대한 이해


- 상태(state)라는 용어를 사용하는 이유는 변하기 때문
- signaled (신호를 받는 상태)와 Non-Signaled (신호를 받지 않는 상태)
- 커널 오브젝트를 구성하는 멤버 변수 중 하나가 상태 정보를 저장함
   => TRUE : Signaled   FALSE : Non-Signaled


2. 프로세스 커널 오브젝트 상태 (state)에 대한 이해


- 프로세스가 생성될 때 프로세스 커널 오브젝트가 생성됨
   => 처음 상태 : Non-signaled
- 프로세스가 종료되면 Signaled 상태로 변경됨
- Signaled 된 커널 오브젝트는 Non-Signaled 상태로 변경되지 않음
   => 종료된 프로세스를 다시 재개하지 못하기 때문 ( 새로운 프로세스를 다시 실행해야 함)


3. 커널 오브젝트의 두가지 상태를 확인하는 용도의 함수


- 커널 오브젝트의 상태를 확인하는 대표적인 함수

ex) DWORD WaitForSingleObject (
         HANDLE hHandle,   // 확인하려는 커널 오브젝트의 핸들
         DWORD dwMilliseconds   // 커널 오브젝트가 Signaled 될 때 까지 기다릴 수 있는 최대 시간
       );

- dwMilliseconds에 IFINITE 인자 전달시 Signaled 될 때까지 기다림

- WaitForSingleObject 반환값
   1) WAIT_OBJECT_0 : 커널 오브젝트가 Signaled 되었을 때 반환값
   2) WAIT_TIMEOUT : Signaled 되지 않고 dwMillisecons가 다 되었을 때
   3) WAIT_ABANDONED : 오류 발생시



4.  커널 오브젝트의 상태 확인이 필요한 상황

      => 하나의 프로그램이 여러개의 프로세스로 구성되는 경우 (CPU 코어 수의 증가에 따라)


- 이런 상황에서 WaitForSingleObject 사용







참고 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍. 윤성우 저 





2012년 8월 28일 화요일

악성코드 분석 - Bundestrojaner [4]




트로이 목마 악성코드를 분석한 과정과 결과를 정리하려고 합니다.








winsys32.sys 파일을 생성하는 함수를 빠져 나오면



 LoadLibrary 함수를 통해 advapi32.dll를 로드하며



CreateService 함수의 주소를 획득하는 명령어가 나타납니다.

CreateService 함수는 advapi32.dll에 포함되어 있으며,




이 함수를 통해 winsys32.sys라는 서비스를 생성합니다.



이 함수를 빠져 나오면 winsys32.sys의 Filetime을 mfc422.dll의 FileTime으로 변경합니다.

이것 또한 분석가를 혼란스럽게 만들기 위한 작업니다.



이후 Skype, SkypePM 등의 파일을 실행하며 스카이프와 관련된 작업을 하는것 처럼 보입니다만

정확한 분석은 하지 못했습니다.


skype 문자들을 넘기고 나면 403FE5에서 4017C0으로 이동해



시스템의 Temp 디렉토리에 접근하고, ~acrd~tmp.exe 라는 새로운 파일을 만듭니다.

이 파일이 어떠한 작업을 하는지 알 수 없지만 나중에 다시 분석해 볼 생각입니다.



마지막으로 기존의 악성코드 파일은 MoveFileExW 함수를 통해 자기자신을 삭제됩니다.



그 후 ExitProcess 함수 호출로 프로세스를 종료하게 됩니다.




Bundestrojaner이 정확하게 어떤 활동을 하는지는 분석하지 않았지만

Dropper인 secuinist.exe가 어떤 함수를 통해 어떤 파일을 만들며

악성코드 제작자가 분석을 어렿게 하기 위해 몇가지 트릭을 설치해 놓은것까지 확인할 수 있었습니다.
다음번엔 Bundestrojaner가 어떻게 타겟의 정보를 획득하고

서버로 전송하는지에 대한 분석을 진행하도록 하겠습니다.


참고 : http://resources.infosecinstitute.com/german-trojan/


악성코드 분석 - Bundestrojaner [3]






트로이 목마 악성코드를 분석한 과정과 결과를 정리하려고 합니다.








이제 GetSystemDirectory 함수를 통해 시스템 디렉토리 정보를 얻고 동적 분석에서 확인했던 파일들을 만들기 시작합니다.


분석하시다 보면 4010F0에서 파일을 생성하는 CreateFile 함수를 통해



동적 분석에서 확인한 C:\Windows\System32\mfc42ul.dll 파일을

생성하는 것을 확인하실 수 있습니다.

지금 만들어진 mfc42ul.dll은 빈 파일로, 4010CF 함수에서 파일 내용이 채워집니다.


조금 더 내려가면 403EC4에서 함수 401E60이 Call 되며 이때 mfc42.dll와 mfc42ul.dll이 스택에 저장되어 전달됩니다.

mfc42.dll은 System32 폴더에 존재하는 윈도우즈 dll이며, mfc42ul.dll은 악성코드가 만든 파일 이름입니다.


함수 401E60에서는 401DC0로 Call이 발생하며



여기서 GetFileTime 함수를 통해 mfc42.dll의 Filetime 정보를 얻습니다.


이제 00401E10 함수에서



함수 SetFileTime을 통해 mfc42ul.dll의 파일시간이 방금 얻은 mfc42.dll의 FileTime으로 변경됩니다.


setFileTime 함수가 실행되기 전에 system32 폴더에서 확인하면 Data Modified 시간이 다르지만


setFileTime 함수 실행 후  Data Modified 시간이 같은 것을 확인할 수 있습니다.

이러한 기법을 사용해서 포렌식에서 새로 만들어진 파일을 찾기 어렵게 만듭니다.



다시 F8을 통해 명령어를 분석하다 보면 403F0E에서 OllyDbg의 코멘트 winsys32.sys를 보실 수 있습니다.

악성코드 제작자는 종종 이런 코멘트를 통해 악성코드 분석가의 관심을 다른곳으로 돌려

잘못된 코드 분석을 유도하기도 하지만, 이 경우엔 그렇지 않았습니다.



여기서 조금 내려가면 403F37에서 4011C0으로의 함수 Call이 있으며 여기서 isWow64 함수를 통해

프로세스가 32비트 환경에서 실행되는지 64비트 환경에서 실행되고 있는지를 확인합니다.


다음은, mfc42ul.dll의 경우 처럼 winsys32 파일을 생성하는 함수가 호출되며



호출되는 과정에서 403F49에서 Call이 실행되고 계속 step into 하면 401160 에서 32비트 환경에서

만들어진 프로그램을 64비트 환경에서 실행하기 위해 리다이렉트되는 것을 막는 함수가 보입니다. (정확하지 않음)

이 과정은 winsys32.sys가 32비트 혹은 64비트 환경에서만 작동하는 드라이버이기 때문에 발생하고 있는것 같습니다.

이 과정은 악성코드의 작용과는 별 상관이 없으므로 넘어가도록 하겠습니다.



계속 명령어를 넘기다 보면 CreateFile 함수 Call이 일어나며 System32 폴더에 빈 winsys32.sys 파일을 만듭니다.


위의 사진은 system32 폴더에 생성된 winsys32.sys 파일입니다.



mfc42ul.dll 의 내용을 채울때 처럼 WriteFile 함수를 통해서 winsys32.sys 파일의 내용을 채웁니다.



악성코드 분석 - Bundestrojaner [4] :


악성코드 분석 - Bundestrojaner [2]





트로이 목마 악성코드를 분석한 과정과 결과를 정리하려고 합니다.





정적 분석은 디버깅 프로그램을 이용해 진행됩니다.




먼저 IDA PRO로 악성코드를 로드해 보면 304개의 함수가 사용되었다는 것을 확인하실 수 있습니다.

따라서 모든 함수를 분석하는 것은 불가능하며, 단지 악성코드가 무엇을 하는가에 초점을 맞춰 분석할 것입니다.



이제 OllyDbg로 악성코드를 로드하면 엔트리 포인트 404EDD에서 코드가 시작됩니다.

F8키를 누르면 다음 명령어로 넘어가게 되고, Call 명령어가 있을 때 F7을 누르면 Call 된 함수 안으로 들어가게 됩니다.



조금만 내려가면 익숙한 윈도우 함수 Kernel32.GetVersion 의 Call을 보실 수 있습니다

악성코드는 가장 먼저 운영체제 시스템 버전 정보를 확인하는것을 확인할 수 있습니다.



그리고 나선 Kernel32.GetCommandLine 함수의 Call을 보실 수 있습니다.

참고로 GetCommandLine 함수는 현재 프로세스의 명령행 인수를 조사해 리턴합니다.




하지만 GetCommandLine 함수 이전에 5개의 Call을 보실 수 있을겁니다.

함수의 구체적인 이름은 나오지 않고 함수의 주소만 나와 있는데,

4061C1, 40500A, 405EAC, 그리고 다시 40500A, 마지막으로 408BC6 의 함수를 Call 합니다.

또한 이 함수들 안에는 또다른 함수들이 있으며, 그 함수들중 알려진 API가 나오기 전에 많은 함수 Call이 있을 수 있습니다.

아까도 말씀 드렸듯이 이 프로그램에는 304개의 함수가 사용되었으며, 모든 함수를 분석하는 것은 매우 힘든 작업입니다.

그래서 여기서는 4061C1, 40500A와 같은 함수 Call 이 나왔을 때 IDA를 이용해 IDA가 분석한 함수 이름을 파악하고

sub_ADDRESS 와 달리 의미 있는 함수 이름을 알려주면, 함수가 어떤 역할을 하는구나 정도만

확인하고 넘어가는 방법을 사용하겠습니다.




IDA를 통해 확인해 보시면 첫번째 함수 4061C1를 제외한 다른 함수들은 IDA가 적절한 이름을 제공해 줍니다.





그래서 4061C1만 F7 키를 통해 분석해 보면 heap 메모리를 할당하는 것을 확인하실 수 있습니다.

heap 메모리를 할당하는 함수는 다른 대부분의 실행파일에서도 확인하실수 있는 함수이며

이 악성코드에서는 별다른 작용을 하지 않습니다.

함수의 분석이 끝나면, IDA에서 4061C1 함수의 이름을 heap_alloc 같은 이름으로 바꿔서 분석한 함수의 역할을 기록해 둡니다.

IDA에서 분석한 나머지 함수들의 이름은 다음과 같습니다.

40500A fast_error_exit
405EAC mtinit
408BC6 ioinit

이런 분석 방법은 분석을 지체되지 않게 하며, 결론을 빠르게 낼 수 있도록 도와줍니다.





다시 GetCommandLineA 함수로 돌아와서 분석을 계속합니다.




다음에 나온 함수는 GetStartupInfoA (404F8E) 와 GetModuleHandle (404FB1) 입니다.

이 함수들을 통해 프로그램의 진짜 시작위치에 근접했다는 것을 아실 수 있습니다.




하지만 그 다음 두개의 함수를 Call하고나서 프로그램이 종료되는것을 확인하실 수있습니다.



IDA에서 403D50와 4080AE의 함수 이름을 확인해 보시면 각각 WinMain과



 __exit 함수라는 것을 확인하실 수 있습니다.

이렇게 IDA를 통해 함수의 이름을 확인하실 수 있기에 저는 IDA를 자주 이용합니다.

꼭 IDA 사용법을 공부하셔서 더 많은 것을 얻으시길 바랍니다.

따라서 403D50이 이 프로그램의 진짜 시작이며 모든 프로그램의 시작인 WinMain 함수를

Call한다는 것을 확인하실 수 있습니다.

이젠 403D50에서 F7을 눌러 Step Into 합니다.

Step Into를 하고 나면 바로 403A20 함수를 Call 하는 것을 확인 하실수 있습니다.

403A20 함수에서 악성코드는 System32 디렉토리에 Write 할 수 있는지를 확인하고 가능하지 않다면 프로세스를 종료합니다.




Wirete 여부의 확인은 CreateFileA 함수의 리턴값을 통해 확인합니다.

여기서 리턴값은 00000030 이므로 파일이 만들어진 것을 확인하고 프로세스를 종료하지 않습니다.




이후 Write 여부 확인을 위해 만든 파일( C:\WINDOWS\system32\~pgp~.tmp )을 지우는 것을 확인하실 수 있습니다.

따라서 동적 분석에서 확인했던 C:\WINDOWS\system32\~pgp~.tmp 파일을 만든 이유를 여기서 확인하실 수 있습니다.


악성코드 분석 - Bundestrojaner [3] :

http://carpedm20.blogspot.kr/2012/08/bundestrojaner-3.html


참고 : http://resources.infosecinstitute.com/german-trojan/


2012년 8월 27일 월요일

악성코드 분석 - Bundestrojaner [1]




트로이 목마 악성코드를 분석한 과정과 결과를 정리하려고 합니다.





먼저 트로이 목마란 정상적인 기능을 하는 프로그램으로 가장해 다른 프로그램 안에 숨어 있다가

그 프로그램이 실행될 때 자신을 활성화 하는 악성 프로그램을 말합니다.

자기 자신을 복사하지 않는다는 점에서 바이러스와는 다른 특성을 나타냅니다.



분석할 트로이 목마는 Bundestrojaner 로 독일 정부가 감시 목적으로

개발한 악성코드라고 알려져 있습니다.



악성코드의 파일명은 scuinist.exe 입니다.

참고로 scuinis는 Skype Capture Unit Installer의 약자이며, Skype Capture Unit은

DigiTask라는 회사에서 개발한 상업적 악성 프로그램의 이름이었습니다.

DigiTask는 독일에 본사를 두고 있으며, The German Customs Investigation Bureau

(독일 소비자 조사국)에서 감시 서비스를 2백만 유로에 매입했다고 합니다.

이와 관련된 정보는 http://www.f-secure.com/weblog/archives/00002250.html

를 참고하시기 바랍니다.



Bundestrojaner는 합법적인 소프트웨어 업데이트로 가장하고, 스카이프 전화 기록,

인터넷 사용 정보, 메신저 대화 내용, 키 입력 등을 기록할 수 있습니다.

또한 마이크와 웹캠과 같은 하드웨어를 활성화 시킬 수 있으며, 사진을 찍거나,

음성을 녹음해 서버로 전송합니다.




아래의 악성코드 분석을 이해하기 위해서는 어셈블리, 리버싱에 대한 기본 지식을 필요로 합니다.


분석 환경은 Windows XP service pack 2 이며 VMware 가상머신을 사용했습니다.

먼저 동적 분석에 사용된 툴은 Sysinternals Autoruns, Regshot, Process Explorer,

Process Monitor, CaptureBat, Wireshark 입니다.

각 프로그램의 간략한 소개를 먼저 드리겠습니다.


Autorun : 윈도우 운영체제의 모든 시작 프로그램을 관리할 수 있는 프로그램

RegShot : 레지스트리의 변경 사항을 확인할 수 있는 프로그램

* 레지스트리 : 모든 윈도우의 설정값과 윈도우에 설치된 응용 프로그램의 설정값을 저장하는 데이터 베이스

Process Explorer : 현재 실행중인 프로세스의 상세한 정보를 확인할 수 있는 프로그램입니다.

Process Monitor : 프로세스, 레지스트리, 파일 시스템, 네트워크의 활동을 모니터링 할 수 있는 프로그램입니다. (low level)

CaptureBat : 프로세스 모니터와의 기능이 유사하며, 악성코드가 하드 디스크에서 지운 파일을 저장해 둡니다. (high level)


악성코드를 실행하고 나면, 위의 도구들을 통해 동적 분석을 할 수 있습니다.


악성코드를 실행하기 전의 상태를 regshot, autorun, winalysis 등을 통해 모두 저장해 둡니다.

동적 분석을 시작할 준비가 되면 악성코드를 실행하고 CaptureBat과 Process Monitor로

악성코드가 어떤 활동을 하는지를 기록합니다.



위의 그림은 악성코드를 실행하고 악성코드의 활동을 켑쳐한 후의 사진입니다.

여기서 악성코드가 실행되고 나서 자기 자신을 삭제하는 것을 확인하실 수 있습니다.


먼저 Winalysis로 시스템의 변화를 살펴보면


위의 사진에서처럼 몇 개의 파일이 생성되었으며, winsys32라는 서비스가 등록된 것을 확인하실 수 있습니다.



Process Monitor에서 불필요한 과정들을 필터로 지우고 중요한 과정을 하이라이트 하면


winalysis를 통해서 확인했던 파일들이 생성된 것을 확인하실 수 있습니다.




CaptureBat의 분석 결과를 통해 low level이 아닌 high level 관점에서 분석하면

위의 파일들이 생성된 것을 확인하실 수 있습니다.

또한 악성코드가 어떤 레지스트리를 등록했는지도 확인하실 수 있습니다.




마지막으로 Autorun에서 winsys32라는 새로운 드라이버가 등록된 것을 확인하실 수 있습니다. 




위의 분석 결과를 종합해 보면 악성코드는 실행된 후 dll파일과 sys 파일을 윈도우 시스템 폴더에 생성합니다.

생성된 파일들의 절대 경로는 C:\WINDOWS\system32\mfc42ul.dll 와 C:\WINDOWS\system32\winsys32.sys 입니다.


정확한 이유는 모르지만 C:\WINDOWS\system32\~pgp~.tmp 라는 빈 파일을 생성합니다.


또한 Temp 디렉토리에 파일을 복사한 것을 확인하실 수 있습니다.

복사한 파일의 절대 경로는 C:\Documents and Settings\arvind\Local Settings\Temp\~acrd~tmp~.exe 입니다.

아직까지 이 파일들이 정확히 어떤 행동을 하는지는 정확하게 알 수 없습니다.

마지막으로 드라이버로 보이는 키를 레지스트리에 등록하고, 모든 활동이 끝나면 자기 자신을 삭제합니다.


간단히 요약하면, 악성코드 파일은 몇 개의 파일을 하드에 설치하고 레지스트리를 등록하며

설치가 완료되면 자기 자신을 삭제하며, 이외의 다른 행동은 하지 않는 것 같습니다.

이와 같은 행동을 하는 악성코드를 드로퍼(Dropper)라고 부릅니다.

드로퍼란 파일에는 바이러스 코드가 없으나 실행 시 바이러스를 생성하고 시스템을 감염 시키는 악성코드를 말합니다.

이제 정적 분석을 통해 동적 분석 결과를 확인하며, 다른 행동을 하는지 알아볼 것입니다.


악성코드 분석 - Bundestrojaner [2] :

http://carpedm20.blogspot.kr/2012/08/bundestrojaner-2.html


참고 : http://resources.infosecinstitute.com/german-trojan/