//安盾检测系统 msz
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//#include <conio.h> //出现getch( )报错请引用这个头文件
#define N 100
#define msz mszz
//#define getch getchar
void pauseandclearscreen( )//暂停屏幕及清屏
{
// system("cls");
// getch( );
}
//菜单输出函数的声明
void mainMenu( );//主菜单
void assetMenu( ) ;//资产管理的子菜单
void defenseMenu( );//入侵防御的子菜单
void logMenu( );//日志分析的子菜单
//主模块及各子模块主控函数的声明
void mainMenuAction( ) ;//对主菜单选择进行处理
void assetMenuAction( ) ;//对资产管理模块选择进行处理
void defenseMenuAction( ) ;//对入侵防御模块选择进行处理
void logMenuAction( ) ;//对日志分析选择进行处理
//资产管理模块对应的函数的声明
int host_number[100] = {0};//主机号,这是用来存放全局变量主机号的数组,你也可以用其他方式实现
char host_system[100][100];//主机系统,这是用来存放全局变量主机系统的数组,你也可以用其他方式实现
void asset_manage(int number, char * system);//创建主机资产
void change_asset(int number, char * system);//重新配置主机资产
void check_asset();//查询主机资产
//入侵防御模块对应的函数的声明
int file_check(char * file, char muma);//文件查杀
int risk_call(char * web, char * risk);//高危系统请求
int file_change(int loc, char result_c, char *result_modify); //文件篡改
//日志分析模块对应的函数的声明
void asset_record() ;//资产配置日志
void risk_record() ; //入侵防御日志
void init_asset_record();//初始化资产配置日志
void init_risk_record() ;//初始化入侵防御日志
//主函数
int main( )
{
mainMenuAction( );
return 0;
}
//资产发生修改的结构体及全局变量,这里定义全局变量是为了日志分析模块做数据准备
int CheckAsset = 0;
struct asset{
int type;
int id;
char host_result[100];
}AssetRecord[100];
//入侵行为记录的结构体及全局变量 ,这里定义全局变量是为了日志分析模块做数据准备马诗哲
int CheckIncur = 0;
struct incur{
int type;
char incur_result[100];
}IncurRecord[100];
//主菜单
void mainMenu( )
{
printf("------------------------------\n");
printf("| 安盾检测系统 |\n");
printf("------------------------------\n");
printf("| 1、资产管理 |\n");
printf("| 2、入侵防御 |\n");
printf("| 3、日志分析 |\n");
printf("------------------------------\n");
printf("| 0、退出系统 |\n");
printf("------------------------------\n");
//在这里用printf函数编写显示主菜单的代码
}
//资产管理部分的子菜单
void assetMenu( )
{
printf("------------------------------\n");
printf("| 资产管理 |\n");
printf("------------------------------\n");
printf("| 1、创建主机资产 |\n");
printf("| 2、重新配置主机 |\n");
printf("| 3、查询主机资产 |\n");
printf("------------------------------\n");
printf("| 0、返回主菜单 |\n");
printf("------------------------------\n");
//在这里用mprintf函数编写显示产管理子菜单的代码
}
//入侵防御部分的子菜单
void defenseMenu( )
{
//在这里用sprintf函数编写显示入侵防御子菜单的代码
printf("------------------------------\n");
printf("| 入侵防御 |\n");
printf("------------------------------\n");
printf("| 1、文件查杀 |\n");
printf("| 2、高危系统调用 |\n");
printf("| 3、文件篡改 |\n");
printf("------------------------------\n");
printf("| 0、返回主菜单 |\n");
printf("------------------------------\n");
}
//日z志分析部分的子菜单
void logMenu( )
{
printf("------------------------------\n");
printf("| 日志分析 |\n");
printf("------------------------------\n");
printf("| 1、资产配置日志 |\n");
printf("| 2、入侵防御日志 |\n");
printf("| 3、初始化入侵日志 |\n");
printf("| 4、初始化资产日志 |\n");
printf("------------------------------\n");
printf("| 0、返回主菜单 |\n");
printf("------------------------------\n");
//在这里用printf函数编写显示日志分析子菜单的代码
}
//msz
//对主菜单选择进行处理
void mainMenuAction( )
{
int mChoice = 0;
char c;
while(1)
{
mainMenu( );
printf(" 请选择执行功能0~3:") ;
scanf("%d",&mChoice);
if( 0 == mChoice )
exit(0);//退出系统
else if( 1 == mChoice )
{
system("cls");//清屏msz
assetMenuAction( );
}
else if( 2 == mChoice )
{
system("cls");//清屏
defenseMenuAction( );
}
else if( 3 == mChoice )
{
system("cls");//清屏
logMenuAction( );
}
else
{
printf(" 没有这项功能。\n");
printf(" 请核对后重新选择\n");
printf(" 按任意键继续.....\n") ;
scanf("%c",&c); //getch( );
system("cls");//清屏
}
fflush(stdin);//清除键盘缓冲区,以便下一次输入
}//end of while(1)
}
//对资产管理模块进行处理
void assetMenuAction( )
{
int mChoice = 0;
char c;
while(1)//msz
{
assetMenu( );
printf(" 请选择资产管理功能0~3:") ;
scanf("%d",&mChoice);
if( 0 == mChoice )
{
system("cls");
return;//返回主控函数
}
else if( 1 == mChoice )
{
int name;
char system[100];
printf("请输入你要创建的主机号和主机系统,中间用空格分开\n");
printf("请输入一个数和一个字符串\n");
scanf("%d %s", &name, system);
asset_manage(name, system);
AssetRecord[CheckAsset].type = 1;//这里操作开始定义的全局变量,是为了日志分析模块记录做准备的,1代表是创建资产的操作
AssetRecord[CheckAsset].id = name;//这里操作开始定义的全局变量,是为了日志分析模块记录主机号做准备的
strcpy(AssetRecord[CheckAsset].host_result, system);//这里操作开始定义的全局变量,是为了日志分析模块记录操作系统类型做准备的
CheckAsset++;//为便于下次资产日志存放
printf("按任意键继续......\n");
getch( );//随机接收一个输入,让屏幕暂停等待,让用户能看程序结果
pauseandclearscreen( );
}
else if( 2 == mChoice )
{
int name;
char system[100];
printf("请输入你要修改的主机号,以及修改后的系统名称\n");
printf("二者用空格分隔\n");
scanf("%d %s", &name, system);
change_asset(name, system);
AssetRecord[CheckAsset].type = 2;//这里操作开始定义的全局变量,是为了日志分析模块记录做准备的,2代表是修改资产的操作
AssetRecord[CheckAsset].id = name;//这里操作开始定义的全局变量,是为了日志分析模块记录主机号做准备的
strcpy(AssetRecord[CheckAsset].host_result, system);//这里操作开始定义的全局变量,是为了日志分析模块记录操作系统类型做准备的
CheckAsset++;//为便于下次资产日志存放
printf("按任意键继续......\n");
getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果
pauseandclearscreen( );
}
else if( 3 == mChoice )
{
printf("你正在查看你名下的主机资产\n");
check_asset();
AssetRecord[CheckAsset].type = 3;//这里操作开始定义的全局变量,是为了日志分析模块记录做准备的,3代表是查看资产的操作
CheckAsset++;//为便于下次资产日志存放
printf("按任意键继续......\n");
getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果
system("cls");
}
else
{
printf(" 没有这个分支程序。\n");
printf(" 请核对后重新选择\n");
printf(" 按任意键继续......\n") ;
scanf("%c",&c); //getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果
system("cls");//清屏
}
fflush(stdin);//清除键盘缓冲区,以便下一次输入
}//end of while(1)
}
//入侵防御模块的处理
void defenseMenuAction( )
{
int mChoice = 0;
char c;//msz
while(1)
{
defenseMenu( );
printf(" 请选择入侵防御功能0~3:") ;
scanf("%d",&mChoice);
if( 0 == mChoice )
{
system("cls");
return;//返回主控函数
}
else if( 1 == mChoice ) //文件查杀
{
char muma = 'a';//假设这是一个木马文件的关键字,只要包含该关键字即认为是木马
char file[100];
int result;
printf("系统将帮你校验文件是否包含木马病毒...\n");
printf("请上传一个文本文件\n");
scanf("%s", file);
IncurRecord[CheckIncur].type = 1;//这里操作开始定义的全局变量,是为了日志分析模块记录做准备的,1代表是文件查杀的操作
strcpy(IncurRecord[CheckIncur].incur_result, file);//这里操作开始定义的全局变量,是为了日志分析模块记录用户操作记录做准备的
CheckIncur++;//为便于下次资产日志存放
result = file_check(file, muma);
if(result)
printf("该文件包含木马,请不要上传\n");
else
printf("该文件不包含木马,请放心使用\n");
printf("按任意键继续......\n");
getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果
system("cls");
}
else if( 2 == mChoice )
{
char web[100];
char risk[] = "www.risk.com";//设置一个黑名单网站,可以自定义
int result;
printf("系统正在监控你的请求...\n");
printf("请输入一个网址\n");
scanf("%s", web);
IncurRecord[CheckIncur].type = 2;//这里操作开始定义的全局变量,是为了日志分析模块记录做准备的,2代表是高危请求的操作
strcpy(IncurRecord[CheckIncur].incur_result, web);//这里操作开始定义的全局变量,是为了日志分析模块记录用户操作记录做准备的
CheckIncur++;//为便于下次资产日志存放
result = risk_call(web, risk);
if(result)
printf("该网站高危,请停止访问\n");
else
printf("该网站安全,可正常访问\n");//msz
printf("按任意键继续......\n");
getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果
system("cls");
}
else if( 3 == mChoice )
{
char result_c, result_modify[1000];
int loc, result;
printf("系统将帮你检测是否发生文件篡改!\n");
printf("请先编写一个文件......\n");
printf("请输入一个字符串......\n");
scanf("%s", result_modify);
IncurRecord[CheckIncur].type = 3;//m这里操作开始定义的全局变量,是为了日志分析模块记录做准备的,3代表是文件篡改的操作
strcpy(IncurRecord[CheckIncur].incur_result, result_modify);//z这里操作开始定义的全局变量,是为了日志分析模块记录用户操作记录做准备的
CheckIncur++;//s为便于下次资产日志存放
printf("请您尝试对文件进行修改,本系统将校验文件是否发生真正的修改...\n");
printf("请输入想要修改的字符位置和字符,用空格分隔。注意输入的位置不要发生数组越界!\n");
scanf("%d %c", &loc, &result_c);
result = file_change(loc, result_c, result_modify);
if(result == 1)
{
printf("警告!发生文件篡改......\n");
result_modify[loc] = result_c;
printf("将您的文件篡改为%s,请核对\n", result_modify);
}
else
printf("本文件未发生任何修改......\n");
printf("按任意键继续......\n");
getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果
system("cls");
}
else
{
printf(" 没有这个循环程序。\n");
printf(" 请核对后重新选择\n");
printf(" 按任意键继续......\n") ;
scanf("%c",&c); //getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果
system("cls");//清屏
}
fflush(stdin);//清除键盘缓冲区,以便下一次输入
}
}
//日志分析模块的处理
void logMenuAction( )
{
int mChoice = 0;
char c;
while(1)
{
logMenu( );
printf(" 请选择日志分析功能0~4:") ;
scanf("%d",&mChoice);
if( 0 == mChoice )
{
system("cls");
return;//返回主控函数 msz
}
//msz
else if( 1 == mChoice )
{
printf("你正在查看资产配置日志\n");
printf("\n");
asset_record();
printf("\n");
printf("按任意键继续......\n");
getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果 msz
system("cls");
}
else if( 2 == mChoice )
{
printf("你正在查看入侵防御日志\n");
printf("\n");
risk_record();
printf("\n");
printf("按任意键继续......\n");
getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果
system("cls");
}
else if( 3 == mChoice )
{
char c;
printf("你确定要清空资产相关全部日志吗?\n");
printf("确定请输入y,否则输入n\n");
getchar(); //过滤掉回车符
scanf("%c", &c) ;
if(c == 'y')
{
init_asset_record();
printf("资产日志已清空!\n");
}
printf("按任意键继续......\n");
getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果 msz
system("cls");
}
else if( 4 == mChoice )
{
char c;
printf("你确定要清空入侵防御相关全部日志吗?\n");
printf("确定请输入y,否则输入n\n");
getchar(); //过滤掉回车符
scanf("%c", &c);
if(c == 'y')
{
init_risk_record();
printf("资产日志已清空!\n");
}
printf("按任意键继续......\n");
getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果 msz
system("cls");
}
else
{
printf(" 没有这个循环程序。\n");
printf(" 请核对后重新选择\n");
printf(" 按任意键继续......\n") ;
scanf("%c",&c); //getch( ); //随机接收一个输入,让屏幕暂停等待,让用户能看程序结果
system("cls");//清屏
}
fflush(stdin);//清除键盘缓冲区,以便下一次输入
}
}
//创建主机资产
void asset_manage(int number, char * system)
{
for(int i=0;i<=99;i++){
if(host_number[i] ==0) {
host_number[i] = number;
strcpy(host_system[i], system);
pauseandclearscreen( );
break;
}
}
}
//重新配置主机
void change_asset(int number, char * system)
{
for(int i=0;i<=99;i++){
if(host_number[i] ==number) {
host_number[i] = number;
strcpy(host_system[i], system);
pauseandclearscreen( );
break;
}
}
}
//查询主机资产
void check_asset()
{
for(int i=0;i<=99;i++) {
if(host_number[i] !=0) {
printf("%d %s\n",host_number[i],host_system[i]);
}
}
}
//文件查杀
int file_check(char * file, char muma)
{
for(int j=0;file[j]!='\0';j++) {
if(file[j] == muma) {
return 1;
}
}
return 0;
}
//高危系统请求
int risk_call(char * web, char * risk)
{
int weblen = strlen(web);
int risklen = strlen(risk);
if(weblen != risklen) return 0;
for (int i=0;i<weblen;i++) {
if (web[i]!=risk[i]) return 0;
}
return 1;
}
//文件篡改
int file_change(int loc, char result_c, char *result_modify)
{
if (result_modify[loc] == result_c) return 0;
else {
result_modify[loc] = result_c;
return 1;
}
}
//资产配置日志 msz
void asset_record()
{
printf("资产日志类型\tid\t系统\n");
for(int i=0;i<100;i++) {
if(AssetRecord[i].id!=0||AssetRecord[i].type==3){
int a=AssetRecord[i].type;
if(a==1) printf("创建主机资产\t%d\t%s\n",AssetRecord[i].id,AssetRecord[i].host_result);
if(a==2) printf("修改主机资产\t%d\t%s\n",AssetRecord[i].id,AssetRecord[i].host_result);
if(a==3) printf("查看主机资产\t-\t-\n");
}
}
}
//入侵防御日志 msz
void risk_record()
{
printf("入侵日志类型\t记录\n");
for(int i=0;i<100;i++) {
int a=IncurRecord[i].type;
if(a==1) printf("文件查杀\t%s\n",IncurRecord[i].incur_result);
if(a==2) printf("高危请求\t%s\n",IncurRecord[i].incur_result);
if(a==3) printf("文件篡改\t%s\n",IncurRecord[i].incur_result);
}
}
//初始化资产相关日志 msz
void init_asset_record()
{
for(int i=0;i<100;i++) {
AssetRecord[i].id=0;
memset(AssetRecord[i].host_result,'\0',sizeof(AssetRecord[i].host_result));
AssetRecord[i].type=0;
}
}
//初始化入侵防御相关日志 msz
void init_risk_record()
{
for(int i=0;i<100;i++) {
IncurRecord[i].type=0;
memset(IncurRecord[i].incur_result,'\0',sizeof(IncurRecord[i].incur_result));
IncurRecord[i].type=0;
}
}
-