crackmes.one

Latest Solutions Latest activity RSS

Crackme Author Summary Date Action
easy keyg3nme OuSen 2026-02-24 02:52 View
easy_reverse OuSen 2026-02-24 01:31 View
chainbreaker MostafaGalal Reverse-engineering of Chainbreaker with proper variable renaming, analysis of the state-transition logic, and a simple Python solver that finds a valid seed by accurately emulating C integer behavior. 2026-02-23 06:31 View
BobxReal You Can't do it V2 ;) OB_BUFF # bobxREAL.exe Reverse Engineering Report ## 1) Scope and target - Target: `bobxREAL.exe` (x64 PE) - Goal: find password validation logic and build a practical keygen/solver. - Tools used: - IDA Pro (+ ida-pro-mcp) for static RE. - x64dbg (+ x64dbg-mcp) for runtime checks. - PowerShell for repeated execution/statistics. ## 2) High-level behavior - Program prints `Password:` and reads up to 64 bytes (`fgets`), then strips CR/LF. - It hard-gates input length: - `len != 16` -> immediate wrong path. - `len == 16` -> enters randomized state-machine verification. - Final success condition is not a classic direct `strcmp` with a fixed key. ## 3) Core logic (IDA) Main function: - `main` at `0x140005620`. - Loop starts with `v33 = 0x11` and repeatedly dispatches: - function index = `(v33 ^ dword_140030B58) % 10` - target function from shuffled table `qword_140030E10[...]` - `v33 = callee(Str, &state)` - Stops when: - `v33 == 0x99` -> success path (`Correct!`) - `v33 == 0xFF` or null function pointer -> fail path (`Wrong.`) Important handlers in the state table: - `sub_140004220` -> returns `0x22` - `sub_140004230` -> anti-debug/anti-VM checks, returns `0x33` or `0xFF` - `sub_1400044A0` -> `sub_140001810` gate, returns `0x44` or `0xFF` - `sub_1400044D0` -> `sub_1400015E0` gate, returns `0x55` or `0xFF` - `sub_140004500` -> hash consistency gate, returns `0x66` or `0xFF` - `sub_140004520` -> VM-like transform over input, returns `0x77` or `0xFF` - `sub_140004770` -> arithmetic check, usually leads to `0x88` - `sub_140004790` -> CRC/anti-check stage, returns `0x99` or `0xFF` - `sub_140004A60` -> returns `0x99` directly - `sub_140004A70` -> returns `0xFF` directly ## 4) Why there is no fixed deterministic password - The dispatch key `dword_140030B58` is continuously perturbed by multiple background threads (`sub_1400052E0`, `sub_1400053B0`, `sub_140005470`, `sub_140004A80`) and timing/exception side effects. - State transition order therefore changes between runs. - Some transitions immediately fail (`0xFF`) regardless of input; some eventually reach `0x99`. - Empirical evidence shows near input-independence for 16-char strings. ## 5) Dynamic validation (x64dbg + repeated runs) Observed behavior from repeated runs: - Any 16-char input can produce `Correct!` on some runs. - Non-16 lengths always fail. Measured sample (PowerShell, 40 runs each): - `AAAAAAAAAAAAAAAA` -> 18/40 success - `BBBBBBBBBBBBBBBB` -> 17/40 success - `0123456789abcdef` -> 14/40 success - `!!!!!!!!!!!!!!!!` -> 19/40 success - `short` (len 5) -> 0/40 - len 17 sample -> 0/40 Conclusion: - This crackme is a race/randomized validator. - "Key" condition is effectively: **exactly 16 chars**, then retry until favorable scheduling/state. ## 6) Practical keygen strategy - Generate any 16-char key. - Optionally auto-run the target in a loop until `Correct!` appears. Delivered tools: - `bobxreal_keygen.ps1` (Windows-native, tested) - `bobxreal_keygen.py` (same logic, requires Python) Features: - generate random key (`len=16` default) - run once (`--run`/`-Run`) - auto-win mode (`--autowin`/`-AutoWin`, retries until success) ## 7) Notes and decoys - Hardcoded strings like `FLAG{BOBXFRCRACKXD}` and `_the_real_flag_12345}` exist in code/data paths but are decoys and not a normal fixed password check. - Environment variables (`BOBX_ENABLE_*`) toggle anti-analysis features but do not convert this into a single static valid key. ## 8) Reproduction commands Generate key only: ```powershell powershell -ExecutionPolicy Bypass -File .\bobxreal_keygen.ps1 ``` Try once: ```powershell powershell -ExecutionPolicy Bypass -File .\bobxreal_keygen.ps1 -Run ``` Auto-pass: ```powershell powershell -ExecutionPolicy Bypass -File .\bobxreal_keygen.ps1 -AutoWin -MaxAttempts 300 ``` Use your own key: ```powershell powershell -ExecutionPolicy Bypass -File .\bobxreal_keygen.ps1 -Key AAAAAAAAAAAAAAAA -AutoWin ``` 2026-02-23 01:26 View
razkom_v1 dinhvaren students 2026-02-22 16:42 View
EasiestEver Anarcocapetista Solving the EasiestEver crackme with Ghidra. Targeted to beginners. 2026-02-22 14:46 View
MyCrackme Alstor21 2026-02-22 01:57 View
Easy crackme mystergaif # Writeup for Easy crackme by maxpsger ## Tools Used * **Ghidra** (Static Analysis) ## Analysis Process 1. **Initial Analysis**: I loaded the binary into Ghidra and performed the standard auto-analysis to recover the program structure. 2. **Function Renaming**: To simplify the reversing process, I identified and renamed the core subroutines based on their signatures and logic. 3. **Locating Main**: I navigated to the `main` function to analyze the execution flow. 4. **Credential Recovery**: Inside the logic of the `main` function, I found a straightforward comparison of user input with hardcoded strings. The algorithm was clear and easy to read. ## Solution The binary expects the following credentials to grant access: Username: crackme Password: Rickroll 2026-02-21 14:34 View
BobxReal You Can't do it V2 ;) djd320 2026-02-21 12:28 View
GrannysQuest Kanker1337Off Hello to everyone reading this WriteUp. I want to say that the idea of this crackme is pretty cool, but the implementation is of course weak, just like the 'protection' itself. The thing that took me the most time was realizing that my nickname wasn't supported because it was longer than 8 characters: do { cout << "nYour name: "; cin >> unk_14000C0C0; } while (length(name) > 8); It took me about 10 minutes to realize this, and the whole quest took about the same time (at first I thought it was a bug and my nickname just wasn't being accepted xD). I used a translator to write the entire text in English, so sorry if some terms were translated incorrectly. 2026-02-20 22:51 View
Monster CrackMe 1.0 (MCM) yatpnaabraziv 2026-02-19 13:43 View
0xL0CCEDC0DE'S REVENGE MostafaGalal 2026-02-18 10:11 View
Easy crackme idanhajbeko explaining everything step by step uses --math-- to determine how many valid keys (spoiler: a lot!) 2026-02-17 20:25 View
Bingus kefir_absorber Solved using static analysis in ghidra 2026-02-17 18:22 View
EasiestEver Aleksei_Radchenkov 2026-02-17 00:26 View
medium http licence crackme dotcom 2026-02-16 22:03 View
Authorize by PIN Aleksei_Radchenkov 2026-02-14 03:37 View
Fixed Easy Crackme lazex 2026-02-13 15:12 View
MCM 2.0 Cyberseal The Following URL Contains the full Writeup https://github.com/SFRDevelopment/CrackNotMe-s-MCM-2.0 Was Fun! 2026-02-13 14:40 View
ZEXOR-v1(Linux version) Alstor21 2026-02-12 23:48 View
really easy Alstor21 2026-02-12 23:30 View
Nexus! (Lite) Pau1CTFer Tool: IDA 2026-02-12 15:02 View
Bingus Aleksei_Radchenkov 2026-02-12 03:54 View
MyCrackme Aleksei_Radchenkov 2026-02-11 18:55 View
ZEXOR-v1(Linux version) kefir_absorber 2026-02-11 18:54 View
really easy kefir_absorber 2026-02-11 18:43 View
X-0-R Aleksei_Radchenkov 2026-02-11 15:05 View
EasiestEver omega172 2026-02-11 10:20 View
simple crackme Aleksei_Radchenkov 2026-02-11 02:20 View
qcrk_2 by qnix stackpointer7 This assembly file contains a writeup and code to get the flag 2026-02-10 15:32 View
Monster CrackMe 1.0 (MCM) djd320 nice crackme, you could split one key constant between parent and child and randomize small vm constants per run to make it harder. 2026-02-10 09:45 View
Continental djd320 the main weakness is the hash compression step caused by left shift then byte truncation. if uniqueness is desired, avoid lossy truncation in the core check path. 2026-02-09 19:12 View
Gadget djd320 2026-02-09 18:58 View
admin_panel jackoverflow it's my first write up :) 2026-02-09 08:52 View
SelfKey pyderall 2026-02-08 16:18 View
ez crackme marco007 pretty hard tbh read the writeup :) 2026-02-08 00:40 View
Password And Flag in C marco007 Thanks for creating this crackme, it was fun to solve! 2026-02-07 21:41 View
Crack It! pavler Solution 2026-02-06 08:52 View
Quite a simple crackme marco007 First crackme I tried from this website :) 2026-02-06 00:04 View
PlsCrackMe pyderall No patching was used; only static analysis and understanding of the input handling bug. 2026-02-05 13:02 View
CrackMe with password lockon 2026-02-05 11:21 View
Quite a simple crackme killswitcher 2026-02-03 21:42 View
FedGuy easy crack svidnet A simple write up for this crackme 2026-02-03 13:50 View
Introduction to RE kasygertu (beginner) 2026-02-02 20:52 View
Simple Keygen Adriik A static analysis, first using objdump and then Ghidra. The program that generates valid keys is written in C. 2026-02-02 19:56 View
PlsCrackMe Ploxied 2026-02-02 15:20 View
EasyVM Katjri You can also read on : https://kajrivn.github.io/PersonalBlog/blog/EasyVM. Nice challenge! 2026-02-02 14:25 View
EasiestEver lockon 2026-02-02 10:43 View
Simple obfuscation dynaspinner64 2026-02-02 04:45 View
Find the serial key 2 djd320 2026-02-01 16:42 View
Previous Page 14 Next