我有一个二进制“ crackme”,我想尝试所有ASCII字符作为参数,这是我到目前为止所做的。
#!/bin/bash
for ((i=32;i<127;i++))
do
c="\\$(printf %03o "$i")";
echo $c;
./crackme $c;
done
执行的命令是“ ./crackme \ 65”,显然我正在尝试执行“ ./crackme A”。
答案 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