我有一个二进制" 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