Проще всего просто перехватить указатели кучи через sbrk (0 ), привести их к 64 -битным целым числам без знака и вычислить разницу после выделения памяти.
Схема метода:
Используйте утилиту типаcrunch
для создания пользовательского файла словаря.
Запустите fcrackzip
с этим пользовательским словарем.
Проблемы:
До 3 строк, смешанных с 3 -5 строчными буквами, составляют более триллиона возможных паролей. Просто создание этого словаря займет некоторое время.
crunch
позволяет использовать подстановочные знаки на основе символов -, но его обработка пользовательских строк не такая гибкая. Для решения этого Q также, по-видимому, необходимы grep
, sed
и sort
, любое из которых увеличивает необходимое время, т. е. часы, может быть, дни...
Что-то вроде этого, вероятно, сработает:
crunch 3 9 abcdefghijklmnopqrstuvwxyz123 | \
grep '[123]' | # at least one number per dict entry
egrep -v '([123]).*\1' | # remove repeated numbers
sed 's/1/hello/;s/2/world/;s/3/shittypass/' | # replace numbers with strings
sort -u | \
fcrackzip -D -p /dev/stdin foo.zip
Тестовый набор с меньшим набором задач (одна или две строки и до двух строчных -букв в любом порядке):
echo foo > bar.txt # file to archive
zip -P xhellobworld baz bar.txt # archive with password
time crunch 2 4 abcdefghijklmnopqrstuvwxyz12 | \
grep '[12]' | egrep -v '([12]).*\1' | \
sed 's/1/hello/;s/2/world/' | \
sort -n | fcrackzip -u -D -p /dev/stdin baz.zip
Выход:
Crunch will now generate the following amount of data: 3163440 bytes
3 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 637392
PASSWORD FOUND!!!!: pw == xhellobworld
real 0m5.942s
user 0m2.240s
sys 0m1.040s