Beispiel #1
0
/*
 * Verify the checksum of last opened file above.
 */
int verify_pe_checksum (const char *fname)
{
  DWORD file_sum, header_sum, calc_chk_sum, rc;

  assert (nt);
  file_sum = nt->OptionalHeader.CheckSum;
  DEBUGF (1, "Opt magic: 0x%04X, file_sum: 0x%08lX\n", nt->OptionalHeader.Magic, file_sum);

  rc = MapFileAndCheckSum ((PTSTR)fname, &header_sum, &calc_chk_sum);
  DEBUGF (1, "rc: %lu, 0x%08lX, 0x%08lX\n", rc, header_sum, calc_chk_sum);
  return (header_sum == calc_chk_sum);
}
Beispiel #2
0
int
main(int argc, char *argv[])
{
    int i;
    int ar_file;
    size_t len;
    unsigned long crc = 0;
    char *path;
    char buf[4096], arbuf[4096];
    FILE *fp;

    for (i = 1; i < argc; i++) {
	crc = crc32(0L, Z_NULL, 0);
	path = argv[i];
	ar_file = !strcmp(endof(path) - 2, ".a");
	if (ar_file) {
	    snprintf(arbuf, sizeof(arbuf), "ar -p %s", path);
	    if ((fp = popen(arbuf, "r"))) {
		while ((len = fread(buf, 1, sizeof(buf), fp))) {
		    crc = crc32(crc, buf, len);
		}
		pclose(fp);
	    }
#ifdef	WIN32
	} else if (!strcmp(endof(path) - 4, ".obj")) {
	    DWORD origsum;
	    DWORD rc;

	    rc = MapFileAndCheckSum(path, &origsum, &crc);
	    if (rc != CHECKSUM_SUCCESS) {
		fprintf(stderr, "Error: %s: %ld\n", path, rc);
	    }
	    fp = stdin;		// HACK
#endif	/*WIN32*/
	} else {
	    if ((fp = fopen(path, "r"))) {
		while ((len = fread(buf, 1, sizeof(buf), fp))) {
		    crc = crc32(crc, buf, len);
		}
		fclose(fp);
	    }
	}
	if (!fp) {
	    fprintf(stderr, "Error: %s: %s\n", path, strerror(errno));
	    continue;
	}
	fprintf(stdout, "Zlib CRC32 of %s is %lu\n", path, crc);
    }
    return(0);
}
Beispiel #3
0
void
ComputeChecksum(  char *szExeFile )
{
    DWORD   dwHeaderSum = 0;
    DWORD   dwCheckSum = 0;
    HANDLE  hFile;
    DWORD   cb;
    IMAGE_DOS_HEADER            dosHdr;
    IMAGE_NT_HEADERS            ntHdr;

    switch(MapFileAndCheckSum(szExeFile, &dwHeaderSum, &dwCheckSum)) {
       case CHECKSUM_OPEN_FAILURE :
            Warn(WARN_CHECKSUM_OPEN_FAILURE, szExeFile, NULL);
            break;

       case CHECKSUM_MAP_FAILURE :
            Warn(WARN_CHECKSUM_MAP_FAILURE, szExeFile, NULL);
            break;

       case CHECKSUM_MAPVIEW_FAILURE :
            Warn(WARN_CHECKSUM_MAPVIEW_FAILURE, szExeFile, NULL);
            break;

       default:
            break;
    }


    hFile = CreateFile( szExeFile,
                        GENERIC_READ | GENERIC_WRITE,
                        FILE_SHARE_READ | FILE_SHARE_WRITE,
                        NULL,
                        OPEN_EXISTING,
                        0,
                        NULL
                      );

    // seek to the beginning of the file
    SetFilePointer( hFile, 0, 0, FILE_BEGIN );

    // read in the dos header
    if ((ReadFile(hFile, &dosHdr, sizeof(dosHdr), &cb, 0) == FALSE) || (cb != sizeof(dosHdr))) {
        CloseHandle(hFile);
        return;
    }

    // read in the pe header
    if ((dosHdr.e_magic != IMAGE_DOS_SIGNATURE) ||
        (SetFilePointer(hFile, dosHdr.e_lfanew, 0, FILE_BEGIN) == -1L)) {
        CloseHandle(hFile);
        return;
    }

    // read in the nt header
    if ((!ReadFile(hFile, &ntHdr, sizeof(ntHdr), &cb, 0)) || (cb != sizeof(ntHdr))) {
        CloseHandle(hFile);
        return;
    }

    if (SetFilePointer(hFile, dosHdr.e_lfanew, 0, FILE_BEGIN) == -1L) {
        CloseHandle(hFile);
        return;
    }

    ntHdr.OptionalHeader.CheckSum = dwCheckSum;

    if (!WriteFile(hFile, &ntHdr, sizeof(ntHdr), &cb, NULL)) {
        CloseHandle(hFile);
        return;
    }

    CloseHandle(hFile);
    return;
}