
أداة لإنشاء قوائم الكلمات أو توسيع قائمة موجودة باستخدام التحوّلات.
gorilla هي الأداة المثالية لقوائم الكلمات، إذ تضم الكثير من الأدوات المساعدة المذهلة مثل:
مع تثبيت Cargo الخاص بـ Rust، شغّل الأمر 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} => (مسافة) ! " # $ ... ~. يمكنك دمج أكثر من مجموعة واحدة، لذا فإن {luds} سينتج مجموعة أحرف تحتوي على جميع مجموعات الأحرف الأخرى الموصوفة (#45).
إذا استخدمت نطاقًا وكان كل طرف يتكوّن من حرف واحد، فستحصل على نطاق أحرف. على سبيل المثال:
{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 فقط، واحدًا تلو الآخر.
إذا استخدمت نطاقًا وكان أحد الطرفين يتكوّن من أكثر من حرف واحد، فسيتم تحليل كل طرف كرقم غير موقّع 32-بت، وستحصل بدلًا من ذلك على نطاق أرقام. على سبيل المثال:{2020-2026} سيؤدي إلى إضافة 2020, 2021, 2022, 2023, 2024, 2025 و2026، واحدًا تلو الآخر.{1-100} سيؤدي إلى إضافة الأرقام من 1 إلى 100 (شاملًا)، واحدًا تلو الآخر.تجريبي: إذا كان ما داخل الأقواس يحتوي على فاصلة، فسيتم تقسيم السلسلة عندها وإضافة كل جزء واحدًا تلو الآخر، على سبيل المثال {Jan,Feb,Mar} سيؤدي إلى إضافة Jan وFeb وMar واحدًا تلو الآخر.
اختياريًا، يمكنك إنشاء عدة خيوط (threads) للأنماط باستخدام الوسيط --pattern-threads. أنصحك بتعيينها إلى أقصى عدد من الخيوط المتوفرة على جهازك.
باستخدام وسائط سطر الأوامر يمكنك تنفيذ أي تحوير مدعوم، لكنك محدود بمجموعة تحويرات واحدة فقط. مجموعة التحويرات هي مجموعة من التحويرات تُطبَّق على كلمة. عبر سطر الأوامر، تُقدَّم التحويرات عبر الوسيطة --mutation/-m.
gorilla --from-pattern "administrator" --mutation "prepend:_"

عادةً، في هذه الحالة، سترغب في استخدام الوسيطة --from-file/-i بدلًا من --from-pattern لتحديد قائمة كلمات بدل كلمة واحدة، لكن للتبسيط سأستخدمها.
يأخذ الأمر أعلاه كلمة واحدة ويُخرج كلمة واحدة: _administrator. يمكنك إضافة تحويرات متعددة باستخدام الوسيطة نفسها.
gorilla --from-pattern "administrator" \
-m "prepend:_" \
-m "append:{0-9}"
يأخذ هذا الأمر مرة أخرى كلمة واحدة فقط، لكنه سيُخرج 10 كلمات مختلفة. إضافة صيغة {0-9} إلى عمليتي prepend وappend ستؤدي إلى توليد كلمات متعددة. يولّد الأمر أعلاه الكلمات التالية.
_administrator0
_administrator1
_administrator2
[.. snip ..]
_administrator8
_administrator9
إذا قدّمنا قائمة كلمات عبر ملف -i، فسنحصل على عدد كلمات تلك القائمة مضروبًا في 10.
حتى الآن طبقنا مجموعة تحويرات واحدة فقط. عادةً سترغب في دمج عدة مجموعات منها. يتم ذلك عبر ملفات 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 العديد من التحويرات الأخرى، وبما أن الأداة في مرحلة تطوير مبكرة، فسيكون الحفاظ على قائمة بها هنا أمرًا شاقًا. إذا كنت مهتمًا بمعرفة التحويرات الأخرى، يمكنك الاطلاع على تعداد Action من ملف src/mutation.rs.
تُعرَّف الصيغ في مجموعات تنسيق عبر ملفات yaml وتُقدَّم إلى gorilla عبر الوسيطة --from-formatting/-q. حاليًا هناك مجموعة تنسيق واحدة فقط، وهي موجودة في 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.
إذا شغّلت المجموعة، سيُطلب منك إدخال كل حقل وسيتم توليد أسماء المستخدمين.

ملاحظة: لا تجعل التحويرات داخل مجموعات التنسيق معقدة للغاية، فجميعها ستعمل بخيط واحد! اخلط ملف التنسيق مع ملف تحويرات لتشغيل تحويرات متوازية. لا تستخدم أنماطًا اندماجية داخل مجموعات التحويرات في مجموعات التنسيق.
نصيحة: يمكنك استخدام الوسائط الأخرى بشكل طبيعي، مثل
--mutations-file/-fلتوليد كلمات جديدة عبر التحويرات، أو--output-file/-oلحفظ الكلمات
كل مجموعة تنسيق هي مصفوفة من السلاسل النصية التي تُلحَق لاحقًا. لذا فإن ["{f_name}", "{l_name}"] مكافئة لـ ["{f_name}{l_name}"]. بدلًا من سلسلة نصية، يمكنك توفير مصفوفة، مما يتيح لك تطبيق التحويرات التي استخدمتها سابقًا لتوسيع قوائم الكلمات.
- [ "{f_name}_", [ "{l_name}", [ reverse ] ] ]
إذا كان f_name هو joe وl_name هو doe، فسينتج التنسيق الناتج joe_eod. التحويرات المفيدة في مجموعات التنسيق هي remove_last_letter وremove_first_letter و1st_letter.
إذا أردت تطبيق مجموعة تنسيق على العديد من ملفات تعريف المستخدمين، يمكنك استخدام الوسيطة --with-csv/-c لتوفير ملف CSV. بالنسبة لمجموعة التنسيق basic_usernames، يجب أن يكون تنسيق CSV هكذا:
f_name,l_name
joe,doe
james,smith
robert,smith

>NUMBER/<NUMBER/=NUMBER)