استخراج URL های یک اپلیکیشن اندروید مثل آب خوردن

استخراج URL های یک اپلیکیشن اندروید مثل آب خوردن

به احتمال زیاد تاکنون شما هم با برنامه های اندرویدی مانند اینستاگرام برخورد داشته‌اید که علاوه بر اپلیکیشن اندروید در بستر وب هم قابل استفاده هستند و اگر کمی با فضای برنامه نویسی آشنا باشید ممکن است این سؤال به ذهن شما هم خطور کرده باشد که آیا می‌توان آدرس‌های URL مورد استفاده در آن برنامه اندروید را استخراج و بررسی کرد یا نه؟! اگر این سؤال به ذهن شما خطور کرده اما راه استخراج این آدرس‌ها از اپلیکیشن های اندرویدی را نمی‌دانستید، با این مقاله همراه ما باشید.

اپلیکیشن های اندرویدی که سروکار با اینترنت دارند اکثراً برای نگه داری اطلاعات کاربران و احراز هویت و ... از قابلیت‌های وب مانند REST API ها استفاده می‌کنند. استفاده از پروتکل‌های وب در اپلیکیشن های اندرویدی نیازمند قرار دادن آدرس API در داخل کد منبع (Source Code) اپلیکیشن است.) نکته حائز اهمیت این موضوع، قرار ندادن آدرس ها، توکن ها و پسوردهای مهم توسط برنامه نویسان در داخل کد منبع است. (اگر شما هم مانند من فکر می کنید که شاید آدرس های جالبی از API اپلیکیشن ها بتوان یافت در این آموزش با ما همراه شوید تا ابزاری کارآمد و آسان را باهم تست کنیم.
ابزار apkurlgrep یک ابزار نوشته شده با زبان GO است که با استفاده از ابزار معروف apktool اپلیکیشن های اندرویدی را مهندسی معکوس کرده و در فایل ‌های اپلیکیشن به دنبال آدرس های URL و مسیر فایل‌ ها می‌گردد. نصب و راه اندازی این اپلیکیشن چندین مرحله ساده دارد که در ادامه با هم نصب آن را روی سیستم عامل اوبونتو انجام می‌دهیم.


مرحله 1 - در ابتدا نیاز داریم که ابزار apktool را با استفاده از مراحل بیان شده در آدرس زیر برای سیستم عامل خودمان نصب کنیم. 

https://ibotpeaches.github.io/Apktool/install


توجه داشته باشید که با توجه به اینکه ابزار apktool با زبان جاوا نوشته شده است نیاز دارید که JRE را روی سیستم عامل خود نصب کرده باشید.(برای آموزش نصب JRE در سیستم عامل اوبونتو می‌توانید از این لینک و برای ویندوز روی این لینک استفاده کنید.)
با توجه به اینکه سیستم عامل ما اوبونتو است مراحل نصب ما به ترتیب عبارتند از:


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

https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool

2. آخرین نسخه موجود فایل apktool-2 را در آدرس زیر دانلود می‌کنیم.

https://bitbucket.org/iBotPeaches/apktool/downloads/

3. نام فایل با پسوند.jar را به apktool.jar عوض می‌کنیم.
4. هر دو فایل دانلود شده را به دایرکتوری /usr/local/bin انتقال می‌دهیم.
5. به هر دو فایل با استفاده از دستور زیر دسترسی اجرایی می‌دهیم.

sudo chmod +x apktool apktool.jar

حال با استفاده از تایپ کردن apktool در خط فرمان اوبونتو چک می‌کنیم که فرآیند نصب درست انجام شده است یا نه. در صورتی که فرایند نصب را به درستی طی کرده باشید با اجرای دستور apktool در ترمینال اوبونتو باید با پیغامی مانند تصویر زیر مواجه شوید.

مرحله 2 – در این مرحله باید پیش ‌نیاز استفاده از ابزار apkurlgrep یعنی پکیج زبان GO را روی سیستم عامل خودمان نصب کنیم. برای نصب پکیج این زبان باید به آدرس زیر رفته و آخرین نسخه آن را دریافت می کنیم.

https://golang.org/dl/

در این مقاله ما از سیستم عامل اوبونتو که یک توزیع لینوکسی معروف است استفاده کرده ایم، بنابراین مطابق شکل زیر از لینک دانلود مربوط به Linux که با خط قرمز مشخص شده، استفاده می کنیم.

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

sudo tar -xvf go1.14.3.linux-amd64.tar.gz

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

sudo mv go /usr/local

سپس با استفاده از دو دستور زیر به ترتیب متغیر محیطی PATH را به گونه ‌ای تنظیم می کنیم که مسیر فایل اجرایی go را به آن اضافه کنیم و سپس با فراخوانی مجدد محتوای فایل تنظیمات پروفایل خودمان، این تغییرات را اعمال می‌کنیم.

echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile

source ~/.profile

حال با اجرای دستور go version در ترمینال اوبونتو خود باید خروجی مانند زیر را مشاهده کنیم.

مرحله 3 – در این مرحله که مرحله پایانی نصب این ابزار محسوب می‌شود ما خود ابزار را نصب خواهیم کرد. ابتدا نرم افزار را از لینک زیر دانلود می کنیم.

https://github.com/ndelphit/apkurlgrep

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

همان طور که در تصویر با رنگ قرمز مشخص شده است فایل اصلی اجرایی که با آن کار داریم apkurlgrep.go است. برای راه اندازی، ابتدا دستور زیر را وارد می کنیم.

go get -u github.com/ndelphit/apkurlgrep

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

go run apkurlgrep.go

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

بنابراین برای تست فایل نمونه a.apk و استخراج URL های آن باید از دستور زیر استفاده شود:

go run apkurlgrep.go -a a.apk

توجه داشته باشید که بسته به اپلیکیشن باید مدتی صبور باشید تا کار ابزار تمام شود و خروجی نمایش داده شود.

بررسی چندین اپلیکیشن معروف

برای تست و بررسی این ابزار و به عنوان نمونه به سراغ چند نمونه از اپلیکیشن های معروف می رویم. اپلیکیشن اول Google Chrome یکی از معروف ترین مرورگرهای دنیا است. خروجی بررسی این اپلیکیشن تعداد زیادی از URL ها بود که بخشی از آن‌ها را می توانید در تصویر زیر مشاهده کنید.

اغلب دامنه هایی که در URL های بالا مشاهده می شوند آشنا و مربوط به محصولات شرکت گوگل هستند. در بررسی های ما چندین دامنه ناآشنا هم بود که در تصویر زیر بخشی از آن‌ها با رنگ قرمز مشخص شده است.

در میان URL های بالا اگر به موارد مشخص شده با رنگ قرمز توجه کنید اغلب این URL ها در واقع سایت ‌هایی برای یافتن کد پستی در شهرها و کشورهای مختلف هستند. به نظر شما کروم چه نیازی به استفاده از سرویس Postcode Finder موجود در سایت زیر دارد؟ منتظر نظرات شما هستیم. 😊

http://www.caymanpost.gov.ky/ 

در میان URL های استخراج شده، کمی اطلاعات به هم ریخته هم بود که به نظر می رسد یا به صورت عمدی به هم ریخته شده اند یا مشکل در encoding آن ها وجود دارد که در تصویر زیر نمونه ای از این موارد را مشاهده می کنید. 

همان گونه که در نمونه بالا مشاهده می کنید در میان کاراکترهای عجیب و غریب و به هم ریخته، تعدادی URL سالم هم موجود است که از جمله آن ها می توان به موارد زیر اشاره کرد:

ocsp.globalsign.com

secure.gglobalsign1serverca.crl

crl.globalsign.net

gicert.com

verisign.com

rapidssl.co

godaddy.com

certificates.godaddy.com

اگر شما هم مانند من کمی در دنیای وب و ... فعال بوده باشید با SSL آشنا هستید و احتمالاً برخی از اسامی موجود در موارد بالا برای شما آشنا باشد! بله حدس شما درست است، اغلب این موارد سایت ‌های مربوط به شرکت های صادرکننده و تأیید کننده گواهی نامه SSL در دنیا هستند. البته Godaddy در موارد بالا همه کاری انجام می دهد و یک هاستینگ بزرگ در دنیا محسوب می‌شود.

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

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

اگر خوب دقت کنید مشاهده می‌کنید که کاراکترهای زبان های ابری/هندی، روسی، انگلیسی و عربی/فارسی در تصویر بالا موجود است! نکته خاصی در تصویر بالا پیدا نکردیم که ذکر کنیم. اگر مورد خاصی پیدا کردید و توانستید بفهمید چی هستند در بخش نظرات به ما هم اطلاع بدهید. 😊

اپلیکیشن بعدی که تست شد اپلیکیشن اسنپ است که یکی از معروف ترین اپلیکیشن های مورد استفاده ایرانی‌ ها است. تعدادی از URL هایی که این اپلیکیشن داخل خودش داشت را در تصویر زیر مشاهده می کنید.

همان طور که در تصویر مشاهده می کنید تعدادی URL جالب از این اپلیکیشن کشف شد که مواردی که در داخل خود از عبارت snapp استفاده کرده اند آدرس API های اسنپ هستند که به نظر می رسید API اصلی این اپلیکیشن روی آدرس api.snapp.site قرار دارد. در انتهای تصویر، آخرین مورد مشخص شده با رنگ قرمز، استفاده این اپلیکیشن از mapbox سرویس نقشه آمریکایی معروف است که به صورت مشترک توسط اپلیکیشن های معروفی مانند Foursquare و Facebook و Snapchat مورد استفاده قرار گرفته است. در تصویر زیر تعدادی دیگر از این URL ها را مشاهده می کنید.

همان طور که در تصویر بالا مشاهده می کنید باز هم مقداری به هم ریختگی در انتهای تصویر داریم که در میان آن‌ها دو URL وجود دارد که در یکی از آن‌ها کلمه letsencrypt خودنمایی کرده و ما را به یاد گواهی نامه‌ های رایگان letsencrypt می اندازد. Identrust.com هم یکی از سایت ‌هایی است که گواهی نامه های امضای دیجیتال داکیومنت صادر می‌کند و در بسیاری از اپلیکیشن ها استفاده می شود.
همان گونه که در تصویر زیر می توانید مشاهده کنید تعدادی از آدرس ‌های فایل این اپلیکیشن هم به شرح زیر است:

همانطور که در بخش شماره 1 در تصویر بالا مشاهده می کنید اسنپ از فایل های فونت مخصوص خودش در این اپلیکیشن استفاده می کند. البته این فونت‌ها ممکن است فونت‌های معروفی باشند که تغییر نام داده شده‌اند و عبارت snapp را در نام خودشان دارند. در بخش 2 تصویر مشاهده می کنید که تعدادی آدرس فایل هستند که به نظر نمی‌رسد آدرس فایل باشند! بله حدس شما درست است به احتمال خیلی زیاد این آدرس ها بخشی از endpoint های API مورد استفاده توسط Snapp باشند که چون Base URL نداشته‌اند این اپلیکیشن آن ها را به عنوان مسیر فایل دسته بندی کرده است. البته این نکته نمی تواند نکته منفی برای این اپلیکیشن باشد چون بنا به روش مورد استفاده این اپلیکیشن، این موضوع طبیعی است. در ادامه تعدادی دیگر از این آدرس ها را در تصویر زیر می توانید مشاهده کنید.

همانطور که در بخش 1 و 2 در تصویر مشاهده می کنید این اپلیکیشن از یک کتابخانه مربوط به یک پروتکل MQTT استفاده کرده است که یک پروتکل معروف در زمینه اینترنت اشیا است. با کمی جستجو در اینترنت به آدرس زیر در گیتهاب می رسیم که کد منبع این کتابخانه را در اختیار ما قرار می دهد.

https://github.com/eclipse/paho.mqtt.java

در بخش 3 و 4 نیز با توجه به ظاهر آدرس به نظر می رسد که اپلیکیشن نیاز به دسترسی به یک سوکت TCP روی پورت های 1882 و 22 داشته است که با کمی جستجو در اینترنت باز متوجه می شویم که کتابخانه یافت شده برای MQTT، امکان دسترسی به این پروتکل را از طریق آدرس هایی از نوع های مختلف TCP، وب سوکت و TLS را ممکن می کند.
در بخش 5 نیز مشاهده می کنید که از کتابخانه retrofit2 که یک کتابخانه HTTP برای استفاده در اپلیکیشن های نوشته شده با زبان جاوا است استفاده شده و عبارت Kotlin موجود بعد از / بیانگر نوشتن کل یا بخشی از برنامه با Kotlin است.


اپلیکیشن بعدی مورد بررسی ما Instagram است که تعداد خیلی زیادی URL از آن استخراج شد که از حوصله بررسی کامل در این مقاله خارج بود. تعدادی از جذاب ترین URL ها در تصویر با رنگ قرمز مشخص شده است.

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

همانطور که در تصویر بالا مشاهده می کنید این اپلیکیشن احتمالاً مبهم سازی (Obfuscation) شده و در هم ریختگی خوبی در آن انجام شده است که باعث خروجی دادن مورد بالا می‌شود. این اپلیکیشن نمونه ای جالب از مقاومت در برابر استخراج آسان URL ها با ابزار apkurlgrep است. به نظر شما با چه ابزاری و چگونه این مقاومت اتفاق افتاده؟ اگر جواب را پیدا کردید در بخش نظرات به ما هم اطلاع بدید! 😉

نکته

با بررسی بیشتر اپلیکیشن الوپیک برای پیدا کردن راز خروجی مبهم سازی شده در تصویر قبلی، متوجه شدیم که ایراد کار در دانلود اپلیکیشن معیوب و دست کاری شده از سایت apkpure بوده است. بنابراین ایرادی به کارکرد apkurlgrep وارد نیست و کماکان می توانید برای کنجکاوی های بعدی آن را استفاده کنید.😊 در صورتی که مثال نقض برای کارکرد این اپلیکیشن پیدا کردید می توانید این مورد را با مستندات لازم برای ما ارسال کنید تا پس از بررسی به این پست اضافه شود! 😉

در ادامه ما اپلیکیشن الوپیک را از سایت معتبر evozi دریافت کردیم و آن را با ابزار apkurlgrep دوباره بررسی کردیم که نتیجه مانند تصویر زیر بدون ایراد بود.😊 

همانطور که در تصویر بالا مشخص است در بخش 1 آدرس api مربوط به الوپیک با موفقیت یافت شده است. در بخش 2 تصویر، سرویس نقشه معروف mapbox را مشاهده می کنید که در بررسی های قبلی مشاهده کردیم که  اسنپ نیز از این سرویس استفاده کرده بود. در بخش 3 تصویر نیز سرویس ایرانی کی کجاس را مشاهده می کنید که یک سرویس بانک اطلاعات شهری است و توسط این اپلیکیشن مورد استفاده قرار گرفته است. با بررسی بیشتر این اپلیکیشن شاید بتوان نکات بیشتری هم پیدا کرد!😊 در صورتی که کنجکاوی شما روی این اپلیکیشن ادامه پیدا کرد می توانید نکات بعدی را استخراج کرده و در بخش نظرات با ما در میان بگذارید!😉

جمع بندی

در این بخش به قسمت خداحافظی برنامه نزدیک می شویم. نتیجه گیری مهم اینکه نرم افزار apkurlgrep طبق بررسی که باهم انجام دادیم به نظر ابزاری مفید و آسان می آید و در بررسی هایی که داشتیم به جز یک مورد در بقیه اپلیکیشن ها عملکرد خوبی را به نمایش گذاشت. می توان گفت این ابزار به دلیل استفاده از ابزار قدرتمند apktool به توانایی خوبی در استخراج آدرس های URL موجود در اپلیکیشن ها رسیده است اما همان طور که اشاره شد چندین ایراد ریز نیز دارد. البته ممکن است نظر شما متفاوت باشد یا تجربه ای ارزشمند در مورد کارایی این ابزار داشته باشید، در این صورت ما را با نظرات ارزشمند خودتان، خوشحال کنید! 😉

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس


online-support-icon