#include <iostream>
#include <string>
#include <vector>
#include <thread>
#include <chrono>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#include <sstream>
#include <windows.h>
bool isDebuggerPresent() {
if (IsDebuggerPresent()) return true;
BOOL remote = FALSE;
CheckRemoteDebuggerPresent(GetCurrentProcess(), &remote);
return remote;
}
void printCentered(const std::string& text, int width = 50) {
int pad = (width - (int)text.size()) / 2;
if (pad > 0) std::cout << std::string(pad, ' ');
std::cout << text << "\n";
}
void printBanner(const std::string& line1, const std::string& line2 = "") {
const int WIDTH = 37;
std::string top = "\xC9" + std::string(WIDTH, '\xCD') + "\xBB";
std::string bottom = "\xC8" + std::string(WIDTH, '\xCD') + "\xBC";
auto makeLine = [&](const std::string& text) -> std::string {
std::string s = "\xBA " + text;
while ((int)s.size() < WIDTH + 1) s += " ";
s += "\xBA";
return s;
};
std::cout << top << "\n";
std::cout << makeLine(line1) << "\n";
if (!line2.empty()) std::cout << makeLine(line2) << "\n";
std::cout << bottom << "\n";
}
bool stage_authentication() {
printBanner("AUTHENTICATION REQUIRED");
std::string username, password;
std::cout << "Username: ";
std::cin >> username;
std::cout << "Password: ";
std::cin >> password;
if (username == "cr4ck3r" && password == "m4st3r_k3y") {
std::cout << "[+] Access granted!\n";
return true;
}
std::cout << "[-] Authentication failed!\n";
std::cout << "[X] Access denied. Goodbye.\n";
return false;
}
bool stage_license() {
printBanner("LICENSE VALIDATION");
std::cout << "Enter license key (format: XXXX-YYYY-ZZZZ-WWWW): ";
std::string key;
std::cin >> key;
auto checkFormat = [](const std::string& k) -> bool {
if (k.size() != 19) return false;
for (int i = 0; i < 19; i++) {
if (i == 4 || i == 9 || i == 14) {
if (k[i] != '-') return false;
} else {
if (!isalnum(k[i])) return false;
}
}
return true;
};
if (!checkFormat(key)) {
std::cout << "[-] Invalid format!\n";
std::cout << "[X] License check failed. Goodbye.\n";
return false;
}
const std::string b64 = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789+/";
int checksum = 0;
for (char c : key) {
if (c != '-') checksum += (int)c;
}
if ((checksum % 256) == 0xAB) {
std::cout << "[+] License validated!\n";
return true;
}
std::cout << "[-] Invalid license key!\n";
std::cout << "[X] License check failed. Goodbye.\n";
return false;
}
bool game1_memory_matrix() {
printBanner("GAME 1: MEMORY MATRIX");
srand((unsigned)time(nullptr));
std::vector<int> pattern;
while ((int)pattern.size() < 8) {
int pos = rand() % 25;
if (std::find(pattern.begin(), pattern.end(), pos) == pattern.end())
pattern.push_back(pos);
}
std::cout << "[*] Watch the pattern (you have 3 seconds):\n";
auto printGrid = [&](const std::vector<int>& highlighted) {
for (int row = 0; row < 5; row++) {
for (int col = 0; col < 5; col++) {
int idx = row * 5 + col;
bool hi = std::find(highlighted.begin(), highlighted.end(), idx) != highlighted.end();
std::cout << (hi ? "[X]" : "[ ]");
}
std::cout << "\n";
}
};
printGrid(pattern);
std::cout << "[*] Memorize it...\n";
std::this_thread::sleep_for(std::chrono::seconds(3));
system("cls");
std::cout << "[?] Enter the 8 positions (0-24, space separated): ";
std::vector<int> answer(8);
for (int i = 0; i < 8; i++) std::cin >> answer[i];
std::sort(pattern.begin(), pattern.end());
std::sort(answer.begin(), answer.end());
if (pattern == answer) {
std::cout << "[+] Perfect memory!\n";
return true;
}
std::cout << "[-] Wrong pattern!\n";
std::cout << "[X] Challenge failed at Game 1\n";
return false;
}
bool game2_algorithm_decoder() {
printBanner("GAME 2: ALGORITHM DECODER");
std::cout << "[*] Study this sequence:\n";
std::cout << " Input: 5 -> Output: 26\n";
std::cout << " Input: 7 -> Output: 50\n";
std::cout << " Input: 3 -> Output: 10\n";
std::cout << " Input: 9 -> Output: 82\n";
std::cout << "[?] What is the output for input 12? ";
int answer;
std::cin >> answer;
if (answer == 145) {
std::cout << "[+] Algorithm decoded!\n";
return true;
}
std::cout << "[-] Incorrect!\n";
std::cout << "[X] Challenge failed at Game 2\n";
return false;
}
bool game3_reflex_challenge() {
printBanner("GAME 3: REFLEX CHALLENGE");
std::cout << "[*] Solve 5 quick calculations!\n";
std::cout << "[!] You have 2 seconds per question\n\n";
srand((unsigned)time(nullptr) ^ 0xDEAD);
int correct = 0;
for (int q = 0; q < 5; q++) {
int a = rand() % 20 + 1;
int b = rand() % 20 + 1;
int op = rand() % 3;
int expected;
std::string opStr;
if (op == 0) { expected = a + b; opStr = "+"; }
else if (op == 1) { expected = a - b; opStr = "-"; }
else { expected = a * b; opStr = "*"; }
std::cout << " " << a << " " << opStr << " " << b << " = ";
std::cout.flush();
auto start = std::chrono::steady_clock::now();
int answer;
std::cin >> answer;
auto end = std::chrono::steady_clock::now();
double elapsed = std::chrono::duration<double>(end - start).count();
if (elapsed > 2.0) {
std::cout << " \n Too slow!\n";
} else if (answer == expected) {
std::cout << " \n Correct!\n";
correct++;
} else {
std::cout << " \n Wrong!\n";
}
}
if (correct >= 4) {
std::cout << "[+] Reflexes approved! (" << correct << "/5)\n";
return true;
}
std::cout << "[-] Not fast enough! (" << correct << "/5)\n";
std::cout << "[X] Challenge failed at Game 3\n";
return false;
}
bool game4_logic_maze() {
printBanner("GAME 4: THE LOGIC MAZE");
std::cout << "[*] You're in a maze. Make the right choices!\n\n";
std::cout << "ROOM 1: Three doors - Red, Blue, Green\n";
std::cout << "Hint: The safe door's color has 4 letters\n";
std::cout << "Choice (R/B/G): ";
char door; std::cin >> door;
door = toupper(door);
if (door != 'B') {
std::cout << "[-] Wrong door! Game Over.\n";
std::cout << "[X] Challenge failed at Game 4\n";
return false;
}
std::cout << "[+] Safe! Moving forward...\n\n";
int room1_letters = 4;
std::cout << "ROOM 2: A riddle appears:\n";
std::cout << "\"I speak without a mouth and hear without ears.\n";
std::cout << " I have no body, but come alive with wind. What am I?\"\n";
std::cout << "Answer: ";
std::string riddle; std::cin >> riddle;
std::transform(riddle.begin(), riddle.end(), riddle.begin(), ::tolower);
if (riddle != "echo") {
std::cout << "[-] Incorrect! Trapped!\n";
std::cout << "[X] Challenge failed at Game 4\n";
return false;
}
std::cout << "[+] Correct! Proceeding...\n\n";
int room2_letters = (int)riddle.size();
std::cout << "ROOM 3: Number sequence puzzle\n";
std::cout << "2, 6, 12, 20, 30, ?\n";
std::cout << "Next number: ";
int room3_answer; std::cin >> room3_answer;
if (room3_answer != 42) {
std::cout << "[-] Wrong sequence!\n";
std::cout << "[X] Challenge failed at Game 4\n";
return false;
}
std::cout << "[+] Perfect!\n\n";
std::cout << "FINAL ROOM: The exit code\n";
std::cout << "Combine: (Room1_letters) + (Room2_letters) - (Room3_answer/7)\n";
std::cout << "Exit code: ";
int exitCode; std::cin >> exitCode;
int expected = room1_letters + room2_letters - (room3_answer / 7);
if (exitCode == expected) {
std::cout << "[+] MAZE CONQUERED!\n";
return true;
}
std::cout << "[-] Wrong code!\n";
std::cout << "[X] Challenge failed at Game 4\n";
return false;
}
void generateFlag() {
const std::string encoded = "CRACKME_MASTER";
std::cout << "\n";
printCentered("CONGRATULATIONS!");
printCentered(" ");
std::cout << "Your flag: CTF{" << encoded << "}\n";
std::cout << "You are a true reverse engineer!\n\n";
}
int main() {
SetConsoleOutputCP(437);
if (isDebuggerPresent()) {
std::cout << "[!] Debugger detected! Exiting...\n";
return 1;
}
printBanner("ULTIMATE CRACKME v2.0", "Advanced Challenge");
if (!stage_authentication()) return 1;
if (!stage_license()) return 1;
std::cout << "[*] Entering challenge phase...\n";
std::cout << "[*] Complete all 4 games to win!\n\n";
if (!game1_memory_matrix()) return 1;
if (!game2_algorithm_decoder()) return 1;
if (!game3_reflex_challenge()) return 1;
if (!game4_logic_maze()) return 1;
generateFlag();
return 0;
}