ftp.nice.ch/pub/next/developer/resources/libraries/CryptSums.1.0.N.bsa.tar.gz#/CryptSums/cryptsums.c

This is cryptsums.c in view mode; [Download] [Up]

/* cryptsums.c -- copyright 1992 by C.D.Lane */

#include <c.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <strings.h>

#include <sys/loader.h>

#include "cryptsum.h"

typedef enum {PROGRAM, FILENAME, PASSWORD, ARGC} ARGUMENTS;

void error_puts(char *string)
{
	perror(string);
	exit(EXIT_FAILURE);
}

void error_printf(const char *format, ...)
{
	va_list ap;
	
	va_start(ap, format); {
        	(void) vfprintf(stderr, format, ap);
		} va_end(ap);

	exit(EXIT_FAILURE);
}

void main(int argc, char *argv[])
{
	FILE *stream;
	char *password;
	unsigned short halfword;
	long l_offset, s_offset;
	unsigned long ncmds, nsects, size;
    
	struct section s_section;
	struct mach_header m_header;
	struct load_command l_command;
	struct segment_command s_command;
    
	if (argc != ARGC) error_printf("Usage:  %s Application Password\n", argv[PROGRAM]);
    
	if ((stream = fopen(argv[FILENAME], "r")) == NULL) error_puts("fopen");
	if (fread(&m_header, sizeof(m_header), 1, stream) == 0) error_puts("fread");
	if (m_header.magic != MH_MAGIC) error_printf("Incorrect Mach magic number %x!\n", m_header.magic);

	for (ncmds = m_header.ncmds; ncmds > 0; ncmds--) {
		l_offset = ftell(stream);
		if (fread(&l_command, sizeof(l_command), 1, stream) == 0) error_puts("fread");
		if (l_command.cmd == LC_SEGMENT) {	    
			if (fseek(stream, l_offset, SEEK_SET) == CERROR) error_puts("fseek");
			if (fread(&s_command, sizeof(s_command), 1, stream) == 0) error_puts("fread");
			if (strcmp(s_command.segname, CS_SEGMENT) != 0) {
				for (nsects = s_command.nsects; nsects > 0; nsects--) {
					if (fread(&s_section, sizeof(s_section), 1, stream) == 0) error_puts("fread");
					s_offset = ftell(stream);
					if (fseek(stream, s_section.offset, SEEK_SET) == CERROR) error_puts("fseek");

					for (size = 0L, halfword = 0; size < s_section.size; size++)
						halfword = cs_checksum(halfword, getc(stream));
					
					password = cs_cryptkey(argv[PASSWORD], halfword);

					(void) printf("%s %s %s\n", s_command.segname, s_section.sectname, password);

					if (fseek(stream, s_offset, SEEK_SET) == CERROR) error_puts("fseek");
					}
				}
			}
		if(fseek(stream, l_command.cmdsize + l_offset, SEEK_SET) == CERROR) error_puts("fseek");
		}
	exit(EXIT_SUCCESS);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.