Android APK

فایل های قابل نصب در اندروید پکیج نرم افزاری اندروید (APK) نامیده می شود. این فرمت توسط Google برای توزیع برنامه های کاربردی برای اندروید معرفی و استفاده می شود و شبیه به فایل های .exe در سیستم عامل ویندوز است. فایل APK یک فایل فشرده است که می توان آن را از حالت فشرده خارج کرد و محتویات آن را مشاهده کرد.

برای بررسی محتویات داخلی یک فایل apk، اپلیکیشن Gmail را دانلود می کنیم و سپس به هنگام تغییر نام، پسوند آن را از .apk به .zip تغییر می دهیم. سپس آن را در یک پوشه قرار می دهیم و از حالت فشرده خارج می کنیم. فایل های داخل آن در تصویر زیر نشان داده شده اند که برخی از آن ها را بررسی می کنیم.

  • Assets : این پوشه مشابه پوشه res است. اکثر منابعی که در آن موجود هستند نیاز به حافظه کمتری دارند و کلاس های Asset manager این فایل ها را پشتیبانی می کنند. بسیاری از زمان ها، شما می توانید برخی از منابع جالب را که توسط توسعه دهندگان جا گذاشته شده را پیدا کنید، که می تواند برای محققان امنیتی سودمند باشد.
  • META-INF : این پوشه شامل .MF ( manifest file ) و گواهینامه هایی که برای امضا (sign) کردن برنامه استفاده شده، می شود.
  • Res : این پوشه شامل تمام منابعی که برای برنامه مورد نیاز است که به arsc کامپایل نمی شود، است.
  • xml : این فایل حاوی تمام جزئیات در مورد برنامه و عملکرد آن، مجوزها و غیره است. هنگامی که فایل APK را از حالت فشرده خارج می کنید، این فایل به دلیل فرمت .jar برای شما قابل خواندن نخواهد بود. برای تبدیل آن به متن ساده می توانید از ابزارهایی مانند ApkTool یا Androguard استفاده کنید.
  • dex : این فایل اجرایی کامپایل شده Dalvik است.
  • arsc : این فایل شامل تمام منابع پیش کامپایل شده (precompiled) است که توسط برنامه مورد نیاز است، به عنوان مثال، تمام فایل های XML که از کامپوننت UI یک برنامه پشتیبانی می کنند.
  • Lib : این فایل که در تصویر قبل نیست، شامل کد کامپایل شده است که به یک پردازنده خاص مانند armeabi، arm64v8a،x86 و MIPS اختصاص دارد.

 

 AndroidManifest.xml

فایل AndroidManifest.xml  اطلاعات کامل در مورد یک برنامه اندروید ارائه می کند.  به عبارت ساده، پلتفرم اندروید این فایل خاص را قبل و بعد از نصب به منظور شروع برنامه، می خواند. فایل manifest مسئول موارد زیر است:

  • نامگذاری پکیج جاوا برای اپلیکیشن
  • توصیف کامپاننت های اپلیکیشن اندروید
  • تعیین می کند که چه فرایندی چه کامپاننتی از اپلیکیشن را ارائه می دهد
  • مجوزها را اعلام می کند
  • فهرست کتابخانه ها بسته بندی شده و مرتبط با برنامه است
  • شامل اعلام حداقل سطح API است که برنامه نیاز دارد، می شود

 

ساختار فایلmanifest  اندروید

تصویر زیر ساختار عمومی هر فایل AndroidManifest.xml را نشان می دهد.

تمام عناصر این فایل باید عناصر قانونی باشند و هیچ عنصر یا ویژگی های سفارشی یا شخصی به طور کلی پشتیبانی نمی شود. جدول زیر خلاصه ای از تمام عناصر که در یک فایل مانیفست ظاهر می شوند را نشان می دهد:

 

نام المان توضیح
<action> یک عمل را به فیلتر intent  اضافه می کند
<activity> یک اکتیویتی را اعلام می کند
<activity-alias> یک نام مستعار برای یک اکتیویتی است
<application> اعلام یک برنامه است
<category> نام گروه را به یک فیلتر intent  اضافه می کند
<data> خصوصیات داده را به یک فیلتر intent  اضافه می کند
<grant-uri-permission> برای اعطای مجوز به content provider ها مورد استفاده قرار می گیرد و به شما اجازه می دهد مجموعه داده ها را مشخص کنید
<instrumentation> به شما امکان می دهد که تعاملات برنامه ها را با سیستم فعال کنید
<intent-filter> مشخص می کند که چگونه یک کامپاننت اعلام شده اندروید (اکتیویتی، سرویس، یا broadcast receiver) باید پاسخ دهد
<manifest> عنصر اصلی فایل AndroidManifest.xml است
<meta-data> جزئیات متا دیتا ها را توضیح می دهد که می تواند شامل کلیدهای API باشد
<permission> اعلام می کند که چه کسی می تواند به طور خاص به یک کامپاننت دسترسی پیدا کند. همه چیز در این برچسب مجوز مشخص شده است
<permission-group> به شما اجازه می دهد یک گروه خاص را درون برنامه ایجاد کنید
<permission-tree> برای اعلام نام پایه مجوزها استفاده می شود
<provider> اعلام کننده کامپاننتcontent provider  است
<receiver> اعلام کننده کامپاننت broadcast receiver است
<service> اعلام کننده کامپاننت  service است
<supports-screens> مورد استفاده برای اعلان اندازه صفحه، سازگاری و حالت هایی است که برنامه می تواند پشتیبانی کند
<uses-configuration> سخت افزار و نرم افزار مورد نیاز برنامه را نشان می دهد
<uses-feature> ویژگی های سخت افزاری و نرم افزاری مورد استفاده توسط برنامه را اعلام می کند
<uses-library> برای مشخص کردن تمام کتابخانه های به اشتراک گذاشته شده که برنامه به آن ها لینک شده است استفاده می شود
<uses-permission> مجوزهای خاصی کاربری را برای برنامه کاربردی برای اینکه عملکرد مناسب ارائه می دهد اعلام می کند
<uses-sdk> برای اعلام اطلاعات سطح  API پکیج استفاده می شود

 

درک فایل AndroidManifest.xml  اولین و مهمترین عنصر در تست نفوذ نرم افزار اندروید است. برخی از ویژگی های فوق العاده ای که برنامه برای کاربران فراهم می کند، در صورت یک عدم انطباق در استفاده از عناصر مناسب می تواند به یک ویژگی خطرناک تبدیل شود که امنیت برنامه و اطلاعات کاربران را به خطر می اندازد.

 

گردآورنده و مترجم : مریم مکاریان خراسانی

 

منبع:

  • Mobile Application Penetration Testing,Copyright © 2016,Vijay Kumar Velu,Published by Packt Publishing Ltd.