From 84fad51c657b2e91c7fa2f3785c84f7a0e44cbd3 Mon Sep 17 00:00:00 2001 From: Landon Curt Noll Date: Thu, 23 Mar 2023 23:29:16 -0700 Subject: [PATCH] fix Makefile and README.md for 2012/zeitak Rename the obfuscated source. --- 2012/zeitak/Makefile | 8 +- 2012/zeitak/README.md | 175 +++++++++--------- .../{zeitak_deobfucate.c => zeitak.alt.c} | 0 3 files changed, 93 insertions(+), 90 deletions(-) rename 2012/zeitak/{zeitak_deobfucate.c => zeitak.alt.c} (100%) diff --git a/2012/zeitak/Makefile b/2012/zeitak/Makefile index 8761b6db5..19d5bf1f3 100644 --- a/2012/zeitak/Makefile +++ b/2012/zeitak/Makefile @@ -168,11 +168,11 @@ ENTRY= zeitak PROG= ${ENTRY} # OBJ= ${PROG}.o -DATA= +DATA= incorrect.c TARGET= ${PROG} # -ALT_OBJ= ${PROG}_deobfucate.o -ALT_TARGET= ${PROG}_deobfucate +ALT_OBJ= ${PROG}.alt.o +ALT_TARGET= ${PROG}.alt ################# @@ -189,7 +189,7 @@ all: data ${TARGET} ${PROG}: ${PROG}.c ${CC} ${CFLAGS} $< -o $@ ${LIBS} -${PROG}_deobfucate: ${PROG}_deobfucate.c +${PROG}.alt: ${PROG}.alt.c ${CC} ${CFLAGS} $< -o $@ ${LIBS} # alternative executable diff --git a/2012/zeitak/README.md b/2012/zeitak/README.md index 445485db4..ee227e1f0 100644 --- a/2012/zeitak/README.md +++ b/2012/zeitak/README.md @@ -1,40 +1,44 @@ # Balanced use of obfuscation - Gold award -Adar Zeitak - + Adar Zeitak + -## To build: +# To build: - make all - -### To run - - make zeitak +```sh +make +``` ### To run: - ./zeitak < file.c +```sh +./zeitak < file.c +``` where file.c is the file to be checked for nesting errors. For example, you may try incorrect.c and the program itself. ### Try: - ./zeitak < zeitak.c - ./zeitak < incorrect.c +```sh +./zeitak < zeitak.c +./zeitak < incorrect.c +``` ### Alternate code -An alternate version of this entry, `zeitak\_deobfucate.c`, is provided. -The file `zeitak\_deobfucate.c` provides a version that has been slightly +An alternate version of this entry, `zeitak.alt.c`, is provided. +The file `zeitak.alt.c` provides a version that has been slightly deobfuscated. You may find reading that file helpful in your attempt to understand this extremely subtle entry. To compile this alternate version: - make alt +```sh +make alt +``` -Use `zeitak\_deobfucate.c` as you would `zeitak` above. +Use `zeitak.alt` as you would `zeitak` above. ## Judges' comments @@ -47,80 +51,79 @@ just to understand 18 key characters of this code. ## Author's comments -### Nesting Errors Detector - -#### What does it do - -As you have probably understood by looking at the source\*, this program has -something to do with parenthesis (and equality of opening and closing -parenthesis, if you look close enough). It goes over the file given to it and -checks that every opening (, [, or { has a matching closing one and -vice versa. It also checks that every " or ' is closed. - -If an error is detected, an error message will be printed. If the problem -is a superfluous closing bracket, it will even print a few characters -around it's position. - -* Make sure you view the source with 4 spaces tab width. - -#### Features - -* Ignores parenthesis inside strings or character constants, so no errors - will be detected in the following line: - - printf(")"); - -* Doesn't get confused by the 1984/anonymous entry! - -#### Mis-Features - -* Escapes (e.g. `\"`) are ignored, so the following line will produce - an error: - - printf("\""); - -#### Obfuscation - -IOCCC winners already contain entries without digits, control-flow -keywords and certain operators in their source. This entry has an -even more limited source, that is: - -* Without any digits. -* Without any character constants. -* Without using functions from headers other than stdio. -* Without any control-flow keywords (not even the ?: operator). -* Without any arithmetic or logic operators! - -So, what's left? Parenthesis, and lots of them, as looking at the source will -reveal immediately. The main obfuscation is building the whole algorithm using -only function calls, typecasts, array lookups and pointer operators. - -Additional obfuscations include: - -* Extensive reuse of identifiers: Macros share names with variables, inner - curly braces scopes contain variables with names identical to those in the - outer scopes and some of the variables have different uses in different - parts of the program. Even the large array has more than one use. -* A complicated data structure with "unused" fields. -* Mostly one-letter identifiers. -* Complex recursion: A function might call itself once, twice, or not at all. - -#### Compilation/Running Notes - -* The program requires `char` to be one byte and pointers to be - at least two bytes long. - -* The program was tested on the following platforms: - -** Ubuntu 9.04 32-bit with GCC -** Windows 7 32-bit with GCC -** Windows 7 32-bit with OpenWatcom +### Nesting Errors Detector + +#### What does it do + +As you have probably understood by looking at the source\*, this program has +something to do with parenthesis (and equality of opening and closing +parenthesis, if you look close enough). It goes over the file given to it and +checks that every opening (, [, or { has a matching closing one and +vice versa. It also checks that every " or ' is closed. + +If an error is detected, an error message will be printed. If the problem +is a superfluous closing bracket, it will even print a few characters +around it's position. + +* Make sure you view the source with 4 spaces tab width. + +#### Features + +* Ignores parenthesis inside strings or character constants, so no errors + will be detected in the following line: + + printf(")"); + +* Doesn't get confused by the 1984/anonymous entry! + +#### Mis-Features + +* Escapes (e.g. `\"`) are ignored, so the following line will produce + an error: + + printf("\""); + +#### Obfuscation + +IOCCC winners already contain entries without digits, control-flow +keywords and certain operators in their source. This entry has an +even more limited source, that is: + +* Without any digits. +* Without any character constants. +* Without using functions from headers other than stdio. +* Without any control-flow keywords (not even the ?: operator). +* Without any arithmetic or logic operators! + +So, what's left? Parenthesis, and lots of them, as looking at the source will +reveal immediately. The main obfuscation is building the whole algorithm using +only function calls, typecasts, array lookups and pointer operators. + +Additional obfuscations include: + +* Extensive reuse of identifiers: Macros share names with variables, inner + curly braces scopes contain variables with names identical to those in the + outer scopes and some of the variables have different uses in different + parts of the program. Even the large array has more than one use. +* A complicated data structure with "unused" fields. +* Mostly one-letter identifiers. +* Complex recursion: A function might call itself once, twice, or not at all. + +#### Compilation/Running Notes + +* The program requires `char` to be one byte and pointers to be + at least two bytes long. + +* The program was tested on the following platforms: + +** Ubuntu 9.04 32-bit with GCC +** Windows 7 32-bit with GCC +** Windows 7 32-bit with OpenWatcom + +## Copyright: --------------------------------------------------------------------------------- - diff --git a/2012/zeitak/zeitak_deobfucate.c b/2012/zeitak/zeitak.alt.c similarity index 100% rename from 2012/zeitak/zeitak_deobfucate.c rename to 2012/zeitak/zeitak.alt.c