From d07ed0bfafb6e5e845ab29cc6b526f341859bd5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=88=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=82=D0=BE=D0=BA=D0=B8?= =?UTF-8?q?=D1=9B-=D0=A8=D1=83=D0=BC=D0=B0=D1=80=D0=B0=D1=86?= Date: Sun, 27 Feb 2022 12:59:54 +0100 Subject: [PATCH] Initial --- a.out | Bin 0 -> 44888 bytes bak.c | 159 +++++++++++++++++++++++++++ main.c | 339 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 498 insertions(+) create mode 100755 a.out create mode 100644 bak.c create mode 100644 main.c diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..4616c10559202434c5287875c5437d8dffbbafb0 GIT binary patch literal 44888 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 NeUhSSScPFA`(NWFQDFc8 literal 0 HcmV?d00001 diff --git a/bak.c b/bak.c new file mode 100644 index 0000000..204728c --- /dev/null +++ b/bak.c @@ -0,0 +1,159 @@ +#include +#include +#include +#include +#include +#include +#include +#include + + +#define PASS_LEN 20 +#define FONT_SIZE 12 + + +typedef struct { unsigned long flags; + unsigned long functions; + unsigned long decorations; + long inputMode; + unsigned long status; +} Hints; + + + + +char *message = "Password"; + + +void catch_fire(char *string, int error){ + fprintf(stderr, string); + exit(error); +} + + +void draw_gui(Display*, Window, Visual*, Colormap, int, int, int); + + + +int main(void) { + + Display *d = XOpenDisplay(NULL); + + if ( d == NULL ) + catch_fire("Cannot open display\n", 1); + + + int s = DefaultScreen(d); + + + Window w; + XEvent e; + Visual *visual = DefaultVisual(d, s); + Colormap cmap = DefaultColormap(d, s); + + int depth = DefaultDepth(d, s); + int width = DisplayWidth(d, s); + int height = DisplayHeight(d, s); + + int mode_count; + + + // VIDEO MODES + XF86VidModeModeInfo **modes, *video_mode; + XF86VidModeGetAllModeLines(d, s, &mode_count, &modes); + video_mode = modes[0]; + + + // ATTRIBUTES + XSetWindowAttributes attributes; + attributes.override_redirect = True; + attributes.background_pixel = BlackPixel(d, s); + + + + // COCKS FOR FULLSCREEN QOQS + Hints hints; + hints.flags = 2; + hints.decorations = 0; + + Atom roperty = XInternAtom(d, "_MOTIF_WM_HINTS", True); + + + w = XCreateWindow(d, XRootWindow(d, s), 0, 0, width, height, 0, depth, InputOutput, visual, CWBackPixel|CWOverrideRedirect, &attributes); + + + draw_gui(d, w, visual, cmap, width, height, s); + + + XSelectInput(d, w, ExposureMask | KeyPressMask); + XMapWindow(d, w); + + + // SETTING FULLSCREEN + XF86VidModeSwitchToMode(d, s, video_mode); + XF86VidModeSetViewPort(d, s, 0, 0); + XMoveResizeWindow(d, w, 0, 0, width, height); + XMapRaised(d, w); + XGrabPointer(d, w, True, 0, GrabModeAsync, GrabModeAsync, w, 0L, CurrentTime); + XGrabKeyboard(d, w, True, GrabModeAsync, GrabModeAsync, CurrentTime); + + + + + while (1) { + XNextEvent(d, &e); + + if (e.type == KeyPress) + break; + } + + XCloseDisplay(d); + return 0; +} + + + + + + + + + + + + +void draw_gui(Display *d, Window w, Visual *visual, Colormap cmap, int width, int height, int s){ + + // FONT + char font_name[strlen("monospace-") +2]; + sprintf(font_name, "monospace-%d", FONT_SIZE); + XftFont *font = XftFontOpenName(d, s, font_name); + + // FONT COLORS + XftColor xft_black; + XftColorAllocName (d, visual, cmap, "black", &xft_black); + XftColor xft_white; + XftColorAllocName (d, visual, cmap, "white", &xft_white); + + + + XftDraw *xftdraw = XftDrawCreate(d, w, visual, cmap); + + + // WHITE RECTANGLE + XftDrawRect(xftdraw, &xft_white, width/2 - ((strlen(message) + PASS_LEN) / 2)*FONT_SIZE, height/2 - 2*FONT_SIZE, + (strlen(message) + PASS_LEN)*FONT_SIZE, 4*FONT_SIZE); + + // BLACK RECTANGLE + XftDrawRect(xftdraw, &xft_black, width/2 - ((PASS_LEN - strlen(message)) / 2)*FONT_SIZE, height/2 - 2*FONT_SIZE + FONT_SIZE/2, + (PASS_LEN * FONT_SIZE) - FONT_SIZE/2, 3*FONT_SIZE); + + // MESSAGE STRING + XftDrawString8(xftdraw, &xft_black, font, width/2 - ((strlen(message) + PASS_LEN) / 2)*FONT_SIZE + FONT_SIZE/2, + height/2 + FONT_SIZE/2, message, strlen(message)); + + + +} + + diff --git a/main.c b/main.c new file mode 100644 index 0000000..18dd30a --- /dev/null +++ b/main.c @@ -0,0 +1,339 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* user and group to drop privileges to */ +static const char *user = "overlord"; +static const char *group = "wheel"; +static const char *message = "Password"; +#define PASS_LEN 1024 +#define PASS_BOX_LEN 20 +#define FONT_SIZE 12 + + +typedef struct { unsigned long flags; + unsigned long functions; + unsigned long decorations; + long inputMode; + unsigned long status; +} Hints; + + + + + +char pass_buffer[PASS_LEN], passwd[PASS_LEN]; + + + +void catch_fire (char*, int); +void draw_ui (Display*, Window, Visual*, Colormap, int, int, int); +void window_attr (Display*, Window, int, int, int); +void anullate (char*, int); +void get_passwd(Display*, const char*); +static const char *generate_hash(void); + + + + +int main(void) { + + struct passwd *pwd; + struct group *grp; + const char *hash; + uid_t duid; + gid_t dgid; + + + + Display *d = XOpenDisplay(NULL); + if ( d == NULL ) + catch_fire("Cannot open display\n", 1); + + + if (!(pwd = getpwnam(user))) + catch_fire("Cannot get user", 6); + duid = pwd->pw_uid; + + + if (!(grp = getgrnam(group))) + catch_fire("Can't get group", 7); + dgid = grp->gr_gid; + + + + int s = DefaultScreen(d); + int depth = DefaultDepth(d, s); + int width = DisplayWidth(d, s); + int height = DisplayHeight(d, s); + + + Window w; + Visual *visual = DefaultVisual(d, s); + Colormap cmap = DefaultColormap(d, s); + + + + // IGNORES WM RULES + XSetWindowAttributes attributes; + attributes.override_redirect = True; + attributes.background_pixel = BlackPixel(d, s); + // MAKE THE WINDOW + w = XCreateWindow(d, XRootWindow(d, s), 0, 0, width, height, 0, depth, + InputOutput, visual, CWBackPixel | CWOverrideRedirect, &attributes); + + + // SET WINDOW ATTRIBUTES + window_attr(d, w, s, width, height); + // DRAW THE RECTANGLES AND STRINGS + draw_ui(d, w, visual, cmap, width, height, s); + + + hash = generate_hash(); + crypt("", hash); + + /* drop privileges */ + if (setgroups(0, NULL) < 0) + ; + if (setgid(dgid) < 0) + ; + if (setuid(duid) < 0) + ; + + get_passwd(d, hash); + + XCloseDisplay(d); + return 0; +} + +void catch_fire (char *string, int error){ + fprintf(stderr, string); + exit(error); +} + + + + + +void draw_ui(Display *d, Window w, Visual *visual, Colormap cmap, int width, int height, int s){ + + + //FONT SHENANIGANS + char font_name[strlen("monospace-") +2]; + sprintf(font_name, "monospace-%d", FONT_SIZE); + XftFont *font = XftFontOpenName(d, s, font_name); + + + + // FONT COLORS + XftColor xft_black; + XftColorAllocName (d, visual, cmap, "black", &xft_black); + XftColor xft_white; + XftColorAllocName (d, visual, cmap, "white", &xft_white); + + + XftDraw *xftdraw = XftDrawCreate(d, w, visual, cmap); + + + //MAKE WHITE RECT + int white_rect_x = width/2 - ((strlen(message) + PASS_BOX_LEN) / 2)*FONT_SIZE; + int white_rect_y = height/2 - 2*FONT_SIZE; + int white_rect_width = (strlen(message) + PASS_BOX_LEN)*FONT_SIZE; + int white_rect_height = 4*FONT_SIZE; + + XftDrawRect(xftdraw, &xft_white, white_rect_x, white_rect_y, white_rect_width, white_rect_height); + + + // MAKE BLACK RECT + int black_rect_x = width/2 - ((PASS_BOX_LEN - strlen(message)) / 2)*FONT_SIZE; + int black_rect_y = height/2 - 2*FONT_SIZE + FONT_SIZE/2; + int black_rect_width = (PASS_BOX_LEN * FONT_SIZE) - FONT_SIZE/2; + int black_rect_height = 3*FONT_SIZE; + + XftDrawRect(xftdraw, &xft_black, black_rect_x, black_rect_y, black_rect_width, black_rect_height); + + + // PRINT PASS MESSAGE + XftDrawString8(xftdraw, &xft_black, font, white_rect_x + FONT_SIZE/2, height/2 + FONT_SIZE/2 , message, strlen(message)); + + + +} + + + + +void window_attr (Display *d, Window w, int s, int width, int height){ + + int mode_count; + + // VIDEO MODES + XF86VidModeModeInfo **modes, *video_mode; + XF86VidModeGetAllModeLines(d, s, &mode_count, &modes); + video_mode = modes[0]; + + + // COCKS FOR FULLSCREEN QOQS + Hints hints; + hints.flags = 2; + hints.decorations = 0; + + Atom roperty = XInternAtom(d, "_MOTIF_WM_HINTS", True); + + + + + + XSelectInput(d, w, ExposureMask | KeyPressMask); + XMapWindow(d, w); + + + // SETTING FULLSCREEN + XF86VidModeSwitchToMode(d, s, video_mode); + XF86VidModeSetViewPort(d, s, 0, 0); + XMoveResizeWindow(d, w, 0, 0, width, height); + XMapRaised(d, w); + XGrabPointer(d, w, True, 0, GrabModeAsync, GrabModeAsync, w, 0L, CurrentTime); + XGrabKeyboard(d, w, True, GrabModeAsync, GrabModeAsync, CurrentTime); + + + +} + + + + + +void anullate(char *str, int size){ + memset(str, 0, size); +} + + + + + +void get_passwd(Display *d, const char *hash){ + + int num, failure = 0, check = 1; + unsigned int len = 0; + char *input_hash; + KeySym ksym; + XEvent e; + + + // CHECK PASSWORD + while (1) { + XNextEvent(d, &e); + + if (e.type == KeyPress) { + anullate(pass_buffer, sizeof(pass_buffer)); + + num = XLookupString(&e.xkey, pass_buffer, sizeof(pass_buffer), &ksym, 0); + + if (IsKeypadKey(ksym)) { + + if (ksym == XK_KP_Enter) + ksym = XK_Return; + + else if (ksym >= XK_KP_0 && ksym <= XK_KP_9) + ksym = (ksym - XK_KP_0) + XK_0; + } + + if (IsFunctionKey(ksym) || + IsKeypadKey(ksym) || + IsMiscFunctionKey(ksym) || + IsPFKey(ksym) || + IsPrivateKeypadKey(ksym)) + continue; + + switch (ksym) { + + case XK_Return: + passwd[len] = '\0'; + + + if (!(input_hash = crypt(passwd, hash))){ + fprintf(stderr, "loqy : crypt error : %s\n", strerror(errno)); + fprintf(stderr, "%d %d\n", errno, EINVAL); + } + else + check = !!strcmp(input_hash, hash); + + + if (check) { + + XBell(d, 100); + failure = 1; + } + + anullate(passwd, sizeof(passwd)); + len = 0; + break; + + case XK_Escape: + anullate(passwd, sizeof(passwd)); + len = 0; + break; + + case XK_BackSpace: + if (len) + passwd[--len] = '\0'; + break; + + default: + if (num && !iscntrl((int)pass_buffer[0]) && (len + num < sizeof(passwd))) { + memcpy(passwd + len, pass_buffer, num); + len += num; + } + break; + } + + if(!check) + exit(0); + + } + } + +} + + + + + +static const char *generate_hash(void){ + + const char *hash; + struct passwd *pw; + + if( !(pw = getpwuid(getuid())) ) + catch_fire("Cannot get password info\n", 2); + + hash = pw->pw_passwd; + + if (!strcmp(hash, "x")) { + struct spwd *sp; + if (!(sp = getspnam(pw->pw_name))) + catch_fire("cannot retrieve shadow entry. " + "Make sure to suid or sgid slock.\n", 69); + hash = sp->sp_pwdp; + } + if (!strcmp(hash, "*")) { + catch_fire("slock: getpwuid: cannot retrieve shadow entry. " + "Make sure to suid or sgid slock.\n", 98); + } + + return hash; +}