
مكتبة وواجهة سطر أوامر (CLI) لتحوير البيانات المنظمة (JSON وXML وX.509) لدعم التضمين (fuzzing) القائم على القواعد النحوية، مع استراتيجيات تحوير متعددة والتكامل مع Radamsa.
أمبرتو هي مكتبة مصممة لتحوير البيانات المهيكلة العامة (مثل JSON وXML وX.509) وتطبيق واجهة سطر أوامر يغلّف هذه الوظيفة. يمكنها تطبيق مجموعة متنوعة من التحويرات، وتوليد قيم جديدة كليًا، وتطبيق مُحوِّرات موجودة (مثل Radamsa) على مكونات البنية. إذا كنت تحاول القيام بفحص لغوي قائم على القواعد النحوية، فقد تجدها مفيدة جدًا. من الأرجح أن يكون فهمها أسهل من خلال المثال:
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate json knuth all
{"a":2,"c":"tesb","t":1}
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate json newvals nums
{"a":-2.8e-20,"b":-40000,"c":"test"}
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate json radamsa strings
{"c\u0008^\u001f":"ó ¨teï»â¨¿st","1313131313131313â":1,"ô ó ó ¶Db":2}
echo -n "{\"a\": 1, \"b\": 2, \"c\": \"test\"}" | umberto-mutate string replacement all
:"c2:tb{ :"{c"}t"as }c"e": "2
يستخدم أمبرتو stack. ثبّت stack، واستنسخ هذا المستودع، ثم شغّل stack build && stack install. إذا كنت تريد استخدام المُحوِّر Radamsa، فستحتاج أيضًا إلى تثبيته بشكل منفصل.
يوفر أمبرتو برنامجًا تنفيذيًا بسيطًا، umberto-mutate، يغلّف معظم وظائفه. الاستخدام النموذجي يكون كما يلي:
echo -n mydata | umberto-mutate FORMAT MUTATOR TARGET
يمكن أن يكون FORMAT أيًا مما يلي:
json
string (أو بشكل أساسي "بدون تنسيق")
xml (غير مُختبَر نسبيًا)
der (X.509 DER، غير مُختبَر نسبيًا)
يمكن أن يكون MUTATOR أيًا مما يلي:
knuth: خلط كنوث للقيم المستهدفة
replacement: خلط استبدالي للقيم المستهدفة
newvals: توليد قيم مستهدفة جديدة بدلاً من القديمة
radamsa: استدعاء radamsa من الخارج للتحوير (يعمل فقط على السلاسل النصية)
يمكن أن يكون TARGET أيًا مما يلي:
strings: الأنواع النصية
nums: الأنواع الرقمية
all: جميع الأنواع
معظم وظائف أمبرتو متاحة في lib/Umberto.hs. تتطلب المُحوِّرات التي تستخدم تعدد الأشكال القائم على typeclass بعض الاستخدام لـ Template Haskell لانتهاك افتراض العالم المفتوح. هذا متاح في Umberto.TH ولكن يجب استخدامه فقط في الكود القابل للتنفيذ، وليس في المكتبات أبدًا.