'Reverse Engineering/악성코드 분석 방법'에 해당되는 글 3건

  1. 2015.02.26 IDA 디컴파일러에서 Decompilation failure 될 때
  2. 2009.07.28 키로거 분석
  3. 2007.08.21 정적분석과 동적분석 (2)


IDA 디컴파일러(F5)로 디컴파일 하다보면 가끔 스택 문제도 실패하는 경우가 있습니다.


'Decompilation failure: xxxxxx: positive sp value has been found"



오류가 발생한 주소 앞 (여기서는 0x401018)으로 가서 [Alt + K] 로 Chage SP value 를 실행합니다.





이 값을 Current SP value 와 맞춰주면 됩니다.



다시 F5로 디컴파일 해보면 디컴파일된 내용이 나옵니다.




Posted by mstoned7

댓글을 달아 주세요


* 키로거

키로거(Keylogger)는 키입력 내용을 기록하는 프로그램이다.

키로거가 기업에서 직원이나 부모가 아이들을 모니터링하기 위해 사용되지만 누군가 개인 사생활을 파악하기 위해서 악용되기도 한다.

* 후킹

흔히 사용되는 키로깅 방식은 윈도우 API SetWindowsHookEx를 이용한 글로벌 메시지 훅과 드라이버를 이용한 키보드 후킹이 있다.

SetWindowsHookEx(

             Int idHook,                // 훅 종류

             HOOKPROC lpfn,          // 지정한 이벤트 발생시 처리하는 프로시저 주소

             HINSTANCE hMod,       // lpfn이 있는 DLL 의 시작 첫주소

             DWORD dwTreadID       // Thread ID

};


idHook 에 해당하는 내용은 다음과 같으며 악성코드는 보통 02(키보드), 07(마우스), 0D (키보드)를 후킹한다.

 

정의

내용

02

WH_KEYBOARD

키보드

03

WH_GETMESSAGE

 

04

WH_CALLWNDPROC

 

05

WH_CBT

 

06

WH_SYSMSGFILTER

 

07

WH_MOUSE

마우스

08

WH_HARDWARE

 

09

WH_DEBUG

 

10 (A)

WH_SHELL

 

11 (B)

WH_FOREGROUNDIDLE

 

12 (C)

WH_CALLWNDPROCRET

 

13 (D)

WH_KEYBOARD_LL

 저수준(Low-level) 키보드 입력 메시지 후킹

14 (E)

WH_MOUSE_LL

 

 

가로채는 키는 LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam) 형태가 된다.

 

LRESULT CALLBACK KeyboardProc(

Int code,                          // HC_ACTION(0), HC_NOREMOVE(3)

WPARAM wParam,                // virtual-key code

LPARAM lParam                  // extra information

);

 

다음 과정으로 키보드를 가로챈다.

1.       가로채는데 이용하는 DLL 로드

2.       SetWindowsHookExA 로 기능 가로채기

3.       입력 키 검사

4.       입력 키 내용 저장


후킹에 사용된 함수를 따라가면 키보드 입력을 가로채는 코드를 볼 수 있는데 이때 많이 사용되는 코드가 GetKeyboardState/GetKeyState와 ToAscii가 있다.

 

즉, 가장 널리 이용되는 기법은 GetKeyboardState를 통해 키 값을 얻고 ToAscii로 아스키코드로 변환하는 것이다.

 

1.       SetWindowsHookExA로 키보드 가로채기

2.       특수키 처리

3.       GetKeyboardState/GetKeyState ToAscii 존재

4.       키로그 내용 저장

 



* 키로거 판단

1.       Export 함수가 존재할 경우 함수를 분석

 

의외로 정직하게 API 이름을 사용하는 경우가 존재한다.


 




2. SetWindowsHookEx를 찾음

DLL 파일에서 SetWindowsHookEx를 이용하는 경우도 있지만
일부 키로거의 경우 EXE에서 DLL 주소를 얻어서 SetWindowsHookExA를 호출 하는 경우도 있다.

그림에서 보면 키보드(2)를 가로채며 후킹 주소는 0x01000100F 임을 알 수 있다.


3. SetWindowsHookExA로 가로챈 주소로 이동


4.       키보드 후킹 함수를 분석해 키로그 코드 찾음

GetKeyboardState ToAscii 는 가로챈 키 내용을 사람이 읽을 수 있는 텍스트 방식으로 변환할 때 사용된다. 아스키코드로 변환할 수 없는 코드들은 대체로 별도의 값으로 저장한다.




5.       키로그 내용을 저장하는 부분을 찾음




6.   이런 조건을 만족하면 키로거 가능성이 높으며 실제 테스트 해봄


SetWindowsHookEx 를 이용한 후킹은 키로거 외에 패스워드 탈취 프로그램, 게임 치팅 프로그램 등에서도 널리 이용된다.

Posted by mstoned7

댓글을 달아 주세요

악성코드 분석 방법에는 크게 정적분석과 동적분석이 있다.

* 정적분석(Static Analysis)

샘플 실행하지 않고 분석.

타백신 실행하기, 내부 스트링보기, 단순 디스어셈블(?)

* 동적분석(Dynamic Analysis)

샘플 실행하면서 분석

모니터링 프로그램(윈도우 악성코드의 경우 파일, 프로세스, 레지스트리, 네트워크)

* 코드분석

디스어셈블, 디버거, 리버스 컴파일러

초급, 중급, 고급은 바로 정적분석, 동적분석과 코드분석 실력의 차이

Posted by mstoned7

댓글을 달아 주세요

  1. 허건일 2011.08.30 16:23  댓글주소  수정/삭제  댓글쓰기

    정적분석에서 타백신실행하기는 무엇을 의미하시는건가요?

    • mstoned7 2011.08.30 23:51 신고  댓글주소  수정/삭제

      백신 프로그램으로 검사해서 진단명을 확인해 보는 겁니다. 아무래도 백신 업체 분석가 입장에서 작성해서 헷갈릴 수도 있겠네요