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



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

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

执行的命令是" ./crackme 65",显然我正在尝试执行。/crackmea"。

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

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

记录了ord printf命令的奇数最终参数:

非弦乐格式指定器的论点被视为C语言常数,除了允许前导plus或sigus符号,并且如果领先字符是单个或双引号,则该值是以下字符的ASCII值

然后

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

不漂亮,但这有效:

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

最新更新