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

