angr؛ فریمورک تحلیل باینری با پایتون
خلاصهٔ کاملتر
تو صفحهٔ پروژه اومده که angr یه مجموعه کتابخونهٔ پایتون ۳ هست که بهت اجازه میده یه فایل باینری رو لود کنی و کلی کار جالب باهاش بکنی. نکتهٔ مهمش اینه که platform-agnostic هست؛ یعنی به یه معماری یا سیستمعامل خاص گره نخورده و میتونه باینریهای مختلف رو تحلیل کنه.
قابلیتهاش طیف گستردهای از تحلیل باینری رو پوشش میده: دیساسمبلی و بالا بردن کد به یه نمایش میانی (intermediate representation)، ابزارگذاری روی برنامه (instrumentation)، اجرای نمادین، تحلیل جریان کنترل (control-flow)، تحلیل وابستگی دادهها، تحلیل مجموعهمقادیر یا VSA، و decompile کردن.
مفهوم محوری angr همون اجرای نمادین (symbolic execution) هست. به جای اینکه برنامه رو با یه ورودی مشخص اجرا کنی، ورودیها رو بهصورت متغیرهای نمادین در نظر میگیره و مسیرهای مختلف اجرای برنامه رو دنبال میکنه؛ اینطوری میشه فهمید چه ورودیای برنامه رو به یه نقطهٔ خاص میرسونه، بدون اینکه دستی دنبالش بگردی.
رایجترین کاری که آدم با angr میکنه لود کردن یه باینریه که با ساختن یه angr.Project و دادن مسیر فایل انجام میشه. تو محیطهای REPL پیشرفته مثل IPython هم میتونی با tab-autocomplete متدهای سطحبالای در دسترس و داکاسترینگهاشون رو مرور کنی.
مثالی هم که آورده شده نشون میده چطور با اجرای نمادین میشه flag یه چالش CTF رو پیدا کرد: روی یه آدرس مشخص از باینری یه hook میذاری، و وقتی اجرا به اون نقطه میرسه، خروجی استانداردی که برنامه انتظار داشته (یعنی همون flag) از حالت posix دامپ و چاپ میشه. به همین خاطر angr ابزار محبوبی بین تیمهای CTF و حوزهٔ امنیته.
این پروژه رو آزمایشگاه امنیت کامپیوتر دانشگاه UC Santa Barbara، گروه SEFCOM دانشگاه Arizona State، تیم CTF مرتبطشون Shellphish و جامعهٔ متنباز با هم توسعه میدن و مستندات و مرجع API مفصلی هم داره.
نکات کلیدی:
- یه فریمورک متنباز و مستقل از معماری برای تحلیل باینری، نوشتهشده با پایتون ۳
- قابلیتها: دیساسمبلی، instrumentation، اجرای نمادین، تحلیل control-flow و data-dependency، VSA و decompile
- نقطهٔ قوت اصلیش اجرای نمادینه که ورودیها رو نمادین در نظر میگیره و مسیرهای اجرا رو دنبال میکنه
- کاربرد پرتکرارش حل چالشهای CTF و کارهای امنیتیه
- پشت پروژه آزمایشگاههای دانشگاهی UCSB و ASU بههمراه تیم Shellphish و جامعهٔ متنبازن




