Skip to content

مدیریت حافظه و ماژول‌ها: غلبه بر ASLR ​

در بخش قبل یاد گرفتیم چطور با Interceptor توابع Native را هوک کنیم. اما یک مشکل بزرگ وجود دارد: آدرس‌ها ثابت نیستند!

سیستم‌عامل اندروید از مکانیزمی امنیتی به نام ASLR (Address Space Layout Randomization) استفاده می‌کند. این یعنی هر بار که اپلیکیشن باز می‌شود، فایل‌های .so در آدرس‌های متفاوتی از حافظه بارگذاری می‌شوند. بنابراین آدرس 0x1234 که امروز پیدا کردید، فردا اشتباه است.

برای حل این مشکل، ما از فرمول زیر استفاده می‌کنیم:

آدرس واقعی = آدرس پایه (Base) + آفست (Offset)

آفست همیشه ثابت است (فاصله تابع از اول فایل)، اما آدرس پایه تغییر می‌کند. ما با Module آدرس پایه را پیدا می‌کنیم.