⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkexe.cpp

📁 非常好用的五子棋游戏源码
💻 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 + -