|
| 1 | +#include "Menu.h" |
| 2 | + |
| 3 | +PARAM CHALLENGE_PARAMS[] = { |
| 4 | + {"<addresses>", "<context handle>:<proxy info>"}, |
| 5 | + {"<encrypted blob>", "<HEX>"}, |
| 6 | + {"<server challenge>", "<UTF16_HEX domain>:<UTF16_HEX username>:<HEX server name>:<HEX server challenge>"}, |
| 7 | + {NULL, NULL} |
| 8 | +}; |
| 9 | + |
| 10 | +PARAM NTHASH_PARAMS[] = { |
| 11 | + {"<addresses>", "<context handle>:<proxy info>"}, |
| 12 | + {"<encrypted blob>", "<HEX>"}, |
| 13 | + {"[<server challenge>]", "If omitted, a static challenge of 1122334455667788 will be used"}, |
| 14 | + {NULL, NULL} |
| 15 | +}; |
| 16 | + |
| 17 | +PARAM PROTECT_PARAMS[] = { |
| 18 | + {"<addresses>", "<context handle>:<proxy info>"}, |
| 19 | + {"<nt hash>", "<HEX>"}, |
| 20 | + {NULL, NULL} |
| 21 | +}; |
| 22 | + |
| 23 | +PARAM COMPARE_PARAMS[] = { |
| 24 | + {"<addresses>", "<context handle>:<proxy info>"}, |
| 25 | + {"<encrypted blob>", "<HEX>"}, |
| 26 | + {"<encrypted blob/NT hash>", "<HEX>"}, |
| 27 | + {NULL, NULL} |
| 28 | +}; |
| 29 | + |
| 30 | +COMMAND_PTR Inject, Ping, Challenge, Compare, NtHash, Protect; |
| 31 | + |
| 32 | +COMMAND COMMANDS[] = { |
| 33 | + { "inject", "Inject module and start PtC-RPC server inside LSASS", NULL, Inject}, |
| 34 | + { "ping", "Ping the PtC-RPC server inside LSASS", NULL, Ping }, |
| 35 | + { "challenge", "Calculate NTLMv2 Response using encrypted credentials", CHALLENGE_PARAMS, Challenge }, |
| 36 | + { "nthash", "Calculate NTLMv1 Response using encrypted credentials", NTHASH_PARAMS, NtHash }, |
| 37 | + { "protect", "Convert NT hash to encrypted blob", PROTECT_PARAMS, Protect }, |
| 38 | + { "compare", "Compare two encrypted blobs or an encrypted blob with a NT hash", COMPARE_PARAMS, Compare }, |
| 39 | + { NULL, NULL } |
| 40 | +}; |
| 41 | + |
| 42 | +LPCCH EXAMPLES[] = { |
| 43 | + "PtC.exe inject [<module>]", |
| 44 | + "PtC.exe ping", |
| 45 | + "PtC.exe challenge 0x1a34b[...]:0x7fff7[...] 0a92a82feb4[...] 6c0079[...]:610064[...]:020008[...]:66a98b[...]", |
| 46 | + "PtC.exe nthash 0x1a34b[...]:0x7fff7[...] 0a92a82feb4[...]", |
| 47 | + "PtC.exe protect 0x1a34b[...]:0x7fff7[...] 0a92a82feb4[...]", |
| 48 | + "PtC.exe compare 0x1a34b[...]:0x7fff7[...] 0a92a82feb4[...] 66a98b[...]", |
| 49 | + NULL |
| 50 | +}; |
| 51 | + |
| 52 | +void PrintMenu() { |
| 53 | + printf("Usage: <command> [<parameters...>]\n"); |
| 54 | + printf("\nCommands:\n"); |
| 55 | + for (int i = 0; ; i++) { |
| 56 | + if (COMMANDS[i].name == NULL) break; |
| 57 | + printf(" %s - %s\n", COMMANDS[i].name, COMMANDS[i].description); |
| 58 | + |
| 59 | + if (COMMANDS[i].params != NULL) { |
| 60 | + for (int n = 0; ; n++) { |
| 61 | + if (COMMANDS[i].params[n].name == NULL) break; |
| 62 | + printf(" %s - %s\n", COMMANDS[i].params[n].name, COMMANDS[i].params[n].description); |
| 63 | + } |
| 64 | + } |
| 65 | + } |
| 66 | + printf("\nExamples:\n"); |
| 67 | + for (int i = 0; ; i++) { |
| 68 | + if (EXAMPLES[i] == NULL) break; |
| 69 | + printf(" %s\n", EXAMPLES[i]); |
| 70 | + } |
| 71 | +} |
| 72 | + |
0 commit comments