Outline of method:
Use a util like
crunch to create a custom dictionary file.
fcrackzip with that custom dictionary.
Up to 3 strings mixed with anywhere from 3-5 lower case letters makes upwards of a trillion possible passwords. Just generating that dictionary will take a while.
crunch permits using character-based wildcards, but its handling of custom strings is not as flexible. To solve this Q,
sort also seem to be needed, any of which increases the time needed, i.e. hours, maybe days...
Something like this would probably work:
crunch 3 9 abcdefghijklmnopqrstuvwxyz123 | \
grep '' | # at least one number per dict entry
egrep -v '().*\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
Test case with a smaller problem set (one or two strings, and up to two lower-case letters, any order):
echo foo > bar.txt # file to archive
zip -P xhellobworld baz bar.txt # archive with password
time crunch 2 4 abcdefghijklmnopqrstuvwxyz12 | \
grep '' | egrep -v '().*\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
Crunch will now generate the following number of lines: 637392
PASSWORD FOUND!!!!: pw == xhellobworld