اجزای فایل APK

کالبدشکافی از نوع اندروید: بررسی اجزای تشکیل دهنده فایل APK – بخش دوم

در مطلب قبلی به کلیاتی در ارتباط با فایل APK اندروید پرداخته شد، در ادامه قصد داریم اجزای این فایل را با جزئیات بیشتری مورد بررسی قرار دهیم، با ما همراه باشید.

3. تجزیه و تحلیل محتوای APK

حال که با نحوه ساخت و استفاده از فایل های APK آشنایی پیدا کردید، نگاهی به محتوای این فایل می اندازیم تا درک عملکرد آن ساده تر و واضح تر گردد. در این مطلب فایل APK یک اپلیکیشن به نام Sample Soft Keyboard را مورد استفاده قرار می دهیم که بر روی امولاتور اندروید به طور پیش فرض نصب شده است. در صورتی که تمایل به استفاده از یک گوشی واقعی داشته باشید، به راحتی قادر به استفاده از APK هر اپلیکیشنی که بر روی آن نصب کرده اید، می باشید.

گام 1: انتقال APK به کامپیوتر

به منظور بررسی محتوای یک APK، اول از همه لازم است آن را از روی امولاتور به کامپیوتر خود منتقل کنید. برای این کار باید نام پکیج و مسیر مطلق APK را بدانید. از adb برای باز کردن یک shell session در امولاتور استفاده نمایید.

adb shell

زمانی که Shell prompt را مشاهده کردید، از کامند pm list برای فهرست بندی نام پکیج تمامی اپلیکیشن های نصب شده استفاده نمایید.

pm list packages

نام اپلیکیشنی که در این مطلب مورد استفاده قرار گرفته است com.example.android.softkeyboard می باشد که باید در لیست موردنظر نمایش داده شده باشد. با ارسال نام پکیج به کامند pm path، قادر به شناسایی مسیر مطلق APK می باشید.

pm path com.example.android.softkeyboard

خروجی کامند بالا چیزی مشابه زیر می باشد:

package:/data/app/SoftKeyboard/SoftKeyboard.apk

حال که این مسیر را می دانید، می توانید از shell خارج شده و APK را با کمک کامند adb pull، به کامپیوتر خود منتقل کنید. کامند بالا APK را به دایرکتوری tmp/ کامپیوتر شما منتقل می کند.

adb pull /data/app/SoftKeyboard/SoftKeyboard.apk /tmp

گام 2: خارج کردن محتوای APK

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

اجزای فایل APK

چنانچه یک توسعه دهنده اپلیکیشن هستید، بسیاری از فایل های موجود در APK برای شما آشنا خواهند بود، به غیر از تصاویر موجود در فولدر res، سایر فایل ها با فرمت هایی ذخیره شده اند که بدون کمک چندین ابزار مخصوص این کار، قادر به کار با آنها نمی باشید.

گام 3: رمزگشایی فایل های XML باینری 

Android SDK دربرگیرنده تمامی ابزارهای لازم برای تجزیه و تحلیل محتوای یک APK می باشد. پیش از این اشاره شد که از aapt برای پکیج کردن منابع XML در طول فرآیند بیلد استفاده می شود و می توان از آن خواندن اطلاعات زیادی از یک APK نیز استفاده کرد.

برای مثال می توان از گزینه dump xmltree برای خواندن محتوای هر فایل XML باینری در APK استفاده کرد. در زیر نحوه خواندن یک فایل لی اوت به نام res/layout/input.xml نشان داده شده است:

aapt dump xmltree /tmp/SoftKeyboard.apk res/layout/input.xml

خروجی چیزی مشابه زیر می باشد:

N: android=http://schemas.android.com/apk/res/android

E: com.example.android.softkeyboard.LatinKeyboardView (line=21)

A: android:id(0x010100d0)=@0x7f080000

A: android:layout_width(0x010100f4)=(type 0x10)0xffffffff

A: android:layout_height(0x010100f5)=(type 0x10)0xfffffffe

A: android:layout_alignParentBottom(0x0101018e)=(type 0x12)0xffffffff

این خروجی شباهت چندانی به XML ندارد، اما با کمک فاصله و برچسب گذاری هایی مانند N برای namespaces، برچسب E برای element، برچسب A برای attribute قادر به خواندن آن هستید.

گام 4: رمزگشایی رشته ها

همانطور که در گام قبلی نیز مشاهده کردید، XML رمزگشایی شده به جای رشته ها دربرگیرنده اعداد هگزادسیمال است. این اعداد ارجاعی به رشته های موجود در فایلی به نام resources.arsc می باشند که نمایش دهنده جدول منابع یک اپلیکیشن می باشد.

با استفاده از dump resources از aapt می توانید جدول منابع را مشاهده کنید، به صورت زیر:

aapt dump --values resources /tmp/SoftKeyboard.apk

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

resource 0x7f080000 com.example.android.softkeyboard:id/keyboard: t=0x12 d=0x00000000 (s=0x0008 r=0x00)

گام 5: تجزیه Dalvik Bytecode

مهم ترین فایل در APK، فایل classes.dex می باشد که فایل مورد استفاده توسط ران تایم اندروید بوده که هنگام اجرای اپلیکیشن مورد استفاده قرار می گیرد. این فایل دربرگیرنده Dalvik bytecode تولیدشده در طول فرآیند بیلد است.

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

dexdump -d /tmp/classes.dex > /tmp/classes.dasm

با باز کردن classes.dasm صدها خط از کد سطح پایین را می بینید که مشابه زیر می باشد:

اجزای فایل APK

درک این کدها بسیار دشوار است، اما خوشبختانه می توانید با استفاده از گزینه l- فرمت خروجی را از dexdump به XML تبدیل کنید. با استفاده از کامند زیر قادر به ری دایرکت خروجی های فایل هستید که با کمک مرورگر باز می شود.

dexdump -d -l xml /tmp/classes.dex > /tmp/classes.xml

حجم اطلاعات در دسترس با فرمت XML چندان زیاد نیست، اما با همین اندازه اطلاعات نیز ایده ای از کلاس های جاوا، متدها و فیلدهای موجود در اپلیکیشن پیدا می کنید.

اجزای فایل APK

جمع بندی

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

چنانچه به دنبال ابزارهای ساده تری برای انجام این کارها می گردید، می توانید از ابزارهای شناخته شده مانند dex2jar که کد تجزیه شده قابل خواندن تولید می کند، استفاده نمایید، JADX نیز دیکامپایلر دیگری است که کد جاوا تولید می کند.

 

https://code.tutsplus.com برگرفته از

اینها را هم بخوانید