
mutations का उपयोग करके wordlists उत्पन्न करने या किसी मौजूदा wordlist को विस्तारित करने के लिए उपकरण।
gorilla एक सर्वोत्तम वर्डलिस्ट टूल है जिसमें कई शानदार उपयोगिताएँ समाहित हैं, जैसे:
Rust का Cargo इंस्टॉल होने पर, cargo install --git https://github.com/d4rckh/gorilla --branch main चलाएँ।
अब आप gorilla --help चला पाएँगे।
cargo build --release
# the binary will be located in target/release folder
--from-pattern/-p आर्ग्युमेंट का उपयोग gorilla को किसी पैटर्न के आधार पर पासवर्ड कंप्यूट करने के लिए कहने हेतु किया जाता है।
उदाहरण के लिए, निम्न कमांड 5 लोअरकेस अक्षरों वाले हर शब्द को प्रिंट करेगी।
gorilla --from-pattern "{a-z}{a-z}{a-z}{a-z}{a-z}"
पैटर्न के अन्य उदाहरण हैं administrator{0-9} (administrator0 -> administrator9); hello_world{a-z}{0-9} (hello_worlda0 -> hello_worldz9)।
यदि आप आउटपुट को किसी फ़ाइल में सहेजना चाहते हैं, तो आप --output-file/-o आर्ग्युमेंट का उपयोग कर सकते हैं।

Gorilla अब कैरेक्टर सेट का भी समर्थन करता है। इन्हें src/char_sets.rs में परिभाषित किया गया है। यहाँ ऐसे कुछ पैटर्न के उदाहरण हैं जो इनका उपयोग करते हैं: {l} => a b c d ... z; {u} => A B C D ... Z; {d} => 1 2 3 4 ... 9; {s} => (space) ! " # $ ... ~. आप इनमें से कई को संयोजित कर सकते हैं, इसलिए {luds} के परिणामस्वरूप ऐसा कैरेक्टर सेट मिलेगा जिसमें बताए गए अन्य सभी कैरेक्टर सेट शामिल होंगे (#45)।
यदि आप कोई रेंज उपयोग करते हैं और प्रत्येक सिरे पर 1 कैरेक्टर है, तो आप कैरेक्टर रेंज बना रहे होंगे। उदाहरण के लिए:
{a-z} के परिणामस्वरूप वर्णमाला का प्रत्येक अक्षर एक-एक करके जुड़ेगा: a, b, c, d, e, f, g,...., x, y और z;{a-c} के परिणामस्वरूप केवल a, b और c एक-एक करके जुड़ेंगे;{0-9} के परिणामस्वरूप केवल 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 एक-एक करके जुड़ेंगे।
यदि आप कोई रेंज उपयोग करते हैं और किसी एक सिरे पर 1 से अधिक कैरेक्टर हैं, तो प्रत्येक सिरे को unsigned 32-bit नंबर के रूप में पार्स किया जाएगा और इसके बजाय नंबर रेंज परिणाम देगा। उदाहरण के लिए:{2020-2026} के परिणामस्वरूप 2020, 2021, 2022, 2023, 2024, 2025 और 2026 एक-एक करके जुड़ेंगे।{1-100} के परिणामस्वरूप 1 से 100 (समावेशी) तक की संख्याएँ एक-एक करके जुड़ेंगी।प्रायोगिक: यदि आपके ब्रैकेट्स के अंदर कॉमा है, तो स्ट्रिंग को उसके द्वारा विभाजित किया जाएगा और प्रत्येक भाग एक-एक करके जोड़ा जाएगा, उदाहरण के लिए {Jan,Feb,Mar} के परिणामस्वरूप Jan, Feb और Mar एक-एक करके जुड़ेंगे।
वैकल्पिक रूप से, आप --pattern-threads पैरामीटर का उपयोग करके कई पैटर्न थ्रेड्स स्पॉन कर सकते हैं। मेरा सुझाव है कि आप इसे अपने कंप्यूटर पर उपलब्ध थ्रेड्स की अधिकतम संख्या पर सेट करें।
कमांड लाइन आर्ग्युमेंट्स का उपयोग करके आप कोई भी समर्थित म्यूटेशन कर सकते हैं, लेकिन आप केवल 1 म्यूटेशन सेट तक सीमित हैं। म्यूटेशन सेट, किसी शब्द पर लागू किए गए म्यूटेशनों का एक समूह होता है। CLI के माध्यम से, म्यूटेशन --mutation/-m आर्ग्युमेंट के ज़रिए दिए जाते हैं।
gorilla --from-pattern "administrator" --mutation "prepend:_"

सामान्यतः इस स्थिति में आप एकल शब्द के बजाय वर्डलिस्ट निर्दिष्ट करने के लिए --from-pattern के स्थान पर --from-file/-i आर्ग्युमेंट का उपयोग करना चाहेंगे, लेकिन चीज़ों को सरल रखने के लिए मैं उसी का उपयोग करूँगा।
उपरोक्त कमांड 1 शब्द लेती है और 1 शब्द आउटपुट करती है: _administrator। आप उसी पैरामीटर का उपयोग करके कई म्यूटेशन जोड़ सकते हैं।
gorilla --from-pattern "administrator" \
-m "prepend:_" \
-m "append:{0-9}"
यह फिर से 1 एकल शब्द लेती है, लेकिन 10 अलग-अलग शब्द आउटपुट करेगी। prepend और append में {0-9} सिंटैक्स जोड़ने से कई शब्द जनरेट होंगे। उपरोक्त कमांड निम्नलिखित शब्द जनरेट करती है।
_administrator0
_administrator1
_administrator2
[.. snip ..]
_administrator8
_administrator9
यदि हम -i फ़ाइल के माध्यम से वर्डलिस्ट देते हैं, तो हमें उस वर्डलिस्ट में मौजूद शब्दों की संख्या का 10 गुना वापस मिलेगा।
अब तक हमने केवल 1 म्यूटेशन सेट लागू किया है। सामान्यतः आप इनमें से कई को संयोजित करना चाहेंगे। यह yaml फ़ाइलों के माध्यम से किया जाता है। आप --mutations-file/-f आर्ग्युमेंट का उपयोग करके एक निर्दिष्ट करते हैं। इस रिपो में sets/simple.yml फ़ाइल में एक उदाहरण मौजूद है, और यह कुछ ऐसा दिखता है:
name: simple
mutation_sets:
- [ nothing ] # => word
- [ reverse ] # => drow
- [ remove_last_letter ] # => wor
- [ remove_first_letter ] # => ord
- [ uppercase_all ] # => WORD
- [ "append:{0-9}" ] # => word1, word2, word3
- [ "2 append:{0-9}" ] # => word11, word22, word33
- [ "replace:o:0", "replace:a:4", "replace:e:3" ] # => w0rd, h3ll0

जैसा कि उदाहरण में दिखाया गया है, प्रत्येक म्यूटेशन फ़ाइल में name और mutation_sets मान होना चाहिए। उपरोक्त म्यूटेशन सेट, एक शब्द से 27 अन्य शब्द जनरेट करेंगे।
administrator
administrator
rotartsinimda
administrato
dministrator
ADMINISTRATOR
administrator0
[.. snip ..]
administrator9
administrator00
[.. snip ..]
administrator99
4dministr4t0r
यदि आप अपनी म्यूटेशन फ़ाइल का उपयोग करने से पहले उसमें त्रुटियों की जाँच करना चाहते हैं, तो आप निम्न सिंटैक्स का उपयोग करके उसे पार्स कर सकते हैं और सारांश प्रिंट कर सकते हैं।
gorilla --mutations-file muts.yml
(अभी के लिए) आप केवल किसी विशिष्ट पेज से शब्द स्क्रैप कर सकते हैं। Styles और script टैग स्वतः हटा दिए जाते हैं।
आप --from-website/-w आर्ग्युमेंट का उपयोग करके कोई पेज निर्दिष्ट कर सकते हैं। उदाहरण के लिए
gorilla --from-website https://example.org/

उपरोक्त कमांड उस वेबसाइट का हर शब्द प्रिंट करेगी। आप पहले दिखाए गए अन्य आर्ग्युमेंट्स जैसे --mutations-file/-f, --mutation/-m और निश्चित रूप से उन्हें सहेजने के लिए --output-file/-o (प्रिंट करने के बजाय) जोड़ सकते हैं।
आप कुछ शर्तों/शर्त को पूरा करने वाले विशिष्ट शब्दों पर म्यूटेशन का एक सेट लागू कर सकते हैं। यह केवल yaml फ़ाइलों में ही मायने रखता है।
निम्न म्यूटेशन फ़ाइल उन शब्दों को हटा देगी जिनमें admin स्ट्रिंग नहीं होती। पिछले म्यूटेशनों के विपरीत, यह शब्दों को हटा सकती है।
name: filtering_words
mutation_sets:
- [ "if_contains:admin" ]
एक और उदाहरण निम्नलिखित है, जो केवल 5 कैरेक्टर से अधिक लंबे शब्दों में अंडरस्कोर जोड़ेगा।
name: conditional_mutation
mutation_sets:
- [ "if_length:>5", "append:_" ],
- [ "! if_length:>5" ]
ध्यान दें कि हमें पहले if म्यूटेशन के नकारात्मक संस्करण से शुरू होने वाला एक और म्यूटेशन सेट जोड़ना पड़ा, क्योंकि अन्यथा 6 कैरेक्टर से छोटे शब्द हटा दिए जाएँगे।
gorilla कई अन्य म्यूटेशनों का समर्थन करता है और चूँकि यह टूल प्रारंभिक विकास में है, इसलिए यहाँ उनकी सूची बनाए रखना बहुत कठिन होगा। यदि आप अन्य म्यूटेशनों के बारे में उत्सुक हैं, तो आप src/mutation.rs फ़ाइल से Action enum देख सकते हैं।
फ़ॉर्मेट yaml फ़ाइलों के माध्यम से formatting sets में परिभाषित होते हैं और --from-formatting/-q आर्ग्युमेंट के माध्यम से gorilla को दिए जाते हैं। फ़िलहाल केवल एक formatting set बनाया गया है, जो sets/formatting/basic_usernames.yml पर स्थित है। और यह (कुछ ऐसा) दिखता है।
name: basic_usernames
fields:
- [ f_name ]
- [ l_name ]
formatting_sets:
- [ "{f_name}_{l_name}" ]
- [ "{l_name}{f_name}" ]
- [ ["{f_name}", [1st_letter]], "_{l_name}" ]
- [ ["{f_name}", [1st_letter]], "{l_name}" ]
आवश्यक फ़ील्ड name, fields और formatting_sets हैं। fields मान उपयोगकर्ता की प्रोफ़ाइल है और इसमें वह जानकारी होती है जिसका उपयोग बाद में formatting_sets में किया जाता है।
यदि आप set चलाते हैं, तो आपसे प्रत्येक फ़ील्ड के लिए पूछा जाएगा और यूज़रनेम जनरेट हो जाएँगे।

नोट: formatting sets के अंदर म्यूटेशनों को बहुत जटिल न बनाएँ, वे सभी single threaded चलेंगे! समानांतर म्यूटेशन चलाने के लिए formatting फ़ाइल को म्यूटेशन फ़ाइल के साथ मिलाएँ। formatting sets के म्यूटेशन सेट्स के अंदर combinatorical पैटर्न का उपयोग न करें।
टिप: आप अन्य आर्ग्युमेंट्स को सामान्य रूप से उपयोग कर सकते हैं, जैसे म्यूटेशन के माध्यम से नए शब्द जनरेट करने के लिए
--mutations-file/-fया शब्दों को सहेजने के लिए--output-file/-o।
प्रत्येक formatting set स्ट्रिंग्स की एक ऐरे है जिन्हें बाद में जोड़ा जाता है। इसलिए ["{f_name}", "{l_name}"], ["{f_name}{l_name}"] के समतुल्य है। स्ट्रिंग के बजाय, आप एक ऐरे दे सकते हैं, जिससे आप उन म्यूटेशनों को लागू कर सकते हैं जिनका उपयोग आप पहले वर्डलिस्ट बढ़ाने के लिए कर चुके हैं।
- [ "{f_name}_", [ "{l_name}", [ reverse ] ] ]
यदि f_name joe है और l_name doe है, तो परिणामी formatting joe_eod जनरेट करेगी। formatting sets में उपयोगी म्यूटेशन remove_last_letter, remove_first_letter और 1st_letter हैं।
यदि आप कई उपयोगकर्ता प्रोफ़ाइलों पर formatting sets लागू करना चाहते हैं, तो CSV फ़ाइल देने के लिए आप --with-csv/-c आर्ग्युमेंट का उपयोग कर सकते हैं। basic_usernames formatting set के लिए, CSV को इस प्रकार फ़ॉर्मेट किया जाना चाहिए:
f_name,l_name
joe,doe
james,smith
robert,smith

>NUMBER/<NUMBER/=NUMBER)