{"id":"bduwdn","deleted":false,"future_paste":false,"expired":false,"language":"c","created_at":"2026-02-02 16:43:00","expires_at":null,"content":"\/\/ gcc pwnable.c\r\n\r\n#include <stdio.h>\r\n#include <stdlib.h>\r\n#include <string.h>\r\n#include <unistd.h>\r\n#include <sys\/mman.h>\r\n\r\nlong compute(int c) {\r\n  long i = 0;\r\n  while (c > 1) {\r\n    i++;\r\n    if (c%2 == 0) c \/= 2;\r\n    else c = 3*c + 1;\r\n  }\r\n\r\n  return i;\r\n}\r\n\r\nint main() {\r\n  int uid = 0;\r\n  void* buffer = mmap(NULL, 0x1000, PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0);\r\n\r\n  puts(\"Welcome to AIC Factory Terminal.\");\r\n  puts(\"WARNING: The power system is about to reach its capacity limit.\");\r\n  puts(\"WARNING: To prevent draining, your power usage for this session will be limited.\");\r\n  puts(\"Now waiting for input.\");\r\n\r\n  ssize_t input_size = read(STDIN_FILENO, buffer, 0x1000);\r\n\r\n  if (input_size > 0) {\r\n    long long accu = 0;\r\n    unsigned char *buf_ptr = (unsigned char *)buffer;\r\n    for (int i = 0; i < input_size; i++) {\r\n      long cur = compute(buf_ptr[i]);\r\n      \/\/ printf(\"%ld %d\\n\", cur, buf_ptr[i]);\r\n\r\n      if (cur > 35) {\r\n    \tputs(\"Consuming too much computational power. Aborting...\");\r\n    \texit(1);\r\n      }\r\n      accu += cur;\r\n    }\r\n\r\n    \/\/ Length limit perhaps\r\n    if (accu > 200) {\r\n\tputs(\"Accumulative power usage is too high. Aborting...\");\r\n\texit(1);\r\n    }\r\n  } else {\r\n    puts(\"Error reading input.\");\r\n  }\r\n\r\n  puts(\"Now executing...\");\r\n\r\n  ((void (*)(void))buffer)();\r\n\r\n  if (uid == 0x1337) {\r\n    puts(\"Power user detected. Granting full access...\");\r\n  }\r\n\r\n  return 0;\r\n}\r\n"}