📄 checkexe.cpp
字号:
// Created:10-18-98
// By Jeff Connelly
// Checks to see if an executable is the original
// Originally wrote by Bob Jarvis
// Original source is ORIGSRC\CHECKEXE.C
#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <string.h>
//#include <random.h>
#include <stdlib.h>
static struct
{
unsigned char marker[16];
unsigned long checksum;
} check_exe_marker = { "CHECKEXE MARKER", 0L };
// Checks to see if this is the real original .EXE program
void CheckProgram(char* fn)
{
FILE* fp;
unsigned int c;
bool first_time = false;
int i;
char buffer[14];
unsigned long checksum = 0L;
unsigned long l, marker_offset;
unsigned char* charptr;
time_t tm;
printf ("Testing %s...\n", fn);
fp = fopen(fn, "r+b");
if (!fp)
{
printf ("Unable to open %s!\n", fn);
return;
}
setvbuf(fp, NULL, _IOFBF, 32767); // Try to get a 32K buffer
if (check_exe_marker.checksum == 0L)
{
printf ("First time testing %s\n", fn);
first_time = true;
c = fgetc(fp);
while (!feof(fp))
{
if (c == (unsigned int)check_exe_marker.marker[0])
{
fread (buffer, sizeof(buffer), 1, fp);
if (memcmp(buffer, &check_exe_marker.marker[1],
sizeof(buffer)) == 0)
{
marker_offset = ftell(fp) + 1L;
break;
}
fseek (fp, -13L, SEEK_CUR);
}
c = fgetc(fp);
}
if (feof(fp))
{
printf ("Unable to locate EXE marker!\n");
return;
}
// Change the marker field to random values
tm = time(NULL);
srand((unsigned int)tm);
for (i = 0; i < sizeof(check_exe_marker.marker); ++i)
check_exe_marker.marker[i] = (unsigned char)rand();
fseek (fp, marker_offset - sizeof(check_exe_marker.marker),
SEEK_SET);
fwrite (check_exe_marker.marker, sizeof(check_exe_marker.marker), 1,
fp);
}
// Calculate the checksum for the whole EXE file
rewind (fp);
c = fgetc(fp);
for (l = 0; !feof(fp); ++l)
{
checksum += (unsigned long)c;
c = fgetc(fp);
}
if (first_time)
{
check_exe_marker.checksum = checksum;
fseek (fp, marker_offset, SEEK_SET);
fwrite (&check_exe_marker.checksum, sizeof(unsigned long), 1, fp);
} else {
charptr = (unsigned char*)&check_exe_marker.checksum;
for (i = 0; i < sizeof(check_exe_marker.checksum); ++i)
checksum -= (unsigned long)(charptr[i]);
if (checksum != check_exe_marker.checksum)
{
printf ("File has been altered! Possibly by a virus or hacker. "
"Please get a new executable.\n", fn);
fclose(fp);
return;
}
}
fclose(fp);
printf ("Executable OK\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -