Number of crackmes:
Number of writeups:
Comments:
| Name | Author | Language | Arch | Difficulty | Quality | Platform | Date | Downloads | Writeups | Comments |
|---|
| Crackme | Date | Infos | Actions |
|---|---|---|---|
| NeuroVault | 2026-05-13 13:11 | was a lot of fun. good work there. | View |
| First C program | 2025-09-18 07:57 | View |
| Crackme | Comment | Date |
|---|---|---|
| Extreme key validator | [Click to reveal]architectural weakness within the crackme: VM handlers are stored in a globally accessible delegate table, while the expected key is fully reconstructed at runtime as a plaintext byte array. hybrid static/dynamic analysis makes this easier. also the caller-validation mechanism is ineffective because the protected method is still invoked by the original in-module handler, satisfying the immediate-caller check even when that handler is externally instrumented. key: N0VAX-7C4DE-Q9R2K | 2026-08-17 08:25 |
| x or and add | [Click to reveal]Pseudocode keygen: index = sum(bytes(name)) % 400 (xor1, add, xor2) = table[index] password = "" for target in bytes("Cr4ckM35D0t1"): char = (((target XOR xor2) - add) XOR xor1) AND 0xFF password += char find the flat sequence table and you can apply the pseudo code to build a key gen. e. g. valid login: Username: crackmes.one Passwort: Ct2c{Y31B6r5 | 2026-08-17 06:33 |
| shifty keygen | [Click to reveal]username is hashed with FNV-1a. hash is used as the seed for SplitMix64. The first random value is the wanted result. The next values select 10,000 operations and their arguments. All operations can be undone, so the keygen simply works backwards: seed = fnv1a(username) target = splitmix(seed) for 10000 times: op = splitmix(seed) & 15 arg = splitmix(seed) save(op, arg) value = target for each saved operation, backwards: value = undo(op, value, arg) serial = undo_first_mix(value, 0x6d8c5a83e9463c96) print serial as xxxxxx-xxxxx-xxx-xx e. g. working creds: Username: testuser Serial:6f0089-592e5-d06-c7 | 2026-08-14 14:38 |
| Easy Keygen Crackme | [Click to reveal]MG = HKLM64\SOFTWARE\Microsoft\Cryptography\MachineGuid VS = C:\ volume serial as uppercase hex, no padding H1 = SHA256_UTF8(MG + VS).lower_hex() H2 = SHA256_UTF8(H1 + "plikan").lower_hex() H3 = SHA512_UTF8(H2).upper_hex() KEY = H3[0:25] grouped as XXXXX-XXXXX-XXXXX-XXXXX-XXXXX | 2026-08-14 14:13 |
| Hacker's Edge Book CrackMe v3 | If you've done it right, there is also another bonus code inside! Thanks. | 2025-09-22 07:41 |
| Patch protect v2 | Thank you. I got it working. That was a good learn lesson. | 2025-09-22 07:06 |
| Patch protect v2 | Ahh html brackets are removed here... my formation is gone. I meant to write if input key is lower then 8 then is processes byte for byte and if it's higher or equal 8 SIMD processing is used. | 2025-09-19 11:21 |
| Patch protect v2 | Thanks for the tip. Bypassing the patching protection was quite easy IMO. But I really struggle with that hash algorithm to just "generate" a valid key. My insights: 1) If input key is = 8 characters it uses SIMD processing. Im relativly new to this stuff of reverse-engineering. Right now I would say that the hash results equals each path. However, I'm unsure. Reverse calculation of the hash is from my insights "impossible". | 2025-09-19 11:19 |
| Patch protect v2 | Is the password stored in the executable? My guess is no. I got the algorithm working and the correct hash-value of 0x84004833. But I'm stuck getting to the key on my own now. Any tips? | 2025-09-18 14:54 |
| MISSION IMPOSSIBLE | Vigenère algorithm, also nice fakes. | 2025-09-18 08:42 |
| First C program | This was nice. Also, there's a buffer overflow possibility in. | 2025-09-18 07:36 |
| nuclearshit v2 | Was fun! Am I right, that there was some RNG_SEED distraction right in the beginning? | 2025-09-04 08:20 |