Jackalope: فازر باینری گوگل برای ویندوز، مک و لینوکس
خلاصهٔ کاملتر
Jackalope یه فازر (fuzzer) متنباز هست که توسط Google Project Zero ساخته شده. فازینگ یعنی خوروندن ورودیهای تصادفی یا هوشمند به یه برنامه برای پیدا کردن باگ و کرش — Jackalope این کار رو روی باینریهای بلکباکس انجام میده، یعنی حتی وقتی کد منبع برنامه در دسترس نیست.
مشکلی که Jackalope حل میکنه اینه که اکثر فازرهای coverage-guided به کد منبع نیاز دارن یا روی ویندوز و مک بهخوبی کار نمیکنن. Jackalope با استفاده از TinyInst (کتابخونهای برای dynamic instrumentation) پوشش اجرایی برنامه رو بدون کد منبع ردیابی میکنه. پلتفرمهای پشتیبانیشده شامل ویندوز، macOS، لینوکس و اندروید میشه.
این ابزار هم بهصورت مستقل قابل استفادهست، هم بهعنوان یه کتابخونه که میشه بهش component سفارشی وصل کرد. بهصورت پیشفرض با یه مجموعه mutator عمومی برای فرمتهای باینری، یه موتور mutation مبتنی بر گرامر، و تحویل sample از طریق فایل یا shared memory عرضه میشه.
موازیسازی هم یکی از ویژگیهای جدی Jackalopeه: میشه با -nthreads روی یه ماشین چند thread موازی اجرا کرد، یا با معماری client-server روی چند ماشین مختلف توزیعش کرد. سرور کارش جمعآوری coverage و sample از همه workerها و توزیع اونها بین بقیهست.
یه نمونه اجرا روی macOS اینطوریه:
./fuzzer -in in -out out -t 1000 -delivery shmem -instrument_module test -target_module test -target_method __Z4fuzzPc -nargs 1 -iterations 10000 -persist -loop -cmp_coverage -- ./test -m @@اینجا ورودیها از پوشه in خونده میشن، خروجیها به out نوشته میشن، sample از طریق shared memory تحویل داده میشه و تابع fuzz() در یه حلقه persistent اجرا میشه.
معماری داخلی Jackalope هم مدولاره: کلاسهایی مثل Fuzzer، Mutator، Instrumentation، SampleDelivery و Server هر کدوم وظیفه مشخصی دارن و میشه با subclass کردن Fuzzer هر کدوم رو override کرد. مثلاً میشه mutator سفارشی نوشت، نحوه تحویل sample رو عوض کرد (مثلاً از طریق شبکه)، یا instrumentation کاملاً متفاوتی تعریف کرد.
نکات کلیدی:
- فازر coverage-guided برای باینریهای بلکباکس بدون نیاز به کد منبع
- پشتیبانی از ویندوز، macOS، لینوکس و اندروید
- instrumentation با TinyInst و تحویل sample از طریق فایل یا shared memory
- قابلیت موازیسازی روی چند thread یا چند ماشین با معماری client-server
- معماری مدولار و قابل سفارشیسازی با subclass کردن کلاسهای اصلی
- امکان استفاده از Sanitizer Coverage روی لینوکس (با کد منبع)




