杀毒软件源代码 #include "FunDef.h" int main (int argc, char *argv[]) if (!(ScanFileVXER(argv[1]))) if (!(ProcessVXER())) if (!(RegDelVXER())) return 0; BOOL ScanFileVXER (char *FileName) WIN32_FIND_DATA FindFileData; long FileOffset=0x1784; //偏移地址 unsigned char Contents[]={ //获取系统目录的完整路径 //获得文件的完整路径 //进行特征码的匹配工作 while (FindNextFile(hFind,&FindFileData)) //继续查找文件 //以"."和".."除外 if (GetFullPathName(FindFileData.cFileName,lpBufferLength,lpBuffer,NULL)!=LOW) ScanVXER(FindFileData.cFileName,FileOffset,FileLength,Contents); } printf("File Total:%d\n",count); //打印出查找到的文件各数 BOOL ScanVXER ( fp=fopen(V_FileName,"rb"); //以二进制只读方式打开 fseek(fp,V_FileOffset,SEEK_SET); //把文件指针指向特征码在文件的偏移地址处 BOOL ProcessVXER (void) EnablePrivilege(SE_DEBUG_NAME); //提升权限 //枚举进程 for (i=LOW;i<(int)cbNeeded_1/4;i++) strcpy(FileName,"C:\\WINNT\\system32\\"); //查找进程中是否包含FileName CloseHandle(hProc); //关闭进程句柄 BOOL KillProc (DWORD *ProcessID) //打开由ProcessVXER传递的进程PID if (hProc) CloseHandle(hProc); BOOL EnablePrivilege(PCHAR PrivilegeName) if(!OpenProcessToken(hProc,TOKEN_ADJUST_PRIVILEGES,&hToken)) if(!LookupPrivilegeValue(NULL,PrivilegeName,&TP.Privileges[0].Luid)) TP.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; if(!AdjustTokenPrivileges(hToken,FALSE,&TP,sizeof(TP),0,0)) CloseHandle(hToken); int RegDelVXER (void) //打开注册表的Run项 if (!ret==ERROR_SUCCESS) //删除键值windows auto update。 if (ret==ERROR_SUCCESS) RegCloseKey(hkey); //关闭打开的注册表项 void Usage (char *Parameter) fprintf(stderr,"============================================================================\n"
{
if (argc==1)
{
Usage(argv[0]);
return 0;
}
{
printf("ScanFileVXER() GetLastError reports %d\n",erron);
return 0;
}
{
printf("Processes() GetLastError reports %d\n",erron);
return 0;
}
{
printf("RegDelVXER() GetLastError reports %d\n",erron);
return 0;
}
}
{
int count=LOW;
HANDLE hFind;
BOOL returnvalue=FALSE;
DWORD lpBufferLength=HIGH;
char lpBuffer[HIGH]={LOW};
char DirBuffer[MAX_PATH];
int FileLength=0x77; //长度
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)!=LOW)
{
if (SetCurrentDirectory(DirBuffer)!=LOW) //设置为当前目录
{
hFind=FindFirstFile(FileName,&FindFileData); //查找文件
if (hFind==INVALID_HANDLE_VALUE)
{
printf("FindFirstFile() GetLastError reports %d\n",erron);
FindClose(hFind);
return returnvalue;
}
else
{
count++;
if (GetFullPathName(FindFileData.cFileName,lpBufferLength,lpBuffer,NULL)!=LOW)
printf("FilePath:%s\n",lpBuffer);
else
{
printf("GetFullPathName() GetLastError reports %d\n",erron);
FindClose(hFind);
return returnvalue;
}
}
ScanVXER(FindFileData.cFileName,FileOffset,FileLength,Contents);
}
}
{
count++;
if (strcmp(".",FindFileData.cFileName)==LOW||strcmp("..",FindFileData.cFileName)==LOW)
{
printf("File no include \".\" and \"..\"\n");
exit(0);
}
printf("Next FilePath:%s\n",lpBuffer);
else
{
printf("GetFullPathName() GetLastError reports %d\n",erron);
FindClose(hFind);
exit(0);
}
FindClose(hFind); //关闭搜索句柄
returnvalue=TRUE;
return returnvalue;
}
char *V_FileName, //文件名
long V_FileOffset, //偏移地址
int V_Length, //长度
void *V_Contents) //具体内容
{
int cmpreturn=LOW;
char FileContents[HIGH]={LOW};
BOOL returnvalue=FALSE;
FILE *fp=NULL;
if (fp==NULL)
{
printf("File open FAIL\n");
fclose(fp);
return returnvalue;
}
fread(FileContents,V_Length,1,fp);//读取长度为特征码长度的内容
cmpreturn=memcmp(V_Contents,FileContents,V_Length);
//进行特征码匹配。失败返回FALSE
if (cmpreturn==LOW)
{
printf("File Match completely\n"); //打印文件匹配消息
strcpy(name,V_FileName); //将文件名保存在全局变量name中
exit(0);
}
else
returnvalue=FALSE;
}
{
DWORD lpidProcess[1024],cbNeeded_1,cbNeeded_2;
HANDLE hProc;
HMODULE hMod[1024];
char ProcFile[MAX_PATH];
char FileName[FIVE]={LOW};
BOOL returnvalue=FALSE;
int Pcount=LOW;
int i;
if (!(EnumProcesses(lpidProcess,sizeof(lpidProcess),&cbNeeded_1)))
{
printf("EnumProcesses() GetLastError reports %d\n",erron);
return 0;
}
{
//打开找到的第一个进程
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)))
{
printf("[%5d]\t%s\n",lpidProcess[i],ProcFile); //输出进程
//可以考虑将其注释掉,这样就不会输出进程列表了
Pcount++;
strcat(FileName,name);//把文件名+路径复制到FileName变量中
if (strcmp(FileName,ProcFile)==LOW)
{
//如果包含,则杀掉。KillProc为自定义的杀进程函数
if (!(KillProc(lpidProcess[i])))
{
printf("KillProc() GetLastError reports %d\n",erron);
CloseHandle(hProc);
exit(0);
}
DeleteFile(FileName); //进程杀掉后,再将文件删除
}
}
}
}
}
printf("\nProcess total:%d\n",Pcount); //打印进程各数
returnvalue=TRUE;
return 0;
}
{
HANDLE hProc;
BOOL returnvalue=FALSE;
hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);
{
//终止进程
if (!(TerminateProcess(hProc,0)))
{
printf("TerminateProcess GetLastError reports %d\n",erron);
return returnvalue;
}
}
returnvalue=TRUE;
return returnvalue;
}
{
HANDLE hProc,hToken;
TOKEN_PRIVILEGES TP;
hProc=GetCurrentProcess(); //打开进程的一个伪句柄
{
return FALSE;
}
{
CloseHandle(hToken);
return FALSE;
}
TP.PrivilegeCount=1;
{
CloseHandle(hToken);
return FALSE;
}
return TRUE;
}
{
HKEY hkey;
DWORD ret=LOW;
ret=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\",
0,
KEY_ALL_ACCESS,
&hkey);
{
printf("Register Open FAIL\n");
exit(0);
}
ret==RegDeleteValue(hkey,"windows auto update");
printf("Success Delete\n");
else
{
printf("Delete FAIL\n");
exit(0);
}
return 1;
}
{
char *Path="%SystemRoot%\\system32\\";
" 杀毒软件的简单实现\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\n\n"
"注意事项:\n"
"本程序只是简单介绍杀毒软件的编写方法,所以有很多不完善的地方,包括:\n"
"1,本程序是以冲击波蠕虫做的例子\n"
"2,文件遍历只搜索了%s目录下的文件\n"
"3,本程序不能查杀冲击波变种\n\n"
"本程序只是用做代码交流,如有错误,还请多多包含!\n"
"============================================================================"
,Parameter,Parameter,Path);
}
杀毒软件源代码
精选 转载上一篇:用户层关闭杀毒软件安全保护
下一篇:垃圾代码生成
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【Linux】安装杀毒软件(漏洞扫描工具)ClamAV 并配置邮件告警操作指南linux 运维 服务器 ClamAV 杀毒软件
-
卡巴斯基杀毒软件源代码
卡巴斯基杀毒软件源代码
卡巴斯基 职场 源代码 休闲 -
杀毒软件
国外 1.卡巴斯基免费版 2.avast 3.熊猫安全 4.诺顿安全 5.F-Secure AntiVirus 杀毒引擎 6.AVG 7.Wise Care 365 8.NOD32
software 360杀毒 360安全卫士 安全卫士 -
通杀所有杀毒软件代码
在计算机杀毒软件目录中新建一个文件即可。代码正在编写中。哈哈。很简单,也很有效。
软件 杀毒 代码 通杀 所有 -
python杀毒软件代码 python制作杀毒软件
目录简介环境原理加载ShellCode定位特征码 Base64编码绕过简介之前学习免杀都是使用Metasploit自带的编码进行,从未成功过。也使用过GitHub上别人提供的免杀方法,最近学习并实践发现绕过国内的杀毒软件貌似并不难,本文使用手工分析特征码,使用base64编码绕过杀毒软件静态分析。虽然使用的方法比较简单,但对实际做免杀及免杀研究还是有一定意义的。环境Windows 10
python杀毒软件代码 Python SC加载器 Python免杀 特征码绕过 360火绒Defender免杀