中文版请见这里。
A high-performance CUDA/OpenCL/Metal search tool designed to find offline-mode Minecraft player names that correspond to UUIDs with specific prefixes.
In offline mode, a player's UUID is determined by the MD5 hash of the string OfflinePlayer:playername, with the version and variant bits set according to UUID v3 rules. Since the player name space can be viewed as an enumerable search space, this project performs a parallel search on player names to filter out results where the UUID high bits match a specific pattern.
In offline mode, the player name
CBRVJhas a UUID with the prefixdeadbeef.
This project started as a joke: if we treat player UUIDs like Bitcoin block hashes, could we define a "name difficulty" and find the "most difficult" player name?
Later, the idea became more practical: the program's performance improved to surpass hashcat. At the same time, the search target was no longer limited to the number of leading zeros, but allowed users to specify any target UUID prefix, such as the hexadecimal string deadbeef, or a combination of dates and numbers with personal significance.
Now, uuidminer is a general-purpose offline player UUID searcher, no longer limited to finding leading zeros.
The program enumerates the legal Minecraft player name character set (excluding CJK player names), i.e., 0-9, a-z, A-Z, and _, totaling 63 characters. It searches for player names with lengths from 3 to 16. Each candidate name is first mapped to its corresponding offline-mode UUID, then matched against the user-specified target prefix.
The program supports multi-GPU and multi-node parallel execution. It provides CUDA, OpenCL, and Metal backends, and runs on Windows, Linux, and macOS.
When no arguments are passed, the program outputs results if the UUID has at least 8 leading zeros. Users can also specify any 8-digit hexadecimal prefix as the search target.
Requires CMake >= 3.18, Python 3, and a compiler toolchain for your platform.
By default, CUDA and OpenCL backends are built on Windows and Linux, while the Metal backend is built on macOS.
cmake -B build
cmake --build build --config Release
./build/uuidminer.exe
To choose which backends to build, pass -DUSE_CUDA, -DUSE_OPENCL, or -DUSE_METAL. For example, to disable the CUDA backend:
cmake -B build -DUSE_CUDA=OFF
cmake --build build --config Release
uuidminer.exe [--target <hex_prefix>] [--backend <backend>] [--node-index N] [--node-count M] [--node-slices S]
--target <hex_prefix>: Target UUID prefix, 8 hex digits (4 bytes). Defaults to00000000(i.e., at least 8 leading zeros).--backend <backend>: Backend to use. One ofcuda,opencl, ormetal. By default, an available backend is selected automatically.--node-index,--node-count,--node-slices: See the "Distributed & Multi-node Configuration" section.
In the current implementation, the measured performance of a single RTX 3090 is approximately 44 GH/s, which is about 70% of hashcat mode 0 "MD5" and 126% of hashcat mode 20 "md5($salt.$pass)".
The current implementation has been optimized close to the theoretical limit for this specific target. Due to the username generation logic, it cannot reach the peak performance of hashcat mode 0 pure MD5.
At this performance level, the search for all 8-character results has been fully completed. For 9-character length, a single 3090 would take about 4 days of continuous running, and there are currently no plans to exhaustively search it.
The program uses 8 leading zeros as the output threshold instead of a longer 12, i.e., 00000000-xxxx-xxxx-xxxx-xxxxxxxxxxxx instead of 00000000-0000-xxxx-xxxx-xxxxxxxxxxxx, for the following reasons:
In actual searching, results with 12 leading zeros do not appear until entering the 9-character name space. In other words, purely for the visual effect of "two segments of leading zeros," the computational cost rises sharply while the return is extremely limited.
At the same time, due to the existence of UUID version and variant bits, the 13th character is fixed as 3. From this point on, the visual "rarity" drops significantly. I personally believe that pursuing more leading zeros beyond 12 bits has no obvious display or research value.
The final consideration is that the results for the first 8 bits are abundant enough. Most target prefixes can find dozens of results within the 6-character or even 5-character space, which should be sufficient for most users.
The project provides an additional Python script find_most_difficult.py for statistical analysis of the search results.
The script only analyzes the classic "leading zero" target, but you can modify it to analyze other prefixes or patterns.
The program supports running in multi-GPU and multi-node environments. All distributed behaviors are controlled via command-line arguments.
Core parameters are as follows:
--node-count: The total number of logical nodes in the entire cluster--node-index: The node ID of the current instance, starting from 0--node-slices: The number of additional continuous work slices claimed by the current node
For heterogeneous computing clusters, --node-slices is super effective. In an environment with unbalanced computing power, high-performance nodes can actively take on more search space by increasing slices without re-partitioning the entire cluster.
Suppose there are 4 machines with similar performance, running:
--node-index 0 --node-count 4 --node-slices 1
--node-index 1 --node-count 4 --node-slices 1
--node-index 2 --node-count 4 --node-slices 1
--node-index 3 --node-count 4 --node-slices 1
Each machine is responsible for one-quarter of the search space.
Suppose there is 1 high-performance machine and 2 low-performance machines. To let the high-performance node take on half of the workload:
High-performance node:
--node-index 0 --node-count 4 --node-slices 2
Two low-performance nodes:
--node-index 2 --node-count 4 --node-slices 1
--node-index 3 --node-count 4 --node-slices 1
The program outputs hits directly to standard output in the format:
playerName,uuid
To save the results as a CSV file:
uuidminer.exe --target deadbeef > results.csv
Below are some of the "most difficult" player name results mined so far.
Difficulty is defined as the UUID having the smallest numerical value.
| Length | Name | UUID |
|---|---|---|
| 3 | ign |
00006dae-4a2b-3a71-8473-11a2d1553f3f |
| 4 | v4K4 |
00000109-807f-3287-9a54-90aa57e7362a |
| 5 | 16j63 |
00000003-a5f8-3217-96d2-c96c3f60529c |
| 6 | EhxMb9 |
00000000-27ce-35d0-b1ca-15b8d6f93fbf |
| 7 | tiHSNRY |
00000000-0002-3ff2-bda6-bf24a74ffc4e |
| 8 | ilAQpWC2 |
00000000-0003-35b1-9df2-7537067aa4ba |
| 9 | 00pD0Yk1A |
00000000-0000-3710-b5b1-7f404c93943b |
Note: The results for 9-character length have not been fully mined; the table only lists the currently known smallest result.
Results for some well-known magic numbers.
| Name | UUID |
|---|---|
CBRVJ |
deadbeef-3e36-38de-a786-a2b38b66a1d5 |
oHw2J |
deadbeef-9ae5-319e-9da3-6a883d7a57c0 |
LwXjDy |
deadbeef-b5a1-3615-aa10-be56fe2c9ffa |
eK6iyb |
deadbeef-0d9e-3108-8fa9-4c02b120bbec |
2r7unA |
deadbeef-e474-35d1-9bdb-37965c294636 |
s0_rEa |
deadbeef-4003-3292-9776-0061b1d33ab6 |
BLatD3 |
deadbeef-2a03-3968-8b67-08f726c6e47e |
T4aJjK |
deadbeef-a8a1-3a0c-a964-24d178cf7676 |
p8NyGH |
deadbeef-f710-3f09-8c6f-c26b58c41441 |
YRlT9m |
deadbeef-66f6-3712-8e2b-3e45ca4a99af |
UA_ysE |
deadbeef-7655-377e-9eb6-85914fd13128 |
c0RCNJ |
deadbeef-6e52-3842-bcf9-c0ec80c9e9c2 |
SEiFbU |
deadbeef-a08a-39ed-a27e-e827b973976f |
QKEmSe |
deadbeef-9548-318b-846d-8f33bfd1915d |
| Name | UUID |
|---|---|
lCE6Sw |
deadc0de-2ccf-30cd-8d7d-1ec3a4272c27 |
D3Q4DY |
deadc0de-ae61-3395-aa7a-72217c2985c4 |
axtAGo |
deadc0de-9749-3901-9a3f-533ed839467d |
V8FzTg |
deadc0de-9dec-3afc-8877-3f778e856625 |
iU3JM7 |
deadc0de-3a8f-3f49-9f4e-57aa4a13f04d |
wCeLwp |
deadc0de-7077-34d5-93d3-e93815e2dd00 |
QKKJjs |
deadc0de-cc3f-3a9f-83fb-c0048826eb24 |
zJKQR3 |
deadc0de-7512-3409-9685-be537db94fa6 |
R3AhJ_ |
deadc0de-d7e5-3948-8af4-db44cb312c80 |
Xgnkof |
deadc0de-9bcb-3f2c-9f8e-da8941be048a |
25vVy6 |
deadc0de-0301-35ea-b651-ee0435d1685d |
ll1Riw |
deadc0de-6eb9-3a80-93bf-b480480504ca |
q7jYFA |
deadc0de-bef3-3f2d-aa53-1f7ce3ada127 |
| Name | UUID |
|---|---|
ama9y0 |
fee1dead-b1e1-3a42-a07e-72813297ad98 |
ZXnun9 |
fee1dead-f79d-3167-b2e5-a2c7d77628d6 |
pifBhj |
fee1dead-7de7-3661-abad-49c2b93867ba |
9mVnKh |
fee1dead-ee99-31a3-902a-2317438791e4 |
IqRT43 |
fee1dead-59b0-3a70-ae60-a656f4e66466 |
bpxZQ1 |
fee1dead-890b-3726-8f22-8075eb19b55d |
jWWYFp |
fee1dead-6a4a-3439-9b9e-7713d4668585 |
| Name | UUID |
|---|---|
elHadX |
defec8ed-1414-33ff-8d74-ea56b6f6289e |
LCOaiC |
defec8ed-1c7b-38d7-bcf7-2638463e263c |
kAVdHV |
defec8ed-4441-3d44-8249-2867010f5a12 |
tnBqYQ |
defec8ed-2876-3e16-b079-30354f7ad545 |
mgVBDK |
defec8ed-860d-3033-8099-61d811ff33c2 |
WZ2BHf |
defec8ed-a13a-36c2-9337-ed7c0a860227 |
H0wzxn |
defec8ed-b71b-34a0-be5a-874a65a72055 |
aBUIvs |
defec8ed-053e-3491-9045-c714d18c34b3 |
k0FIx2 |
defec8ed-0749-302f-b32c-1c5d66883304 |
U9xzEa |
defec8ed-41f2-3432-9da7-b8b8a5ee4471 |
mXHQ_j |
defec8ed-1cb5-3321-b559-29bb36279b27 |
YCXXte |
defec8ed-2dac-3001-b07a-932b2de3804a |
YL9ZqB |
defec8ed-b2a6-3a58-8460-1bea84e7fadd |
Since the 6-character length already contains a large number of results, the top 10 results with the smallest numerical values for each length are listed here for reference.
These results were generated by the find_most_difficult.py script.
| Name | UUID |
|---|---|
EhxMb9 |
00000000-27ce-35d0-b1ca-15b8d6f93fbf |
6jrfhE |
00000000-3f6c-3385-828c-5804781a8528 |
bbCkvU |
00000000-60ae-3785-b705-4d469c372801 |
wPMzRW |
00000000-6ea1-3fad-859b-f3eb1b8938ef |
CS908r |
00000000-7a8c-35e3-9472-7c967f86342c |
scRJUi |
00000000-81b1-30f2-91c1-30e4ce59048b |
ZnZDeI |
00000000-8aaa-383a-b858-ed346d756725 |
i8Erv8 |
00000000-8f77-3ac9-884d-45d1b820a120 |
eZMaFP |
00000000-a7ee-30f0-966b-6345ae2ed75e |
Rgk6q8 |
00000000-ab3f-3623-8297-32a7b01fce22 |
| Name | UUID |
|---|---|
tiHSNRY |
00000000-0002-3ff2-bda6-bf24a74ffc4e |
A0RW91b |
00000000-0035-3bea-88b6-608e90005504 |
qtbny_c |
00000000-0043-3753-9bdc-8c8c908cdec3 |
5klGIQ4 |
00000000-0176-3662-a4b9-37b5eacc0fe2 |
MC5FSKG |
00000000-0186-3d46-a4a1-cdce1dfe1835 |
pHgYVOe |
00000000-019d-3439-99eb-4602324c9785 |
HorE1ce |
00000000-01d5-3977-82eb-8688a804d985 |
G7x1Az1 |
00000000-0224-3c1c-9f26-91835e25fefa |
f3CpfyU |
00000000-0268-391c-b6ae-8457622b7721 |
FHuombh |
00000000-0336-3ec2-82da-4e3bc11669a4 |
| Name | UUID |
|---|---|
ilAQpWC2 |
00000000-0003-35b1-9df2-7537067aa4ba |
gGky2Cl8 |
00000000-0003-3e30-8d39-be87ed4fe318 |
CoxaMpGo |
00000000-0004-38a4-bd57-29df1a90148f |
oyaAPbIB |
00000000-0005-331e-8996-9959d3e979f9 |
BuFyn84P |
00000000-0005-39a9-b65e-625304f8b4ec |
DFJ8H9CW |
00000000-0006-3538-bd03-685013a37bbd |
BYDL8EWI |
00000000-0007-38f2-b716-d51a34a31b8e |
kabuQpoD |
00000000-000b-320b-ba34-8fff723ee5a2 |
g2MWP53k |
00000000-000c-3504-addc-3da1a1e75d61 |
x6Jx7Gxa |
00000000-000c-3714-92a7-fa35aa41b01f |
| Name | UUID |
|---|---|
00pD0Yk1A |
00000000-0000-3710-b5b1-7f404c93943b |
08HicY3Uv |
00000000-0001-3a4a-a0d2-2551b962bc8b |
0aEw4t2_x |
00000000-0005-35cc-9c82-cfa373df2a01 |
1KqjTy2Z9 |
00000000-000a-3376-9da4-8fd5cebeb527 |
1kZoqytSp |
00000000-000b-39b3-ab01-91440c7f9c0a |
0bHYkqtDE |
00000000-000c-32ed-943d-11c4b923b4fb |
02Pj0su51 |
00000000-0011-3aef-953b-79b4bf6808b4 |
0jIYOs7I0 |
00000000-0014-3e31-952c-fa3a095d7cb0 |
0APQIM3Kc |
00000000-0016-36f8-91f7-9b2dc671b7c0 |
0oFwFMtgz |
00000000-0016-3eb7-9600-1a2cd56fb5ed |
MIT License
