악성코드에 자주 사용되는 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)
(new, delete연산자도 결국 malloc(), free()를 호출해서 메모리를 잡고 풀어준다. 결국 new나 malloc()나 같다.)
VirtualAlloc()함수는 대용량의 메모리를 다룰때 사용한다.
윈95/98 기준으로 프로세스는 4기가 주소공간을 할당 받는다.
이중 실제 응용프로그램이 사용 가능한건 2GB이며, 주소공간은 단지 주소공간일뿐 실제 물리메모리에 로드되는건 아니다.
커밋을 시켜야 물리메모리에 해당 주소공간에 할당된다.
VirtualAlloc() 으로 메모리를 할당-사용-해제하는 절차는 아래와 같다.
1) 프로세스 주소공간 내에 일정주소공간 예약(Reserve). (이 주소공간은 다른 할당루틴이 사용불가능)
2) 해당 주소공간중 실제 사용할 부분에 물리적 메모리(보조기억장치, RAM 등...)를 매핑(Commit)
3) Commit된 부분에 대하여 메모리 사용(Commit되지 않은 부분을 사용하면 페이지폴트 발생)
4) 주소공간에 매핑된 물리적 메모리를 해제(Decommit), 이때 데이터는 소멸된다.
5) 할당했던 주소공간 해제(Release). 이제 이 주소공간은 다른 할당루틴이 사용가능
Commit된 영역의 데이터에 대한 캐싱은 시스템에서 한다. 캐싱을 못하게도 할 수도 있다.
malloc()으로 할당한 블럭은 페이지 단위로 나뉘고, 실제 페이지가 사용되는 시점에 해당 페이지가 자동으로 Commit 된다.
만약 RAM의 용량을 넘어서는 페이지들이 사용되면 적절한 페이지들이 보조기억장치(하드디스크의 가상메모리)로 페이지아웃
그리고 Free()를 호출하면 연쇄적으로 Decommit, Release 된다.
추가 확인------------------------------------------------------------------------------------------------
GetFileAttributesW
NtCreateFile
GetFileType
SetFilePointer
NtWriteFile
GetFileAttributesW
SetFileAttributesW
'Analysis > API' 카테고리의 다른 글
커널이미지 구성요소 접두어 (Ldr, Rtl, Zw...) (0) | 2016.06.22 |
---|---|
GetTickCount를 이용한 안티 디버깅 (0) | 2016.04.15 |
안티 디버깅 (0) | 2016.04.11 |
GetEnvironmentVariable - 환경변수 호출 (0) | 2016.04.05 |