04-06-2015, 03:15 AM
OK, here's the solution:
##
## generate base
##
##
## generate amplifier
##
Now a little patch for permute.c from hashcat-utils to generate the amplifier rules for A, B and C (10, 11, 12):
##
## this should work against a hash (and even a hashlist) with full gpu acceleration
## cracking should be nearly instant
##
PS: Check the progress value
##
## generate base
##
Quote:$ cat perm-input.txt
0123456789
Quote:$ /root/hashcat-utils-1.2/permute.bin < perm-input.txt | more
0123456789
1023456789
2013456789
0213456789
1203456789
Quote:$ /root/hashcat-utils-1.2/permute.bin < perm-input.txt | perl -ne 'chomp; my @x = split ""; printf "%s-\n", join ("-", @x);' > wordlist.txt
Quote:$ more wordlist.txt
0-1-2-3-4-5-6-7-8-9-
1-0-2-3-4-5-6-7-8-9-
2-0-1-3-4-5-6-7-8-9-
0-2-1-3-4-5-6-7-8-9-
1-2-0-3-4-5-6-7-8-9-
Quote:$ wc -l wordlist.txt
3628800 wordlist.txt
Quote:$ md5sum wordlist.txt
18adc4eacda246044fe166016f30f422 wordlist.txt
##
## generate amplifier
##
Now a little patch for permute.c from hashcat-utils to generate the amplifier rules for A, B and C (10, 11, 12):
Code:
$ diff permute.c permutepatch.c
38a39,128
> void conv (char *line_buf, int line_len, int *map)
> {
> static const char grp_pos[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
>
> int A_sav = 0;
> int B_sav = 0;
> int C_sav = 0;
>
> int i;
> int p;
>
> for (i = 0, p = 0; i < line_len; i++, p += 2)
> {
> if (line_buf[i] == 'A')
> {
> A_sav = p;
>
> p++;
> }
> else if (line_buf[i] == 'B')
> {
> B_sav = p;
>
> p++;
> }
> else if (line_buf[i] == 'C')
> {
> C_sav = p;
>
> p++;
> }
> }
>
> int key = (A_sav << 0)
> + (B_sav << 8)
> + (C_sav << 16);
>
> if (map[key] == 1) return;
>
> map[key] = 1;
>
> if (A_sav < B_sav && A_sav < C_sav)
> {
> printf ("i%c1 i%c0 i%c- ", grp_pos[A_sav + 0], grp_pos[A_sav + 1], grp_pos[A_sav + 2]);
>
> if (B_sav < C_sav)
> {
> printf ("i%c1 i%c1 i%c- ", grp_pos[B_sav + 0], grp_pos[B_sav + 1], grp_pos[B_sav + 2]);
> printf ("i%c1 i%c2 i%c- ", grp_pos[C_sav + 0], grp_pos[C_sav + 1], grp_pos[C_sav + 2]);
> }
> else
> {
> printf ("i%c1 i%c2 i%c- ", grp_pos[C_sav + 0], grp_pos[C_sav + 1], grp_pos[C_sav + 2]);
> printf ("i%c1 i%c1 i%c- ", grp_pos[B_sav + 0], grp_pos[B_sav + 1], grp_pos[B_sav + 2]);
> }
> }
> else if (B_sav < A_sav && B_sav < C_sav)
> {
> printf ("i%c1 i%c1 i%c- ", grp_pos[B_sav + 0], grp_pos[B_sav + 1], grp_pos[B_sav + 2]);
>
> if (A_sav < C_sav)
> {
> printf ("i%c1 i%c0 i%c- ", grp_pos[A_sav + 0], grp_pos[A_sav + 1], grp_pos[A_sav + 2]);
> printf ("i%c1 i%c2 i%c- ", grp_pos[C_sav + 0], grp_pos[C_sav + 1], grp_pos[C_sav + 2]);
> }
> else
> {
> printf ("i%c1 i%c2 i%c- ", grp_pos[C_sav + 0], grp_pos[C_sav + 1], grp_pos[C_sav + 2]);
> printf ("i%c1 i%c0 i%c- ", grp_pos[A_sav + 0], grp_pos[A_sav + 1], grp_pos[A_sav + 2]);
> }
> }
> else if (C_sav < A_sav && C_sav < B_sav)
> {
> printf ("i%c1 i%c2 i%c- ", grp_pos[C_sav + 0], grp_pos[C_sav + 1], grp_pos[C_sav + 2]);
>
> if (A_sav < B_sav)
> {
> printf ("i%c1 i%c0 i%c- ", grp_pos[A_sav + 0], grp_pos[A_sav + 1], grp_pos[A_sav + 2]);
> printf ("i%c1 i%c1 i%c- ", grp_pos[B_sav + 0], grp_pos[B_sav + 1], grp_pos[B_sav + 2]);
> }
> else
> {
> printf ("i%c1 i%c1 i%c- ", grp_pos[B_sav + 0], grp_pos[B_sav + 1], grp_pos[B_sav + 2]);
> printf ("i%c1 i%c0 i%c- ", grp_pos[A_sav + 0], grp_pos[A_sav + 1], grp_pos[A_sav + 2]);
> }
> }
>
> printf (" ] ^[ $]\n");
> }
>
51a142,143
> int *map = (int *) calloc (256 * 256 * 256, sizeof (int));
>
72c164
< puts (line_buf);
---
> conv (line_buf, line_len, map);
74c166
< while ((k = next_permutation (line_buf, p, k)) != line_len) puts (line_buf);
---
> while ((k = next_permutation (line_buf, p, k)) != line_len) conv (line_buf, line_len, map);
76c168
< puts (line_buf);
---
> conv (line_buf, line_len, map);
Quote:$ cat input
0123456789ABC
Quote:$ ./permutepatch < input > amplifier.rule
Quote:$ wc -l amplifier.rule
1716 amplifier.rule
Quote:$ md5sum amplifier.rule
77dac3e8ac31eec1318d60ee60ef341c amplifier.rule
##
## this should work against a hash (and even a hashlist) with full gpu acceleration
## cracking should be nearly instant
##
Quote:$ ./oclHashcat64.bin 3206c0ed6f2770d72a470c839b0550ae wordlist.txt -r amplifier.rule -w 3
oclHashcat v1.36 starting...
Device #1: Tahiti, 3022MB, 1000Mhz, 32MCU
Device #2: Tahiti, 3022MB, 1000Mhz, 32MCU
Device #3: Tahiti, 3022MB, 1000Mhz, 32MCU
Hashes: 1 hashes; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1716
Applicable Optimizers:
* Zero-Byte
* Precompute-Init
* Precompute-Merkle-Demgard
* Meet-In-The-Middle
* Early-Skip
* Not-Salted
* Not-Iterated
* Single-Hash
* Single-Salt
* Scalar-Mode
* Raw-Hash
Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 80c
Device #1: Kernel ./kernels/4098/m00000_a0.Tahiti_1573.4_1573.4 (VM)_1428240294.kernel (522804 bytes)
Device #2: Kernel ./kernels/4098/m00000_a0.Tahiti_1573.4_1573.4 (VM)_1428240294.kernel (522804 bytes)
Device #3: Kernel ./kernels/4098/m00000_a0.Tahiti_1573.4_1573.4 (VM)_1428240294.kernel (522804 bytes)
Cache-hit dictionary stats wordlist.txt: 76204800 bytes, 3628800 words, 6227020800 keyspace
INFO: approaching final keyspace, workload adjusted
3206c0ed6f2770d72a470c839b0550ae:[5-10-3-0-2-7-11-9-6-8-1-12-4]
Session.Name...: oclHashcat
Status.........: Cracked
Rules.Type.....: File (amplifier.rule)
Input.Mode.....: File (wordlist.txt)
Hash.Target....: 3206c0ed6f2770d72a470c839b0550ae
Hash.Type......: MD5
Time.Started...: Mon Apr 6 03:11:38 2015 (1 sec)
Speed.GPU.#1...: 1807.6 MH/s
Speed.GPU.#2...: 1771.0 MH/s
Speed.GPU.#3...: 1769.9 MH/s
Speed.GPU.#*...: 5348.5 MH/s
Recovered......: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.......: 3453911324/6227020800 (55.47%)
Skipped........: 0/3453911324 (0.00%)
Rejected.......: 0/3453911324 (0.00%)
Restore.Point..: 1048576/3628800 (28.90%)
HWMon.GPU.#1...: 64% Util, 33c Temp, 25% Fan
HWMon.GPU.#2...: 62% Util, 33c Temp, 25% Fan
HWMon.GPU.#3...: 64% Util, 33c Temp, 25% Fan
Started: Mon Apr 6 03:11:38 2015
Stopped: Mon Apr 6 03:11:40 2015
PS: Check the progress value