import sys def getRandomNumber(): print(4) # Chosen by fair die roll. # Guaranteed to be random. # (See XKCD) def exit(): sys.exit(0) def esoteric1(): esoteric = \ ''' int query_apm_bios(void) { struct biosregs ireg, oreg; /* APM BIOS installation check */ initregs(&ireg); ireg.ah = 0x53; intcall(0x15, &ireg, &oreg); if (oreg.flags & X86_EFLAGS_CF) return -1; /* No APM BIOS */ if (oreg.bx != 0x504d) /* "PM" signature */ return -1; if (!(oreg.cx & 0x02)) /* 32 bits supported? */ return -1; /* Disconnect first, just in case */ ireg.al = 0x04; intcall(0x15, &ireg, NULL); /* 32-bit connect */ ireg.al = 0x03; intcall(0x15, &ireg, &oreg); boot_params.apm_bios_info.cseg = oreg.ax; boot_params.apm_bios_info.offset = oreg.ebx; boot_params.apm_bios_info.cseg_16 = oreg.cx; boot_params.apm_bios_info.dseg = oreg.dx; boot_params.apm_bios_info.cseg_len = oreg.si; boot_params.apm_bios_info.cseg_16_len = oreg.hsi; boot_params.apm_bios_info.dseg_len = oreg.di; if (oreg.flags & X86_EFLAGS_CF) return -1; /* Redo the installation check as the 32-bit connect; some BIOSes return different flags this way... */ ireg.al = 0x00; intcall(0x15, &ireg, &oreg); if ((oreg.eflags & X86_EFLAGS_CF) || oreg.bx != 0x504d) { /* Failure with 32-bit connect, try to disconnect and ignore */ ireg.al = 0x04; intcall(0x15, &ireg, NULL); return -1; } boot_params.apm_bios_info.version = oreg.ax; boot_params.apm_bios_info.flags = oreg.cx; return 0; } ''' print(esoteric) def win(): # This line will not work locally unless you create your own 'flag.txt' in # the same directory as this script flag = open('flag.txt', 'r').read() #flag = flag[:-1] flag = flag.strip() str_flag = '' for c in flag: str_flag += str(hex(ord(c))) + ' ' print(str_flag) def esoteric2(): esoteric = \ ''' #include "boot.h" #define MAX_8042_LOOPS 100000 #define MAX_8042_FF 32 static int empty_8042(void) { u8 status; int loops = MAX_8042_LOOPS; int ffs = MAX_8042_FF; while (loops--) { io_delay(); status = inb(0x64); if (status == 0xff) { /* FF is a plausible, but very unlikely status */ if (!--ffs) return -1; /* Assume no KBC present */ } if (status & 1) { /* Read and discard input data */ io_delay(); (void)inb(0x60); } else if (!(status & 2)) { /* Buffers empty, finished! */ return 0; } } return -1; } /* Returns nonzero if the A20 line is enabled. The memory address used as a test is the int $0x80 vector, which should be safe. */ #define A20_TEST_ADDR (4*0x80) #define A20_TEST_SHORT 32 #define A20_TEST_LONG 2097152 /* 2^21 */ static int a20_test(int loops) { int ok = 0; int saved, ctr; set_fs(0x0000); set_gs(0xffff); saved = ctr = rdfs32(A20_TEST_ADDR); while (loops--) { wrfs32(++ctr, A20_TEST_ADDR); io_delay(); /* Serialize and make delay constant */ ok = rdgs32(A20_TEST_ADDR+0x10) ^ ctr; if (ok) break; } wrfs32(saved, A20_TEST_ADDR); return ok; } /* Quick test to see if A20 is already enabled */ static int a20_test_short(void) { return a20_test(A20_TEST_SHORT); } ''' print(esoteric) def filter(user_input): if 'win' in user_input: return False return True while(True): try: user_input = input('==> ') if( filter(user_input) ): eval(user_input + '()') else: print('Illegal input') except Exception as e: print(e) break