简单API练手:(1)复制自身程序到windows目录和系统目录下;(2)获得系统的相关信息。
1.复制自身程序到windows目录和系统目录下:
1 #include <windows.h> 2 #include <stdio.h> 3 #include <string.h> 4 5 void CopySelf(); 6 7 int main(){ 8 CopySelf(); 9 return 0; 10 } 11 void CopySelf(){ 12 char szSelfName[MAX_PATH]={0}; 13 char szWindowsPath[MAX_PATH]={0}; 14 char szSystemPath[MAX_PATH]={0}; 15 16 GetModuleFileName(NULL,szSelfName,MAX_PATH); 17 GetWindowsDirectory(szWindowsPath,MAX_PATH); 18 GetSystemDirectory(szSystemPath,MAX_PATH); 19 20 strcat(szWindowsPath,"\\backdoor.exe"); 21 strcat(szSystemPath,"\\backdoor.exe"); 22 23 CopyFile(szSelfName,szWindowsPath,FALSE); 24 CopyFile(szSelfName,szSystemPath,FALSE); 25 }
相关API介绍:
1>获得自身程序所在路径的API定义:
DWORD GetModuleFileName{ HMODULE hModule, //handle to module LPTSTR lpFilename, //file name of module DWORD nSize //size of buffer };
三个参数,分别如下:
hModule:该参数在获得自身程序时使用为NULL。
lpFilename:该参数指定一个字符型的缓冲区,用于保存程序自身所在的路径。
nSize:该参数指定缓冲区的大小。
2>获得Windows目录的API的定义:
UINT GetWindowsDirectory{ LPTSTR lpBuffer, //buffer for Windows directory UINT uSize //size of directory buffer };
两个参数,分别如下:
lpBuffer:指定一个字符型的缓冲区,用于保存Windows目录的路径。
uSize:指定缓冲区的大小。
3>获得系统目录的API函数的定义:
UINT GetSystemDirectory{ LPTSTR lpBuffer, //buffer for system directory UINT uSize //size of directory buffer };
两个参数,分别如下:
lpBuffer:指定一个字符型的缓冲区,用于保存系统目录的路径。
uSize:指定缓冲区的大小。
4>拷贝文件的API函数的定义:
BOOL CopyFile{ LPCTSTR lpExistingFileName, //name of an existing file LPCTSTR lpNewFileName, //name of new file BOOL bFailIfExists //operation if file exists };
三个参数,分别如下:
lpExistingFileName:指向一个已存在文件的路径,即原文件路径。
lpNewFileName:指向一个新的文件的位置,即欲拷贝到的文件的目的路径。
bFailIfExists:一个布尔型参数,如果参数为TRUE,若目的文件已存在则返回,复制失败;如果参数为FALSE,,若目的文件已存在则强行覆盖原有的文件。
2.获得系统的相关信息:
1 #include <windows.h> 2 #include <stdio.h> 3 4 void GetSysInfo(); 5 6 int main(){ 7 GetSysInfo(); 8 return 0; 9 } 10 void GetSysInfo(){ 11 char szComputerName[MAXBYTE]={0}; 12 char szUserName[MAXBYTE]={0}; 13 unsigned long nSize=MAXBYTE; 14 OSVERSIONINFO OsVer; 15 16 OsVer.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); 17 GetVersionEx(&OsVer); 18 19 if(OsVer.dwPlatformId==VER_PLATFORM_WIN32_NT){ 20 if(OsVer.dwMajorVersion==5&&OsVer.dwMinorVersion==1) 21 printf("Windows XP %s \r\n",OsVer.szCSDVersion); 22 else if(OsVer.dwMajorVersion==5&&OsVer.dwMinorVersion==0) 23 printf("Windows 2K \r\n"); 24 }else{ 25 printf("Other System \r\n"); 26 } 27 28 GetComputerName(szComputerName,&nSize); 29 printf("Computer Name is %s \r\n",szComputerName); 30 31 nSize=MAXBYTE; 32 GetUserName(szUserName,&nSize); 33 printf("User Name is %s \r\n",szUserName); 34 }
相关API介绍如下:
1>获取操作系统版本:
BOOL GetVersionEx{ LPOSVERSIONINFO lpVersionInfo //version information };
一个参数,如下:
lpVersionInfo:指向一个OSVERSIONINFO结构的指针。
typedef struct _OSVERSIONINFO{ DWORD dwOSVersionInfoSize; //结构体大小 DWORD dwMajorVersion; //主版本号 DWORD dwMinorVersion; //次版本号 DWORD dwBuildNumber; DWORD dwPlatformId; //平台ID TCHAR szCSDVersion[128]; //补丁包 }OSVERSIONINFO;
dwPlatformId的取值有3个,而现在主要使用一个,即VER_PLATFORM_WIN32_NT。
2>获取计算机名称:
BOOL GetComputerName{ LPTSTR lpBuffer, //computer name LPDWORD lpnSize //size of name buffer };
两个参数,分别如下:
lpBuffer:保存计算机名称缓冲区。
lpnSize:保存缓冲区的长度,该参数是一个输入/输出参数。
3>获取当前用户名称:
BOOL GetUserName{ LPTSTR lpBuffer, //name buffer LPDWORD nSize //size of name buffer };
两个参数,分别如下:
lpBuffer:保存当前用户名称的缓冲区。
nSize:保存缓冲区的长度,该参数是一个输入/输出参数。