ساختار و کالبدشناسی یک فایل APK
بسته اپلیکیشن اندروید (APK) فرمت استاندارد توزیع و نصب برنامهها در سیستمعامل اندروید است. هر فایل APK در واقع یک بایگانی فشرده است که ساختار مشخصی برای اجرای صحیح برنامه روی دستگاه کاربر دارد. ابزار «مشاهدهگر اطلاعات APK» با بررسی ساختار داخلی این فایل، اطلاعات کلیدی آن را بدون نیاز به نصب استخراج میکند.
بخشهای اصلی درون یک فایل APK که توسط این ابزار تحلیل میشوند عبارتند از:
- فایل
AndroidManifest.xml: این فایل هسته مرکزی اطلاعات اپلیکیشن است. تمام مشخصات برنامه شامل نام بسته، نسخههای اندروید مورد نیاز، مجوزهای درخواستی و کامپوننتهای برنامه در این فایل تعریف میشوند. ابزار با خواندن این فایل، ساختار برنامه را تحلیل میکند. اگر این فایل خوانا نباشد، ابزار خطایnotApk("این شبیه به یک APK به نظر نمیرسد: هیچ فایل AndroidManifest.xml خوانایی در آن یافت نشد.") را نمایش میدهد. - فایلهای کد (
.dex): این فایلها حاوی کدهای کامپایلشده جاوا یا کاتلین هستند که توسط ماشین مجازی اندروید اجرا میشوند. تعداد این فایلها در بخشlDexFiles("فایلهای کد (.dex)") گزارش میشود. - منابع و داراییها: فایلهای گرافیکی، رابط کاربری و تنظیمات در بخش
lResFiles("فایلهای منبع") و فایلهای جانبی دیگر در بخشlAssets("فایلهای دارایی") قرار میگیرند. - کد بومی (Native Code): کتابخانههای کامپایلشده برای معماریهای مختلف پردازنده (مانند ARM یا x86) که در پوشه مخصوصی قرار دارند و ابزار آنها را شناسایی میکند.
تفاوتهای مهمی میان APK و سایر فرمتهای انتشار وجود دارد. فرمت Android App Bundle (.aab) یک فرمت انتشار برای گوگل پلی است و مستقیماً روی دستگاه قابل نصب نیست. در صورت آپلود این فرمت، ابزار خطای aab ("این یک Android App Bundle (.aab) است — یک فرمت انتشار است، نه یک APK قابلنصب. در عوض، APK ساختهشده را بررسی کنید.") را نشان میدهد. همچنین بستههای چندبخشی مانند XAPK یا APKM که شامل چند فایل APK هستند، پشتیبانی نمیشوند و خطای xapk ("این یک بسته چندبخشی XAPK است — کانتینری از چندین APK. فایل APK پایه را استخراج کرده و آن را بررسی کنید.") صادر میشود.
نیازمندیها و سازگاری نسخههای اندروید
در بخش secRequirements ("نیازمندیها")، ابزار پارامترهای تعیینکننده سازگاری برنامه با نسخههای مختلف سیستمعامل اندروید را استخراج میکند. این پارامترها رفتار امنیتی و نحوه اجرای برنامه را مشخص میکنند:
| عنوان در ابزار | نحوه نمایش | تعریف فنی |
|---|---|---|
lMinSdk (حداقل Android) |
sdkAndroid یا sdkOnly |
قدیمیترین نسخه اندروید که قادر به اجرای این برنامه است. |
lTargetSdk (Android هدف) |
sdkAndroid یا sdkOnly |
نسخهای از اندروید که برنامه برای آن بهینهسازی و تست شده است و رفتارهای امنیتی سیستم بر اساس آن اعمال میشود. |
lMaxSdk (حداکثر SDK) |
lMaxSdk |
بیشترین نسخه اندرویدی که برنامه مجاز به اجرا روی آن است (در صورت تعریف در مانیفست). |
نمایش نسخهها به صورت Android ‹version› (API ‹level›) (مانند Android 13 (API 33)) یا صرفاً به صورت API ‹level› انجام میشود.
تحلیل دسترسیها و مجوزهای خطرناک
یکی از حیاتیترین بخشهای بررسی امنیت پیش از نصب، بخش secPermissions ("دسترسیها") است. اپلیکیشنهای اندروید برای دسترسی به منابع سیستم یا دادههای کاربر باید مجوزهای لازم را در مانیفست خود اعلام کنند.
اندروید مجوزها را به دستههای مختلفی تقسیم میکند. مجوزهایی که به دادههای خصوصی کاربر دسترسی دارند (مانند موقعیت مکانی، مخاطبین، دوربین، میکروفون و حافظه دستگاه) به عنوان مجوزهای «خطرناک» شناخته میشوند. ابزار «مشاهدهگر اطلاعات APK» این مجوزها را شناسایی کرده و نشان lDangerous ("خطرناک") را در کنار آنها قرار میدهد. برای تسهیل در بررسی، مجوزهای دارای نشان خطرناک در بالای لیست دسترسیها اولویتدهی و مرتبسازی میشوند. بررسی این بخش به کاربران کمک میکند تا مطابقت دسترسیهای درخواستی را با کارکرد واقعی برنامه بسنجند.
بررسی کامپوننتهای برنامه و مرزهای امنیتی
بخش secComponents ("کامپوننتها") اجزای ساختاری برنامه را نمایش میدهد. این بخش به چهار گروه اصلی تقسیم میشود که برای هر کدام حداکثر ۱۰۰ ورودی نمایش داده شده و موارد بیشتر با برچسب lMore ("+‹count› مورد دیگر") مشخص میشوند:
groupActivities(Activityها): صفحات رابط کاربری برنامه.groupServices(Serviceها): عملیات پسزمینه بدون رابط کاربری.groupReceivers(Receiverها): دریافتکنندههای پیامهای سیستم یا سایر برنامهها.groupProviders(Providerها): اشتراکگذاری دادهها بین برنامهها (در صورت عدم وجود، مقدار "هیچکدام" نمایش داده میشود).
هر یک از این کامپوننتها اگر دارای ویژگی exported در مانیفست باشند، با برچسب lExported ("برونبردیشده") متمایز میشوند. کامپوننتهای برونبردیشده میتوانند توسط برنامههای دیگر موجود در دستگاه فراخوانی شوند، که این موضوع یک نقطه تمرکز مهم در تحلیلهای امنیتی است.
طرحهای امضای دیجیتال و اصالتسنجی
امنیت اندروید به شدت به امضای دیجیتال بستگی دارد. ابزار در بخش secSignatures ("امضاها") اطلاعات گواهیهای امضا را از بلوکهای امضای v1 (PKCS#7) و بلوکهای امضای APK (شامل v2، v3 و v3.1) استخراج میکند. اطلاعات نمایش داده شده برای هر lSigner ("امضاکننده ‹n›") شامل موارد زیر است:
lSubject(موضوع)lIssuer(صادرکننده)lSerial(شماره سریال)lValidFrom(معتبر از) وlValidTo(معتبر تا)lSigAlg(الگوریتم امضا) وlKeyAlg(الگوریتم کلید)- اثر انگشتهای رمزنگاریشده MD5، SHA-1 و SHA-256 گواهی.
اگر هیچ بلوک امضای معتبری در فایل یافت نشود، پیام unsigned ("هیچ بلوک امضای معتبری یافت نشد؛ ممکن است بسته امضا نشده باشد یا مجدداً بستهبندی شده باشد.") نمایش داده میشود. این ابزار صرفاً اطلاعات متادیتای گواهی را استخراج کرده و نمایش میدهد؛ عملیات تایید رمزنگاری زنجیره اعتماد یا احراز هویت واقعی ناشر توسط ابزار انجام نمیشود.
پردازش محلی و حریم خصوصی دادهها
امنیت اطلاعات کاربران در ابزار «مشاهدهگر اطلاعات APK» از طریق پردازش کاملاً محلی تضمین میشود. تمام فرآیندهای خواندن فایل، محاسبه هشهای رمزنگاری (MD5، SHA-1، SHA-256) در بخش secHashes ("هشهای فایل") و تجزیه ساختار APK در داخل یک Worker محلی در مرورگر وب کاربر انجام میگیرد.
هیچ داده یا فایلی به سرورهای خارجی ارسال یا آپلود نمیشود و فایل APK هرگز روی دستگاه کاربر نصب یا اجرا نمیگردد. این رویکرد امکان بررسی امن فایلهای حساس تا حجم ۵۰۰ مگابایت را فراهم میسازد.
پرسشهای متداول
بدون نصب کردن یک APK چه چیزی میتوان دربارهاش فهمید؟ موارد زیادی مانند: نام بسته و نسخه اپلیکیشن، نسخههای اندروید موردنیاز، تمام مجوزهای درخواستی، صفحات و اجزای پسزمینه اعلامشده، انواع پردازندههایی که کد بومی برایشان ارائه شده، و گواهیهایی که با آنها امضا شده است.
آیا این ابزار میتواند بگوید که یک APK بدافزار است یا خیر؟ خیر — و نسبت به هر ابزاری که وعده تشخیص قطعی با یک اسکن سریع را بدهد تردید داشته باشید. مواردی که اینجا دریافت میکنید واقعیتها هستند: مجوزها، اجزا، امضاکنندگان و هشها. آنها را با اطلاعات منتشرشده توسط توسعهدهنده مقایسه کنید و مجوزهای غیرمنتظره یا امضاکنندهای متفاوت با نسخه رسمی را دلیلی برای انصراف بدانید.
چه فایلهایی پشتیبانی میشوند؟ فایلهای تک APK تا حجم ۵۰۰ مگابایت. بستههای چندبخشی (XAPK، APKM) و Android App Bundle (.aab) بیشتر کانتینر یا فرمت انتشار هستند تا یک بسته قابلنصب، بنابراین بهجای گزارشی گیجکننده، با پیامی واضح رد میشوند.
جزئیات امضا چه چیزی را به من میگویند؟ هر اپلیکیشن اندرویدی امضا میشود و گواهی مشخص میکند چه کسی آن را منتشر کرده است. شما طرحهای امضای حامل بسته (v1، v2، v3) و موضوع، بازه زمانی اعتبار، و اثرانگشتهای MD5، SHA-1 و SHA-256 هر امضاکننده را مشاهده میکنید. دو APK با اثرانگشتهای یکسان از یک ناشر آمدهاند — اینکه آیا به آن ناشر اعتماد کنید یا خیر به عهده خود شماست.
نشان «Dangerous» روی یک مجوز به چه معناست؟ این طبقهبندی رسمی خود اندروید است: مجوزهای خطرناک میتوانند به دادههای خصوصی دسترسی پیدا کنند — موقعیت مکانی، مخاطبین، دوربین، میکروفون، حافظه — بنابراین سیستم پیش از اعطای آنها از کاربر پرسوجو میکند. این نشان یک اتهام نیست؛ درخواست یک اپلیکیشن نقشه برای دسترسی به موقعیت مکانی امری طبیعی است. این فقط مجوزهایی را مشخص میکند که ارزش دارد دو بار خوانده شوند.