diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2010-10-05 06:58:05 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2010-10-05 06:58:05 +0000 |
commit | 71a9724cc032291e34911c0eead10c8b0801aad2 (patch) | |
tree | 32fc59da386a173ecaea27ef7e9cd1cd99170529 /Build/source/libs/zziplib/zziplib-0.13.59/bins/zzobfuscated.c | |
parent | c377db3a1bf55130706cb6ba31f4239c21b3e8f2 (diff) |
zziplib 0.13.59 (29mar10)
git-svn-id: svn://tug.org/texlive/trunk@19998 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/zziplib/zziplib-0.13.59/bins/zzobfuscated.c')
-rw-r--r-- | Build/source/libs/zziplib/zziplib-0.13.59/bins/zzobfuscated.c | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/Build/source/libs/zziplib/zziplib-0.13.59/bins/zzobfuscated.c b/Build/source/libs/zziplib/zziplib-0.13.59/bins/zzobfuscated.c new file mode 100644 index 00000000000..352afc29a13 --- /dev/null +++ b/Build/source/libs/zziplib/zziplib-0.13.59/bins/zzobfuscated.c @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2002 Mike Nordell + * portions Copyright (c) 2000,2001,2002 Guido Draheim <guidod@gmx.de> + * Use freely under the restrictions of the ZLIB License + * + * A small example that displays how the plugin I/O functions can be used + * to read "encrypted" zip archives. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/stat.h> +#include <zzip/zzip.h> +#include <zzip/plugin.h> + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +#if defined ZZIP_HAVE_UNISTD_H +#include <unistd.h> /* read */ +#elif defined ZZIP_HAVE_IO_H +#include <io.h> /* win32 */ +#else +#endif + +#ifdef _MSC_VER +#define _MSC_VER_NULL NULL +#else +#define _MSC_VER_NULL +#endif + +/* + * Only override our the read handler. Let the system take care + * the rest. + */ + +static zzip_ssize_t our_read(int fd, void* buf, zzip_size_t len) +{ + const zzip_ssize_t bytes = read(fd, buf, len); + zzip_ssize_t i; + char* pch = (char*)buf; + for (i=0; i<bytes; ++i) { + pch[i] ^= 0x55; + } + return bytes; +} + +static zzip_plugin_io_handlers our_handlers = { _MSC_VER_NULL }; +static const char* const our_fileext [] = { ".dat", ".sav", 0 }; + + +static const char usage[] = +{ + " zzobfuscated <file> [in-zip filename]\n" + " - Demonstrates the use of installable file I/O handlers.\n" + " Copies <file> to \"obfuscated[.dat]\" while \"encrypting\" it by xor'ing\n" + " every byte with 0x55, installs file I/O handlers, and then uses the\n" + " zzip_open_ext_io function to read and print the file to stdout.\n" + " The file can be a normal file or an inflated part of a zip-archive,\n" + " to get 'README' from test.zip you may write \n" + " zzobfuscated test.zip README \n" +}; + +int +main (int argc, char* argv[]) +{ + if (argc <= 1 || argc > 3 || ! strcmp (argv[1], "--help")) + { + printf (usage); + return 0; + } + if (! strcmp (argv[1], "--version")) + { + printf (__FILE__" version "ZZIP_PACKAGE" "ZZIP_VERSION"\n"); + return 0; + } + + if (strlen(argv[1]) > 128) { + fprintf(stderr, "Please provide a filename shorter than 128 chars.\n"); + exit(1); + } + + /* obfuscate the file */ + { + int ch; + FILE* fin; + FILE* fout; + fin = fopen(argv[1], "rb"); + if (!fin) { + fprintf(stderr, "Can't open input file \"%s\"\n", argv[1]); + exit(1); + } + fout = fopen((argc == 2) ? "obfuscated" : "obfuscated.dat", "wb"); + if (!fout) { + fprintf(stderr, "Can't open output file \"obfuscated\"\n"); + exit(1); + } + while ((ch = fgetc(fin)) != EOF) { + ch ^= 0x55; + fputc(ch, fout); + } + fclose(fout); + fclose(fin); + } + + /* install our I/O hander */ + zzip_init_io(&our_handlers, 0); + our_handlers.fd.read = &our_read; + + { +# define argn 2 + ZZIP_FILE* fp; + char name[256]; + if (argc == 3) { + sprintf(name, "obfuscated/%s", argv[argn]); + } else { + sprintf(name, "obfuscated"); + } + fp = zzip_open_ext_io (name, O_RDONLY|O_BINARY, ZZIP_PREFERZIP, + our_fileext, &our_handlers); + + if (! fp) + { + perror (name); + exit(1); + }else{ + char buf[17]; + int n; + + /* read chunks of 16 bytes into buf and print them to stdout */ + while (0 < (n = zzip_read(fp, buf, 16))) + { + buf[n] = '\0'; +# ifdef STDOUT_FILENO + write (STDOUT_FILENO, buf, n); +# else + fwrite (buf, 1, n, stdout); +# endif + } + + if (n == -1) + perror (argv[argn]); + } + } + + return 0; +} + +/* + * Local variables: + * c-file-style: "stroustrup" + * End: + */ |