Bash 'printf' эквивалент для командной строки? - PullRequest
6 голосов
/ 13 марта 2011

Я пытаюсь передать некоторые строковые данные в небольшую C-программу из командной строки Windows. В Bash я мог бы использовать

$ printf "AAAAA\x86\x08\x04\xed" | ./program

По сути, мне нужно что-то, чтобы экранировать эти шестнадцатеричные числа в командной строке.

Есть ли в командной строке / powershell эквивалентная или аналогичная команда для printf?

Спасибо

Ответы [ 2 ]

6 голосов
/ 13 марта 2011

В PowerShell вы сделали бы это следующим образом:

"AAAAA{0}{1}{2}{3}" -f 0x86,0x08,0x04,0xed | ./program
2 голосов
/ 15 ноября 2015

Недавно я сам придумал тот же вопрос и решил, что для тех, кто разрабатывает эксплойты Windows, стоит установить cygwin:)

В противном случае можно создать небольшую программу на C, имитирующую функциональность printf:

#include <string.h>

int main(int argc, char *argv[])
{
    int i;
    char tmp[3];

    tmp[2] = '\0';

    if (argc > 1) {
        for (i = 2; i < strlen(argv[1]); i += 4) {
            strncpy(tmp, argv[1]+i, 2);
            printf("%c", (char)strtol(tmp, NULL, 16));
        }
    }
    else {
        printf("USAGE: printf.exe SHELLCODE\n");
        return 1;
    }

    return 0;
}

Программа обрабатывает только строки "\ xAB \ xCD", но не должно быть затруднительно расширять ее для обработки строк "AAAAA \ xAB \ xCD", если это необходимо.

...