
فازر لمعمارية AArch64 مبني على هايبرفايزر Apple Silicon
HYPERPOM
مكتبة تنقيب عن الأخطاء لمعمارية AArch64 مبنية على Hypervisor من Apple Silicon
Hyperpom هو إطار عمل للتنقيب عن الأخطاء موجَّه بالتغطية ومرتكز على التحوير (mutation-based)، مبني على Hypervisor من Apple Silicon. صُمِّم لتسهيل تتبّع (instrument) الثنائيات في مساحة مستخدم AArch64 والتنقيب فيها.
الفكرة وراء هذا المشروع كانت إنشاء أداة تنقيب فعّالة وسريعة تستفيد من مزايا Apple Silicon. ومع ذلك، في هذه المرحلة، وعلى الرغم من أن الأداة تعمل، إلا أنها لا تزال في معظمها مجرد إثبات للمفهوم وتتطلب الكثير من التحسينات لتوفير مزايا وقابلية استخدام وأداء أفضل.
قد تكون كافيةً لحالات استخدامك، لكن ضع في اعتبارك أنك قد تواجه قيودًا لم تؤخذ في الحسبان أثناء تصميم المشروع. وفي كل الأحوال، لا تتردد في فتح issue وسنحاول معالجة مشكلتك.
rustup باستخدام الدليل الرسمي.rustup toolchain install nightly
لاستخدام هذه القناة عند الترجمة، يمكنك إما:
rustup default nightly؛+nightly في كل مرة تترجم فيها ثنائيًا باستخدام cargo.ثبّت Cmake، باستخدام brew على سبيل المثال:
brew install cmake
للوصول إلى إطار عمل Hypervisor، يجب أن يكون للثنائي القابل للتنفيذ ترخيص hypervisor.
يمكنك إضافة هذا الترخيص إلى ثنائي موجود في /path/to/binary باستخدام ملف entitlements.xml الموجود في جذر مستودع Hyperpom والأمر التالي:
codesign --sign - --entitlements entitlements.xml --deep --force /path/to/binary
أنشئ مشروع Rust وأضف Hyperpom كاعتماد (dependency) في Cargo.toml. يمكنك سحبه إما من crates.io ...
# Check which version is the latest, this part of the README might not be updated
# in future releases.
hyperpom = "0.1.0"
... أو مباشرة من مستودع GitHub.
hyperpom = { git="https://github.com/impalabs/hyperpom", branch="master" }
أنشئ ملفًا باسم entitlements.txt في الدليل الجذر للمشروع وأضف ما يلي:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.hypervisor</key>
<true/>
</dict>
</plist>
اكتب الكود ثم ابنِ المشروع.
cargo build --release
وقّع الثنائي وامنحه ترخيص hypervisor.
codesign --sign - --entitlements entitlements.xml --deep --force target/release/${PROJECT_NAME}
شغّل الثنائي.
target/release/${PROJECT_NAME}
التوثيق متاح عبر الإنترنت على العنوان التالي: https://docs.rs/hyperpom
بدلاً من ذلك، يمكنك توليده باستخدام cargo:
cargo doc --open
يحتوي التوثيق على معلومات حول استخدام الإطار وعمقه الداخلي. للحصول على دليل متعمق، ألقِ نظرة على فصل Loader، الذي يقدّم أمثلة حول كيفية استخدام أداة التنقيب (fuzzer) وتجهيز أهدافك للاختبار.
تم توفير أربعة أمثلة لتمنحك فهمًا أفضل لكيفية عمل الإطار وتساعدك على البدء:
Executor.يمكنك أيضًا إلقاء نظرة على الاختبارات.
لتشغيل الاختبارات باستخدام Makefile المرفق مع المشروع، ستحتاج أولاً إلى تثبيت jq. يمكنك ذلك باستخدام brew:
brew install jq
يمكنك بعد ذلك تشغيل الاختبارات مع Makefile المرفق باستخدام الأمر التالي:
make tests