aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jonas Gunz <himself@jonasgunz.de> 2019-04-16 17:43:20 +0200
committerGravatar Jonas Gunz <himself@jonasgunz.de> 2019-04-16 17:43:20 +0200
commit2c14d03f8725c60b5ad8042bb9bb732d5e89e123 (patch)
treeed92f255f4bc063e6daed350a4bc37df976e1e90
downloadheadstripper-2c14d03f8725c60b5ad8042bb9bb732d5e89e123.tar.gz
Initial
-rw-r--r--.gitignore4
-rw-r--r--Makefile33
-rw-r--r--src/main.c117
3 files changed, 154 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7dab7f3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+obj/
+build/
+*.jpg
+*.strip
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..9c05b9a
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,33 @@
+
+CC = clang
+CLAGS = -Wall -g
+LDFLAGS =
+BUILDDIR = build
+SOURCEDIR = src
+OBJECTDIR = obj
+
+OUTPUT = headstripper
+
+SRCS = $(wildcard $(SOURCEDIR)/*.c)
+OBJS = $(SRCS:.c=.o)
+OBJ = $(OBJS:$(SOURCEDIR)/%=$(OBJECTDIR)/%)
+
+build: dir $(OBJ)
+ @echo [LD] $(OBJ)
+ @$(CC) $(CFLAGS) -o $(BUILDDIR)/$(OUTPUT) $(OBJ) $(LDFLAGS)
+
+dir:
+ @mkdir -p $(OBJECTDIR)
+ @mkdir -p $(BUILDDIR)
+
+$(OBJECTDIR)/%.o: $(SOURCEDIR)/%.c
+ @echo [CC] $<
+ @$(CC) $(CFLAGS) -c $< -o $@
+
+.PHONY: clean
+
+clean:
+ @echo [RM] $(OBJ)
+ @echo [RM] $(BUILDDIR)/$(OUTPUT)
+ @rm -df $(OBJ)
+ @rm -Rdf $(BUILDDIR) $(OBJECTDIR)
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..75186a9
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,117 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdint.h>
+
+
+//SWAPPED
+#define _MAGIC_JPG 0xD8FF //JPG Magic Value
+#define _MAGIC_BMP 0x4D42 //BMP Magic Value
+
+//JPG
+#define _JPG_EXIF 0xE1
+#define _JPG_COM 0xFE
+#define _JPG_COPY 0xEE
+
+#define _JPG_SOS 0xDA
+#define _JPG_EOI 0xD9
+
+void strip_jpg(char *_filename);
+
+int main(int argc, char* argv[])
+{
+ FILE *image;
+ uint16_t magic;
+
+ if(argc != 2)
+ {
+ printf("Wrong number of arguments!\nUsage: %s <Filename>\n", argv[0]);
+ exit(1);
+ }
+
+ {
+ image = fopen(argv[1], "r");
+
+ if(!image)
+ {
+ printf("Unable to open %s\n", argv[1]);
+ exit(2);
+ }
+
+ fread(&magic, 2, 1, image);
+ fclose(image);
+ }
+
+ printf("Magic Value: %x\n", magic);
+ switch(magic)
+ {
+ case _MAGIC_JPG:
+ printf("Detected JPG\n");
+ strip_jpg(argv[1]);
+ break;
+ case _MAGIC_BMP:
+ printf("Detected BMP\nUnimplemented.\n");
+ break;
+ };
+
+ return 0;
+}
+
+void strip_jpg(char *_filename)
+{
+ FILE *in;
+ FILE *out;
+
+ int f__outfile_len = strlen(_filename);
+ char *f__outfile = malloc(f__outfile_len + 8);
+
+ strcpy( f__outfile, _filename);
+ strcpy(&f__outfile[f__outfile_len], ".strip\0");
+
+ in = fopen(_filename, "r");
+ out = fopen(f__outfile, "w");
+
+ //Feelin' lazy. Might add debug later, idk
+ if(!in)
+ exit(1);
+ if(!out)
+ exit(1);
+
+ while(1)
+ {
+ unsigned char c = fgetc(in);
+ if(c == 0xFF)
+ {
+ unsigned char c2 = fgetc(in);
+ if( c2 == _JPG_EXIF || c2 == _JPG_COM || c2 == _JPG_COPY)
+ {
+ unsigned char c3 = fgetc(in);
+ unsigned char c4 = fgetc(in);
+ uint16_t seg_len = (( c3 << 8 ) & 0xff00) + c4;
+ for (uint16_t i = 0; i < seg_len; i++)
+ {
+ fgetc(in);
+ }
+ }
+ else if ( c2 == _JPG_EOI )
+ {
+ fputc(c, out);
+ fputc(c2, out);
+ break;
+ }
+ else
+ {
+ fputc(c, out);
+ fputc(c2, out);
+ }
+ }
+ else
+ fputc(c, out);
+ if(feof(in))
+ break;
+ }
+
+ fclose(in);
+ fclose(out);
+ free(f__outfile);
+}