악성코드에 자주 사용되는 API 함수


DLL Injection에서 사용되는 API //특정 프로세스에 DLL Injection 실행 

OpenProcess   

VirtualAllocEx

WriteProcessMemory

LoadLibraryA

GetProcAddress

CreateRemoteThread 


Resource 섹션에 있는 리소스 사용 API //Resource 섹션에 암호화된 데이터를 해제하여 메모리에 기록

LoadResource   

SizeofResource 

LockResource 

FreeResource 

FindResourceA


특정 파일 이름 확인 //특정한 이름의 파일을 읽고, 생성하고, 기록하고, 복사 

WriteFile    

lstrcmpiA 

ReadFile 

DeleteFileA 

CreateFileA 

CopyFileA 

CreateProcessA 

FindFirstFileA 


레지스트리에 관련 API //레지스트리에 특정한 키의 생성과 삭제가 이루어짐

RegSetValueExA   

RegEnumValueA 

RegDeleteKeyA

RegCreateKeyExA

OpenProcessToken


암호화와 관련된 API //Resource 섹션에 암호화된 데이터를 해제하여 어딘가에 기록 

CryptCreateHash 

CryptHashData 

CryptGetHashParam 

CryptAcquireContextA


-------------------------------------------------------------------------------------------------------


File 관련 API 

WriteFile   

ReadFile 

CreateFile 

CopyFile 

MoveFile 


Thread 관련 API 

LoadLibrary  

CreateThread 

ResumeThread 

CreateRemoteThread 


로깅 관련 API

Mouse_event  

Keybd_event 

GetAsyncKeyState 


Internet 관련 API 

internetWriteFile

InternetConnect   


네트워크 관련 API

WSAStartup   

Gethostbyname 

Gethostbyaddr 

Socket 

Send Recv 

Inet_addr 


FTP 관련 API 

FtpOpenFile

FtpGetFileSize 


기타 API 함수 목록 

CreateMutex 

capCreateCaptureWindows 

ClientToScreen 



메모리 관련 함수

VirtualAlloc() //가상 메모리 할당

VirtualFree() //가상 메모리 해제

VirtualProtect() // 메모리 보호 설정 값 변경


-------------------------------------------------------------------------------------------------------


GetModuleFileName

- 현재 실행되고 있는 위치 구한다.


GetKeyboardType

- 현재 키보드 타입을 구한다.


GetLocaleinfo

- 현재 설정되어 있는 국가/지역에 대한 정보를 구한다.


CreateFile 

- 핸들값 반환 받는다.


WriteFile

- 핸들 값 받아서 파일을 쓴다. //CreateFile로 반환받은 핸들값을 통해 파일을 쓴다.(파일 수정/변조 등)


SetFileAttributes 

- 파일의 속성을 바꾼다.


GetTempPathA

- 경로 탐색 API


CreateFileA

- 파일 생성 API


Shellexecute


WinExec

- 생성 파일 실행 센스 API


GetStartupInfoA

GetModuleHandleA

- 파일의 위치를 구할 때 사용


RegopenKeyExA 

- 레지스트리를 열어볼 때 사용


CopyFileA

- 파일을 폴더로 복사시키는 역활


CreateServiceA

- 서비스등록


CreateProcessA 

- Cmd로 자가 삭제


FindResourceA

- 리소스 찾기


SizeofResource

- 크기검색


SizeofResource

- 첫 바이트 획득


-------------------------------------------------------------------------------------------------------


VMWARE

- magic_num : VMXh


VirtualBox

- \\\.\\VBoxMiniRdrDn

- VboxHook.dll


GetLogicalDrives

- 드라이브 찾기


GetDiskFreeSpaceExW

- 용량 정보를 가져온다. (VM의 경우 보통 20G)


-------------------------------------------------------------------------------------------------------


GetTickCount()

DWORD GetTickCount(VOID); // OS 부팅 후 msec(1/1000초) 단위로 시간을 돌려주는 함수

윈도우즈가 부팅된 후 1초에 1000씩 틱 카운트를 증가 시킨다.

카운트는 32비트값이므로 최대 49.7일간의 카운트를 유지할 수 있다.

특정 루틴 시작 전과 후의 시간 값을 측정하여 차이를 확인하고 Debugger가 존재하는 지 확인 .(SUB 명령어를 통해 비교)


-------------------------------------------------------------------------------------------------------


추가

malloc함수로 할당 할 수 있는 메모리블럭의 크기에는 한계가 있다.(약 256MB까지 밖에안된다고 들음)

VirtualAlloc함수는 대용량의 메모리를 다룰때 사용한다.



정리가 잘 되어있어서 나름 읽고 재정리



출처: http://vencedor.tistory.com/9 [vencedor]



여기도 정리 잘되어있음

추가 : http://hack4profit.com/archives/204

'Programming > WinAPI' 카테고리의 다른 글

[API함수] WaitForSingleObject  (0) 2017.03.02
WinAPI WinMain과 윈도우 클래스  (0) 2017.02.08
WinAPI 핸들에 대한 이해  (0) 2017.02.08
API란?  (0) 2017.02.08
WinAPI 윈도우의 특징  (0) 2017.02.08


DWORD WINAPI WaitForSingleObject(

  __in  HANDLE hHandle,            //오브젝트 핸들

  __in  DWORD dwMilliseconds    // 타임아웃 시간

);


쉽게말해 어떤 오브젝트가 시그널 상태가 되거나 타임아웃이 되면 제어를 돌려준다.


이게 무슨말이냐면 WaitForSingleObject는 지정한 오브젝트의 현재 상태를 채크를 한다.

그 오브젝트가 비시그널 상태일 때는 호출한 스레드는 대기상태가 되고

오브젝트가 시그널 상태가 되거나 타임아웃 시간이 경과하는 것을 기다린다.


파라미터

hHandle

오브젝트의 핸들을 지정한다.

핸들을 지정할 수 있는 함수의 해설을 참조


핸들이 대기 상태로 있을때에는 그 핸들을 없앴을 경우 그 함수의 동작은 정의되지않는다.

(If this handle is closed while the wait is still pending, the function's behavior is undefined. : 동작을 안한다는 이야기인가? -.-)

Windows NT/2000:이 핸들에 SYNCHRONIZE 억세스 권을 할당해야만 된다. 상세한 내용은  MSDN 라이브러리의 「Standard Access Rights」를 참조


dwMilliseconds

타임아웃 시간을 밀리초(ms)단위로 지정한다.

타임아웃 시간을 경과하면 오브젝트가 비시그널 상태에 있더라도 제어권을 돌려준다.(WaitForSingleObject함수에서 더 이상 대기하지않는다.)

0으로 지정하면 이 함수는 지정된 오브젝트의 상태를 확인하고 바로 다음 행을 실행한다.

INFINITE를 지정하면 오브젝트가 시그널 상태가 될때까지 기다린다.





대강적으로 어떤 스레드를 불러오고 그 스레드가 종료될때까지 기다리는것? 인 것 같다.

'Programming > WinAPI' 카테고리의 다른 글

악성코드에 자주 사용되는 함수목록  (0) 2017.03.04
WinAPI WinMain과 윈도우 클래스  (0) 2017.02.08
WinAPI 핸들에 대한 이해  (0) 2017.02.08
API란?  (0) 2017.02.08
WinAPI 윈도우의 특징  (0) 2017.02.08

1. WinMain함수


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)

- hInstance : 프로그램의 인스턴스 핸들

- hPrevInstance : 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들

없는 경우에는 NULL이 되어야하며 Win32에서는 항상 NULL

- lpCmdLine : 명령행으로 입력된 프로그램 인수. DOS의 argv에 해당

- nCmdShow : 프로그램이 실행될 형태 / 최소화, 보통모양 등이 전달




2. 윈도우 클래스

윈도우 클래스는 windows.h에 정의되어있는 구조체이다.


typedef struct tagWNDCLASS

{

    UINT        style;

    WNDPROC     lpfnWndProc;

    int         cbClsExtra;

    int         cbWndExtra;

    HINSTANCE   hInstance;

    HICON       hIcon;

    HCURSOR     hCursor;

    HBRUSH      hbrBackground;

    LPCSTR      lpszMenuName;

    LPCSTR      lpszClassName;

} WNDCLASS;


- style : 윈도우의 스타일을 정의

- lpfnWndProc : 메시지가 발생할 때마다 여기에 지정된 함수가 호출됨

- cbClsExtra, cbWndExtra : 윈도우가 내부적으로 아주 특수한 목적에 사용되는 공간. 사용되지 않으면 0으로 지정

- hInstance : 윈도우의 클래스를 사용하는 프로그램의 번호

- hIcon, hCursor : 윈도우가 사용할 마우스와 출력되는 아이콘을 정함.

- hbrBackground : 윈도우의 배경색상 정의, 보통 GetStockObject라는 함수를 사용하여 윈도우에서 기본적으로 제공하는 브러쉬를 사용

- lpszMenuName : 프로그램이 사용할 메뉴 지정

- lpszClassName : 윈도우 클래스의 이름을 정의. CreateWindow함수에 전달되며 

CreateWindow함수는 윈도우 클래스에서 정의한 값을 참조하여 윈도우를 생성한다

'Programming > WinAPI' 카테고리의 다른 글

악성코드에 자주 사용되는 함수목록  (0) 2017.03.04
[API함수] WaitForSingleObject  (0) 2017.03.02
WinAPI 핸들에 대한 이해  (0) 2017.02.08
API란?  (0) 2017.02.08
WinAPI 윈도우의 특징  (0) 2017.02.08

1. 핸들(Handle)이란?

- 32비트 정수값을 가짐

- 대상끼리의 구분을 위해 문자열보다 정수를 사용하는게 더 빠르고 편하기 때문



2. 특징

- 정수값을 가지며 대부분 32비트이다.

- 핸들끼리는 서로 중복되지 않아야한다.

- 핸들은 운영체제가 발급해주고, 사용자는 사용만하면 된다.

- 핸들의 데이터형은 HWND, HPEN, HBRUSH 등이 있다.





쉽게말해 조종할수있는(?) 자동차(프로그램) 핸들을 생각하면 될거같다.

'Programming > WinAPI' 카테고리의 다른 글

악성코드에 자주 사용되는 함수목록  (0) 2017.03.04
[API함수] WaitForSingleObject  (0) 2017.03.02
WinAPI WinMain과 윈도우 클래스  (0) 2017.02.08
API란?  (0) 2017.02.08
WinAPI 윈도우의 특징  (0) 2017.02.08

1. API란 특정 시스템을 위한 함수 집합을 가리키는 말



2. SDK(Software Development Kit)

- MS에서 제공하는 윈도우용 프로그램 개발 킷이다.

- ??? 아직 감이 잘 안잡힘



3. 클래스 라이브러리

- 복잡하고 양이 많은 API함수들을 더 쉽고 빠르게 사용하기 위해 클래스로 잘 포장하여 클래스 위주로 프로그램을 작성하는 방법

- 윈도우 프로그래밍에 필요한 클래스들을 미리 만들고 그 클래스를 조립하듯이 프로그래밍하는 것이 특징

- 예시로 MS의 MFC가 있다.



4. 배우는 이점

- 운영체제에 이해하기 쉬워지고 접근성 증가

- 알아야 내가 하는 리버싱작업이 수월할 것(?)





팁) API와 MFC의 비유

API는 공사장의 모래, 시멘트라면

MFC는 벽돌로 만들어진 건물이나 구조물


MFC는 API를 체계적으로 잘 정리하여 만든 C++라이브러리이다

'Programming > WinAPI' 카테고리의 다른 글

악성코드에 자주 사용되는 함수목록  (0) 2017.03.04
[API함수] WaitForSingleObject  (0) 2017.03.02
WinAPI WinMain과 윈도우 클래스  (0) 2017.02.08
WinAPI 핸들에 대한 이해  (0) 2017.02.08
WinAPI 윈도우의 특징  (0) 2017.02.08

+ Recent posts