اولین سوالی ممکن به ذهن برخی از شما برسد، این خواهد بود که frida چیست و چه کاربردی دارد. این برنامه یک ابزار رایگان و منبع باز است که برای مهندسی معکوس، محققان امنیتی و توسعه دهندگان مفید خواهد بود. مبنای کار این برنامه بصورت آنالیز دینامیکی است، یعنی نیاز دارد تا برنامه های هدف را در حین اجرا آنالیز کرده و نیاز کاربرش را برآورده نماید.

برای نصب frida ابتدا باید نصب کننده پکیج های پایتون (pip) بر روی سیستم نصب باشد. چرا که این ابزار با زبان پایتون تهیه شده است. تمامی روند این مستند در سیستم عامل لینوکس اوبونتو نسخه ۱۶٫۰۴ میباشد.

برای نصب pip از دو دستور زیر در محیط ترمینال لینوکس استفاده میکنیم.

sudo apt-get update

sudo apt-get install python-pip python-dev build-essential

سپس از طریق دستور pip برنامه frida را نصب میکنیم.

sudo pip install frida

این برنامه رایگان و منبع باز است، که بمنظور آنالیز داینامیک (در حال اجرا) برنامه های اندروید توسعه یافته است. پس برای اجرای این روند به یک دستگاه اندرویدی و یا یک ماشین مجازی اندروید نیازمندیم که حتما میبایستی دسترسی روت (root) داشته باشد.

در ادامه روند را بر روی یک ماشین مجازی اندرویدی که با نرم افزار Genymotion راه اندازی شده است، توضیح میدهم.

در ادامه برای برقراری ارتباط با سرور های اصلی اندروید نیازمند vpn خواهیم بود، زیرا که طبق قوانین تحریم آمریکا دسترسی به این منابع برای ایرانیان وجود ندارد!

پس از نصب و راه اندازی ماشین مجازی اندرویدی نیازمند ابزار adb بودم. لذا ترمینال لینوکس را باز کرده سپس با مجموعه دستورات زیر باید ابزار کامند-لاین adb که برای ارتباط با دستگاه اندرویدی نیاز است دانلود و نصب نماییم.

sudo apt-get install adb

sudo apt-get install android-tools-adb

حال مراحل اولیه برای شروع قدم های تخصصی تر انجام شده است. برای اینکه بتوانیم به برنامه درحال اجرای اندرویدی توسط frida دسترسی داشته باشیم نیازمند یک فایل به نام frida-server هستیم که از لینک زیر میتوان دانلود کرد:

https://github.com/frida/frida/releases

دقت داشته باشید که سرور باید مخصوص سیستم عامل اندروید باشد و معماری آن متناسب با اندروید شما باشد. (x86 همان ۳۲ بیتی و x86_64 نیز ۶۴ بیتی میباشند.)

با این سه دستور توسط یوزر روت فایل سرور را به داخل ماشین منتقل نموده و وارد محیط shell مربوط به adb میشویم:

adb root

adb push ~/Downloads/frida-server /data/local/tmp/

adb shell

قبل از شروع کار با frida چند برنامه متفاوت را در ماشین مجازی اندرویدی نصب میکنیم. من برای مثال برنامه کافه بازار ایرانی را نصب نمودم.

اکنون نوبت راه اندازی سرور است. ابتدا دسترسی کامل به فایل داده و سپس آن را اجرا میکنیم.

chmod 777 /data/local/tmp/frida-server

/data/local/tmp/frida-server &

ممکن است در این مرحله با اجرا کردن آخرین دستور، خطایی رخ داده و با چنین پیامی مواجه شوید:

[email protected]:/ # /system/bin/sh: /data/local/tmp/frida-server: not executable: magic 7F45

این خطا بدین معنی است که شما فایل سرور متناسب با معماری سیستم عامل اندروید خود را نصب نکرده اید. ابتدا به نوع معماری پردازنده دقت کنید (ARM یا Intel)، سپس به تعداد بیت های آن معماری دقت کنید تا ۳۲ یا ۶۴ بیتی را اشتباه نصب نکنید.

حال اطمینان حاصل میکنیم که آیا adb قادر است ماشین را پیدا کند یا خیر. نتیجه نهایی باید لیستی از ماشین مجازی های اندرویدی و راه اندازی شده شامل ماشین مورد نظر ما باشد.

adb devices -l

یک پنجره ترمینال دیگر باز کرده و نوبت کار با خود برنامه frida فرا میرسد. ابتدا با دستور زیر یک لیست از تمامی پروسه های در حال کار بر روی اندروید را بدست می آوریم. اگر لیست بدرستی نمایش داده شود بدین معنی است که سرور ما درست کار میکند و آماده است.

frida-ps –U

نرم افزار frida دارای یک ابزار برای trace کردن هست. توسط این ابزار میتوان توابع و تمامی رویداد های مربوط به هرتابع را مشاده نمود.

بعنوان مثال میخواهم توابعی که مربوط به ارسال و دریافت داده میباشند، در اپلیکیشن کافه بازار مشاهده و ردگیری نمایم. پس با این یک خط دستور خروجی مورد نظر خود را خواهم گرفت.

frida-trace -U -i “recv*” -i “send*” com.farsitel.bazaar

نتیجه ای که بدست آمده بدین گونه بود که ۸ تابع با اسمی مشابه به این دو رشته یافته شد. سپس برنامه frida یک پوشه به نام __ handlers__ ایجاد نمود تا بتواند توسط آن ها ردگیری را انجام دهد. سپس با استفاده کردن از برنامه بازار، لاگ انداختن شروع خواهد شد.

نکته ی بسیار مهمی که در اینجا پیش می آید این است که، طبق گزارش شرکت توسعه دهنده frida این برنامه با اندروید های ماقبل نسخه ۴٫۴ تا ۴٫۲ (یعنی ۴٫۲ تا ۴٫۴) که برمبنای Dalvik بودند، سازگاری کاملی داشته و بدون هیچگونه خطا کار میکند. لذا من برای اندروید خود نسخه ۴٫۲٫۲ را انتخاب کرده بودم. ولی پس از طی تمامی مراحل تا اینجا، وقتی نوبت به کار با frida-trace میرسید، خطا داده و خارج میشد. موارد مختلفی را امتحان کردم و در آخر نتیجه مثبت را در اندروید ۴٫۴٫۴ بدست آوردم! یعنی برخلاف ادعای شرکت با نسخه ۴٫۴٫۴ سازگارتر بود!

باتوجه به نتیجه بدست آمده، اگر بخواهیم لیستی از تمامی توابع یک اپلیکیشن داشته باشیم؛ کافیست از این دستور استفاده کنیم. فقط باید توجه کرد این کار ممکن است کمی زمانبر باشد. بجای [Package-Name] باید همانند دستور قبلی اسم پکیج مربوط به اپلیکیشن را قید نماییم.

frida-trace -U -i “*” [Package-Name]


حیتا بارسم ممقانی

دانشجوی کارشناسی رشته کامپیوتر - نرم افزار هستم. در زمینه طراحی وبسایت فعالیت نموده و به زمینه های دیگر مانند اندروید، شبکه، سخت افزار و بازی های کامپیوتری علاقمندم. عضو و نماینده انجمن علمی کامپیوتر دانشگاه صنعتی ارومیه نیز میباشم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

16 − شانزده =