1.复制自身程序到windows目录和系统目录下:

 #include <windows.h>
#include <stdio.h>
#include <string.h> void CopySelf(); int main(){
CopySelf();
return ;
}
void CopySelf(){
char szSelfName[MAX_PATH]={};
char szWindowsPath[MAX_PATH]={};
char szSystemPath[MAX_PATH]={}; GetModuleFileName(NULL,szSelfName,MAX_PATH);
GetWindowsDirectory(szWindowsPath,MAX_PATH);
GetSystemDirectory(szSystemPath,MAX_PATH); strcat(szWindowsPath,"\\backdoor.exe");
strcat(szSystemPath,"\\backdoor.exe"); CopyFile(szSelfName,szWindowsPath,FALSE);
CopyFile(szSelfName,szSystemPath,FALSE);
}

相关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.获得系统的相关信息:

 #include <windows.h>
#include <stdio.h> void GetSysInfo(); int main(){
GetSysInfo();
return ;
}
void GetSysInfo(){
char szComputerName[MAXBYTE]={};
char szUserName[MAXBYTE]={};
unsigned long nSize=MAXBYTE;
OSVERSIONINFO OsVer; OsVer.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&OsVer); if(OsVer.dwPlatformId==VER_PLATFORM_WIN32_NT){
if(OsVer.dwMajorVersion==&&OsVer.dwMinorVersion==)
printf("Windows XP %s \r\n",OsVer.szCSDVersion);
else if(OsVer.dwMajorVersion==&&OsVer.dwMinorVersion==)
printf("Windows 2K \r\n");
}else{
printf("Other System \r\n");
} GetComputerName(szComputerName,&nSize);
printf("Computer Name is %s \r\n",szComputerName); nSize=MAXBYTE;
GetUserName(szUserName,&nSize);
printf("User Name is %s \r\n",szUserName);
}

相关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[]; //补丁包
}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:保存缓冲区的长度,该参数是一个输入/输出参数。

简单API练手:(1)复制自身程序到windows目录和系统目录下;(2)获得系统的相关信息。的更多相关文章

  1. 复制自身程序到windows目录和system32目录下

    功能:复制自身到windows目录和system32目录下. 参考代码: #include <stdio.h> #include <windows.h> void CopySe ...

  2. Xamarin入门,开发一个简单的练手APP

    之前周末用Xamarin练手做了个简单APP,没有啥逻辑基本就是个界面架子,MVVM的简单使用,还有Binding,Command的简单使用,还有一个稍微复杂点两个界面交互处理(子页面新增后关闭,父页 ...

  3. Socket程序从windows移植到linux下需要注意的

    )头文件 windows下winsock.h或winsock2.h linux下netinet/in.h(大部分都在这儿),unistd.h(close函数在这儿),sys/socket.h(在in. ...

  4. jquery数据验证插件(自制,简单,练手)

    一:最近项目中js数据验证比较多,为了统一风格,移植复用,于是顺手封装了Jquery的插件. (function($) { var defaults = { bugColor: '#FFCCCC', ...

  5. Cocos2d-Lua (练手) 微信打飞机

    学习下lua,目前入门级,使用版本为 v3.3 Final For Win,空闲时间不足,只能断断续续写点东西.   一.子弹效果          子弹只做了一种,扇形发射,可以增加扇形大小,子弹的 ...

  6. 第一个手写Win32窗口程序

    第一个手写Win32窗口程序 一 Windows编程基础 1 Win32应用程序的基本类型 1.1 控制台程序 不需要完善的Windows窗口,可以使用DOS窗口 的方式显示. 1.2 Win32窗口 ...

  7. WEB服务器4--IIS中网站、Web应用程序和虚拟目录

    网站.Web应用程序和虚拟目录 在IIS中可以创建网站.Web 应用程序和虚拟目录,以便与计算机网络上的用户共享信息. “网站”.“Web 应用程序”和“虚拟目录”这三个概念的关系如图 8‑1所示. ...

  8. 【开源】前端练手笔记,Chrome扩展应用程序(html+CSS+JS) (1)

    项目名称:github-notification 项目地址:https://github.com/WQTeam/github-notification 说明:本人打算抽时间学习前端(html + cs ...

  9. 微信小程序初体验,入门练手项目--通讯录,后台是阿里云服务器(一)

    内容: 一.前言 二.相关概念 三.开始工作 四.启动项目起来 五.项目结构 六.设计理念 七.路由 八.部署线上后端服务 同步交流学习社区: https://www.mwcxs.top/page/4 ...

随机推荐

  1. 关于CMD中延迟环境变量嵌套的实现方法

    在我昨天做的一个bat中(自动按日期重命名文件名)涉及到这方面的问题 以前涉及到这里时就想别的办法替代过去,今天好好扒出来说说: 实现变量嵌套的2种方法: 1,使用call实现变量嵌套 变量嵌套:即在 ...

  2. L204

    Riding a bike is good exercise and great fun. But what do you do with a bike after you outgrow it? N ...

  3. 回首C语言关键字(~回首向来萧瑟处~)

    开篇废话: 本文意在回顾 C 语言中的关键字,整理文件发现当时做的这些笔记还是蛮用心的,有临摹 前辈的足迹也有自己的理解和体会.时至今日2018已经跨过一半,对不起过去半年,今天 拿这篇关键字开篇,开 ...

  4. ubuntu16.04下安装opencv3.3

    最近重装了ubuntu16.04的系统,在给电脑配置好cuda8.0和cudnn6.0的版本后,开始重新安装opencv,在opencv的官网上发现最新版本3.3版本增加了很多深度学习方面的东西,果断 ...

  5. navicat链接mysql 8 出现 2015 authentication plugin 'caching_sha2_password' 错误

    使用mysql自带的 MySQL 8.0 Command Line Client - Unicode 登录, 然后使用命令: alter user 'root'@'localhost' identif ...

  6. Locust 关联

    关联的概念 用户登入后,服务器通常会给用户返回一个sessionID, 用户每次登陆,服务器返回的都会不同. 那么在自动化测试中,让系统自动登入账号就会被中断.那么我们可以通过取得服务器每次返回的se ...

  7. BZOJ1233 [Usaco2009Open]干草堆tower 和 BZOJ3549 [ONTAK2010]Tower

    题意 Problem 3549. -- [ONTAK2010]Tower 3549: [ONTAK2010]Tower Time Limit: 10 Sec  Memory Limit: 64 MBS ...

  8. System.Drawing.Drawing2D.LinearGradientBrush

    https://msdn.microsoft.com/en-us/library/system.drawing.drawing2d.lineargradientbrush(v=vs.110).aspx ...

  9. HDFS 和 YARN 的 HA 故障切换【转】

    来源:https://blog.csdn.net/u011414200/article/details/50336735 一 非 HDFS HA 集群转换成 HA 集群二 HDFS 的 HA 自动切换 ...

  10. Spring bean作用域

    全当知识要点记录了,大家随意踩踩. spring的作用域有以下几种singleton作用域prototype作用域request作用域session作用域global-session作用域 1. si ...