我如何迭代所有ASCII以将它们用作变量?

时间:2019-05-13 15:38:27

标签: bash echo

我有一个二进制“ crackme”,我想尝试所有ASCII字符作为参数,这是我到目前为止所做的。

 #!/bin/bash                                                                                                                                                                                   

for ((i=32;i<127;i++))
do
    c="\\$(printf %03o "$i")";
    echo $c;
    ./crackme $c;
done

执行的命令是“ ./crackme \ 65”,显然我正在尝试执行“ ./crackme A”。

2 个答案:

答案 0 :(得分:4)

对于后代,有几个有用的功能:

# 65 -> A
chr() { printf "\\x$(printf "%x" "$1")"; }
# A -> 65
ord() { printf "%d" "'$1"; }

ord printf命令的最后一个奇数参数是documented

  

非字符串格式说明符的参数被视为C语言常量,但允许使用前导加减号;如果前导字符为单引号或双引号,则该值是以下字符的ASCII值

然后

for ((i = 32; i < 127; i++)); do
    ./crackme "$(chr $i)"
done

答案 1 :(得分:0)

不太漂亮,但这可行:

for ((i=32;i<127;i++))
do
    printf -v c '\\x%x' "$i"
    ./crackme "$(echo -e $c)"
done