• برنامه ای برای تغییر فایل های apk. باز کردن، تغییر و بسته بندی برنامه های اندروید

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

    فایل APK چیست؟

    APK - فرمت عامل سیستم های اندروید، برای بایگانی فایل های برنامه های اجرایی استفاده می شود و نام خود فایل می تواند هر چیزی باشد، اما پسوند فقط باید شبیه apk. باشد. آنالوگ های APK در سایر سیستم عامل ها .msi در ویندوز، .sis در سیمبین، .rpm یا .deb در لینوکس هستند.

    ببینیم داخلش چیه
    اساسا apk است آرشیو ZIPپس نگاه کن سازمان داخلیمی توانید از هر فایل منیجر یا بایگانی مانند WinRAR یا اپلیکیشن موبایل Xplore.





    در عین حال، شایان ذکر است که شما فقط به منابع داخلی دسترسی بصری دارید، گزینه های ویرایش بسیار محدود است.
    ساختار را در نظر بگیرید
    در داخل apk. تعدادی فایل و پوشه می بینیم، بیایید دریابیم که آنها برای چیست:
    • AndroidManifest.xml نوعی "گذرنامه" برنامه است که از آن می توانید تمام نکات اصلی، الزامات، نسخه، مجوزها و موارد دیگر را دریابید.
    • META-INF این فایل حاوی فراداده است، یعنی داده‌های مربوط به داده‌ها چک جمع ها، مسیرهای داده، مسیرهای منابع و جمع های کنترلی، گواهی ها. شما می توانید این فایل را با هر ویرایشگر متنی باز کنید، اما Notepad++ توصیه می شود.
    • پوشه res شامل تمام منابع برنامه، منابع گرافیکی مانند آیکون ها، تصاویر، متن، عناصر رابط کاربری گرافیکی است. همچنین می توانید به راحتی به پوشه دسترسی داشته باشید.
    • classes.dex - فوری کد برنامه نویسیاپلیکیشنی که توسط ماشین مجازی Dalvik VM اجرا شده است، تنها با دیکامپایل کردن apk می توانید آنچه را که در داخل این فایل وجود دارد، مشاهده کنید، در مقالات دیگر در این مورد صحبت خواهیم کرد. منابع.arsc -کامپایل شده است فایل XML، این فایل حاوی داده های مربوط به تمام منابع درگیر در برنامه است.
    • lib - پوشه ای با کتابخانه های بومی، که منابع آن فقط هنگام استفاده قابل دسترسی است برنامه های تخصصی. همچنین در APK، ممکن است فایل ها و پوشه هایی مانند com، org، udk وجود داشته باشد، اما نه همیشه.

    حالا بیایید ساختار داخلی را با جزئیات بیشتری بررسی کنیم، برای این کار به یک برنامه دیکامپایلر، جاوا و یک فایل APK نیاز داریم. ابزار اصلی برای جداسازی apk. Apktool است، اما این برنامهفقط از خط کار می کند که خیلی راحت نیست. برای تجزیه سریع‌تر و راحت‌تر، می‌توانید از APKing استفاده کنید، هنوز هم همان Apktool است، اما با قابلیت کار از منوی زمینه.
    و بنابراین APKing را به عنوان هر برنامه ای برای ویندوز نصب می کنیم و با انتخاب .apk با دکمه سمت راست ماوس و همزمان Shift روی آن کلیک می کنیم و پس از آن موارد زیر را مشاهده می کنیم:


    و اقدام لازم را انتخاب می کنیم، مثلاً به طور کامل decompile می کنیم، سپس برنامه عملیات را کامل می کند و یک پوشه با همین نام ایجاد می کند.


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


    خودشه فایل های متنیقابل ویرایش است، ضمن رعایت قوانین اولیه، می توانید از آن استفاده کنید برنامه محبوببرای مثال، Notepad++ AndroidManifest.xml را در نظر بگیرید

    گاهی اوقات برخی از برنامه های اندروید به دلایلی مناسب کاربر نیستند. یک مثال است تبلیغات آزار دهنده. و این طور اتفاق می افتد - همه در برنامه خوب هستند ، اما فقط ترجمه در آن یا کج است یا کاملاً وجود ندارد. یا مثلاً برنامه آزمایشی است و دریافت کنید نسخه کاملهیچ امکانی وجود ندارد چگونه شرایط را تغییر دهیم؟

    معرفی

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

    برای انجام همه اینها خودتان، حداقل نیاز دارید دانش عمومی زبان جاوا، که برنامه های اندروید روی آن نوشته شده است و زبان XML، که در همه جا در اندروید استفاده می شود - از توصیف خود برنامه و حقوق دسترسی آن گرفته تا ذخیره رشته هایی که روی صفحه نمایش داده می شود. همچنین به توانایی کار با نرم افزار کنسول تخصصی نیاز خواهید داشت.

    بنابراین، بسته APK که در آن کاملاً همه نرم افزارهای اندرویدی توزیع شده است چیست؟

    حذف کامپایل برنامه

    در مقاله، ما فقط با کد برنامه جدا شده کار کردیم، اما اگر در آن باشد برنامه های کاربردی بزرگبا ایجاد تغییرات جدی تر، درک کد smali بسیار دشوارتر خواهد بود. خوشبختانه، می‌توانیم کد dex را به کد جاوا تبدیل کنیم، که اگرچه اصلی نیست و قابل کامپایل نیست، اما خواندن و درک منطق برنامه بسیار آسان‌تر است. برای این کار به دو ابزار نیاز داریم:

    • dex2jar - مترجم بایت کد Dalvik به بایت کد JVM که بر اساس آن می توانیم کد جاوا را دریافت کنیم.
    • jd-gui خود یک دیکامپایلر است که به شما امکان می دهد کد جاوا قابل خواندن را از بایت کد JVM دریافت کنید. از طرف دیگر، می توانید از Jad (www.varanecas.com/jad) استفاده کنید. اگرچه بسیار قدیمی است، اما در برخی موارد بیشتر تولید می کند کد قابل خواندناز jd-gui.

    آنها باید اینگونه استفاده شوند. ابتدا dex2jar را راه اندازی می کنیم و مسیر بسته apk را به عنوان آرگومان مشخص می کنیم:

    %dex2jar.sh mail.apk

    در نتیجه، بسته جاوا mail.jar در دایرکتوری فعلی ظاهر می‌شود که می‌توان آن را در jd-gui برای مشاهده کد جاوا باز کرد.

    تنظیم بسته های APK و دریافت آنها

    کیسه پلاستیکی برنامه های اندرویددر واقع یک فایل ZIP معمولی است که برای مشاهده محتویات و باز کردن آن نیازی به ابزار خاصی نیست. کافی است یک آرشیو داشته باشید - 7zip برای ویندوز یا کنسول unzip در لینوکس. اما این در مورد لفاف است. داخلش چیه؟ در داخل، ما به طور کلی ساختار زیر را داریم:

    • META-INF/- حاوی یک گواهی دیجیتالی از برنامه است که سازنده آن را تأیید می کند، و جمع های چک فایل های بسته.
    • res/ - منابع مختلفی که برنامه در کار خود از آنها استفاده می کند، مانند تصاویر، توصیفی از رابط و سایر داده ها.
    • AndroidManifest.xml- شرح برنامه این شامل، برای مثال، لیستی از مجوزهای مورد نیاز، مورد نیاز است نسخه اندرویدو وضوح صفحه نمایش مورد نیاز؛
    • classes.dex- بایت کد برنامه کامپایل شده برای ماشین مجازیدالویک؛
    • منابع.arsc- همچنین منابع، اما از نوع متفاوت - به ویژه، رشته ها (بله، این فایل را می توان برای Russification استفاده کرد!).

    فایل‌ها و دایرکتوری‌های فهرست‌شده، اگر نه در همه، در اکثریت قریب به اتفاق APK‌ها هستند. با این حال، چند فایل/دایرکتوری کمتر رایج وجود دارد که قابل ذکر است:

    • دارایی های- آنالوگ منابع تفاوت اصلی این است که برای دسترسی به یک منبع، باید شناسه آن را بدانید، در حالی که لیست دارایی ها را می توان به صورت پویا با استفاده از متد AssetManager.list() در کد برنامه به دست آورد.
    • lib- کتابخانه های بومی لینوکس که با کمک NDK (Native Development Kit) نوشته شده اند.

    این دایرکتوری توسط سازندگان بازی برای قرار دادن موتور بازی خود با زبان C/C++ و همچنین سازندگان برنامه‌های کاربردی با کارایی بالا استفاده می‌شود (به عنوان مثال، گوگل کروم). دستگاه را فهمید. اما چگونه می توان فایل پکیج اپلیکیشن مورد نظر را دریافت کرد؟ از آنجایی که دریافت فایل‌های APK از دستگاه بدون روت کردن امکان‌پذیر نیست (آنها در فهرست / داده / برنامه هستند)، و روت کردن همیشه توصیه نمی‌شود، حداقل سه راه برای دریافت فایل برنامه به رایانه وجود دارد:

    • پسوند APK Downloader برای کروم.
    • برنامه واقعی APK Leecher.
    • میزبانی فایل های مختلف و warezniki.

    استفاده از کدام یک موضوع سلیقه ای است. ما ترجیح می دهیم استفاده کنیم برنامه های کاربردی فردیبنابراین، ما استفاده از Real APK Leecher را شرح خواهیم داد، به خصوص که در جاوا نوشته شده است و بر این اساس، حتی در ویندوز، حتی در nix نیز کار خواهد کرد.

    پس از شروع برنامه، باید سه قسمت ایمیل، رمز عبور و شناسه دستگاه را پر کنید و یک زبان را انتخاب کنید. دو مورد اول ایمیل و رمز عبور حساب Google شما هستند که در دستگاه استفاده می کنید. سومین شناسه دستگاه است و با شماره گیری کد روی شماره گیر می توانید آن را دریافت کنید # #8255## و سپس خط شناسه دستگاه را پیدا کنید. هنگام پر کردن، فقط باید شناسه را بدون پیشوند android وارد کنید.

    پس از پر کردن و ذخیره کردن، اغلب پیام "خطا هنگام اتصال به سرور" ظاهر می شود. ربطی بهش نداره گوگل پلی، پس با خیال راحت آن را نادیده بگیرید و به دنبال بسته های مورد علاقه خود باشید.

    بررسی و اصلاح

    فرض کنید بسته‌ای را پیدا کرده‌اید که به آن علاقه دارید، آن را دانلود کرده‌اید، آن را باز کرده‌اید... و وقتی سعی کردید برخی از فایل‌های XML را مشاهده کنید، با تعجب متوجه شدید که فایل یک فایل متنی نیست. چگونه آن را دیکامپایل کنیم و به طور کلی چگونه با بسته ها کار کنیم؟ آیا نصب SDK واقعا ضروری است؟ خیر، نیازی به نصب SDK ندارید. در واقع، برای تمام مراحل باز کردن، تغییر و بسته‌بندی بسته‌های APK، ابزارهای زیر مورد نیاز است:

    • بایگانی ZIPبرای باز کردن و بسته بندی؛
    • کوچک- اسمبلر/جداساز بایت کد ماشین مجازی دالویک (code.google.com/p/smali)؛
    • aapt- ابزاری برای بسته بندی منابع (به طور پیش فرض، منابع به شکل باینری برای بهینه سازی عملکرد برنامه ذخیره می شوند). همراه با Android SDK، اما می توان به طور جداگانه به دست آورد.
    • امضا کننده- ابزار برای امضای دیجیتالیبسته اصلاح شده (bit.ly/Rmrv4M).

    می توانید از همه این ابزارها به طور جداگانه استفاده کنید، اما این کار ناخوشایند است، بنابراین بهتر است از نرم افزارهای سطح بالاتر ساخته شده بر اساس آنها استفاده کنید. اگر از Linux یا Mac OS X استفاده می کنید، ابزاری به نام apktool وجود دارد. این به شما امکان می دهد منابع را به شکل اصلی خود باز کنید (از جمله فایل های XML باینری و arsc)، بسته را با منابع اصلاح شده بازسازی کنید، اما نمی داند چگونه بسته ها را امضا کند، بنابراین باید ابزار امضا کننده را به صورت دستی اجرا کنید. با وجود این واقعیت که ابزار به زبان جاوا نوشته شده است، نصب آن نسبتاً غیر استاندارد است. ابتدا باید خود فایل jar را دریافت کنید:

    $ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

    $ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

    $ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ export PATH=~/bin:$PATH

    اگر روی ویندوز کار می کنید، پس یک ابزار عالی برای آن به نام Virtual Ten Studio وجود دارد که تمام این ابزارها (از جمله خود apktool) را نیز جمع آوری می کند، اما به جای یک رابط CLI، یک رابط بصری در اختیار کاربر قرار می دهد. رابط کاربری گرافیکیکه با آن می توانید عملیات باز کردن، جداسازی و کامپایل کردن را با چند کلیک انجام دهید. این ابزار Donation-ware است، یعنی گاهی اوقات ویندوز با یک پیشنهاد برای دریافت مجوز ظاهر می شود، اما در نهایت می توان این را تحمل کرد. توصیف آن بی معنی است، زیرا می توانید در عرض چند دقیقه رابط کاربری را درک کنید. اما apktool با توجه به کنسولی بودنش باید بیشتر مورد بحث قرار گیرد.

    گزینه های apktool را در نظر بگیرید. به طور خلاصه، سه مورد وجود دارد دستورات اساسی: d (decode)، b (build) و if (نصب فریمورک). اگر با دو دستور اول همه چیز مشخص است، پس فرمان سوم یعنی عملگر شرطی چه می کند؟ این فریم ورک مشخص شده UI را باز می کند، که در هنگام تجزیه یک بسته سیستم مورد نیاز است.

    جالب ترین گزینه های دستور اول را در نظر بگیرید:

    • -s- فایل های dex را از هم جدا نکنید.
    • -r- منابع را باز نکنید.
    • - اطلاعات اشکال زدایی را در نتایج جداسازی فایل dex وارد نکنید.
    • -- فریم مسیر- از چارچوب UI مشخص شده به جای apktool داخلی استفاده کنید. اکنون چند گزینه برای دستور b در نظر بگیرید:
    • - مونتاژ اجباری بدون بررسی تغییرات؛
    • - اگر به دلایلی می خواهید از منبع دیگری استفاده کنید، مسیر aapt (ابزار ساخت بایگانی APK) را مشخص کنید.

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

    $ apktool d mail.apk

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

    آماده سازی. غیرفعال کردن تبلیغات

    البته تئوری خوب است، اما اگر نمی دانیم با بسته بسته بندی نشده چه کنیم، چرا به آن نیاز است؟ بیایید سعی کنیم تئوری را به نفع خودمان اعمال کنیم، یعنی برخی از نرم افزارها را اصلاح می کنیم تا به ما تبلیغات نشان ندهد. به عنوان مثال، اجازه دهید مشعل مجازی باشد - یک مشعل مجازی. برای ما، این نرم افزار عالی است، زیرا پر از تبلیغات مزاحم است و به اندازه کافی ساده است که در وحشی کد گم نشوید.


    پس با استفاده از یکی از روش های بالا اپلیکیشن را از بازار دانلود کنید. اگر تصمیم دارید از Virtuous Ten Studio استفاده کنید، کافی است فایل APK را در برنامه باز کنید و آن را از بسته بندی خارج کنید، برای آن یک پروژه (File -> New project) ایجاد کنید، سپس در منوی زمینهپروژه، Import File را انتخاب کنید. اگر انتخاب شما روی apktool افتاد، کافی است یک دستور را اجرا کنید:

    $ apktool d com.kauf.particle.virtualtorch.apk

    پس از آن، یک درخت فایل در دایرکتوری com.kauf.particle.virtualtorch ظاهر می شود، مشابه آنچه در بخش قبل توضیح داده شد، اما به جای فایل های dex و یک فایل apktool.yml، یک فهرست smali اضافی دارد. مورد اول حاوی کد جدا شده فایل dex اجرایی برنامه است، مورد دوم حاوی اطلاعات سرویس مورد نیاز apktool برای جمع آوری بسته است.

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

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

    $ apktool b com.kauf.particle.virtualtorch

    فایل APK به دست آمده در دایرکتوری com.kauf.particle.virtualtorch/build/ ظاهر می شود. با این حال، نمی‌توان آن را نصب کرد زیرا دارای امضای دیجیتال و جمع‌بندی فایل‌ها نیست (به سادگی یک فهرست META-INF/ ندارد). ما باید بسته را با ابزار apk-signer امضا کنیم. راه اندازی شد. رابط از دو تب تشکیل شده است - در اول (Key Generator) کلیدها را ایجاد می کنیم ، در دوم (APK Signer) امضا می کنیم. برای ایجاد کلید خصوصی، فیلدهای زیر را پر کنید:

    • فایل هدف- فایل خروجی ذخیره کلید. معمولاً یک جفت کلید را ذخیره می کند.
    • کلمه عبورو تایید- رمز عبور برای ذخیره سازی؛
    • نام مستعار- نام کلید در مخزن؛
    • رمز عبور مستعارو تایید- رمز عبور کلید مخفی؛
    • اعتبار- مدت اعتبار (به سال). مقدار پیش فرض بهینه است.

    فیلدهای باقی مانده، به طور کلی، اختیاری هستند - اما باید حداقل یکی را پر کنید.


    هشدار

    برای امضای برنامه با apk-signer، باید Android SDK را نصب کرده و مسیر کامل آن را در تنظیمات برنامه مشخص کنید.

    تمام اطلاعات فقط برای مقاصد اطلاعاتی ارائه شده است. نه سردبیران و نه نویسنده مسئولیتی در قبال آسیب احتمالی ناشی از مطالب این مقاله ندارند.

    اکنون می توانید APK را با این کلید امضا کنید. در تب APK Signer، فایل جدید تولید شده را انتخاب کنید، رمز عبور، نام مستعار کلیدی و رمز عبور آن را وارد کنید، سپس فایل APK را پیدا کنید و با جسارت روی دکمه "Sign" کلیک کنید. اگر همه چیز خوب پیش برود، بسته امضا خواهد شد.

    اطلاعات

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

    امضای دیجیتال فقط مورد نیاز است نرم افزار شخص ثالث، بنابراین اگر برنامه های سیستمی را که با کپی کردن در / system / app / فهرست نصب شده اند تغییر می دهید، نیازی به امضای آنها ندارید.

    پس از آن، بسته را روی گوشی هوشمند می اندازیم، نصب و اجرا می کنیم. Voila، آگهی از بین رفته است! اما در عوض، پیامی ظاهر شد که ما اینترنت نداریم یا مجوزهای مناسب را نداریم. در تئوری، این می تواند کافی باشد، اما پیام آزاردهنده به نظر می رسد، و صادقانه بگویم، ما فقط با یک برنامه احمقانه خوش شانس بودیم. یک نرم افزار خوب نوشته شده به احتمال زیاد اعتبار خود را روشن می کند یا اتصال اینترنت را بررسی می کند و در غیر این صورت به سادگی از شروع به کار خودداری می کند. چگونه در این مورد باشیم؟ البته کد را ویرایش کنید.

    به طور معمول، نویسندگان برنامه، کلاس‌های ویژه‌ای را برای نمایش تبلیغات و روش‌های فراخوانی این کلاس‌ها در طول راه‌اندازی برنامه یا یکی از «فعالیت‌های» آن (به عبارت ساده، صفحه‌های برنامه) ایجاد می‌کنند. بیایید سعی کنیم این کلاس ها را پیدا کنیم. ما به دایرکتوری smali می رویم، سپس com (در org فقط کتابخانه گرافیکی باز cocos2d وجود دارد)، سپس kauf (دقیقا آنجا، زیرا این نام توسعه دهنده است و تمام کدهای او آنجا هستند) - و اینجاست، دایرکتوری بازاریابی در داخل ما تعداد زیادی فایل با پسوند smali پیدا می کنیم. اینها کلاس هایی هستند و قابل توجه ترین آنها کلاس Ad.smali است که با نام آن به راحتی می توان حدس زد که تبلیغات را نمایش می دهد.

    ما می‌توانیم منطق کار آن را تغییر دهیم، اما حذف احمقانه تماس‌های هر یک از روش‌های آن از خود برنامه بسیار ساده‌تر است. بنابراین، از دایرکتوری بازاریابی خارج می شویم و به دایرکتوری ذرات همسایه و سپس به virtualtorch می رویم. فایل MainActivity.smali در اینجا شایسته توجه ویژه است. این یک کلاس استاندارد اندروید است که توسط Android SDK تولید شده و به عنوان نقطه ورود به برنامه (مشابه عملکرد اصلی در C) تنظیم شده است. فایل را برای ویرایش باز کنید.

    داخل کد اسمالی (اسمبلر محلی) است. به دلیل ماهیت سطح پایین آن، خواندن آن نسبتاً گیج کننده و دشوار است، بنابراین ما آن را مطالعه نمی کنیم، بلکه به سادگی تمام موارد ذکر شده از کلاس Ad را در کد پیدا می کنیم و آنها را نظر می دهیم. ما در رشته "Ad" در جستجو رانندگی می کنیم و به خط 25 می رسیم:

    آگهی خصوصی فیلد:Lcom/kauf/marketing/Ad;

    در اینجا، یک آگهی فیلد برای ذخیره یک شی از کلاس Ad ایجاد می شود. با قرار دادن علامت ## در جلوی خط نظر می دهیم. ما به جستجو ادامه می دهیم. خط 423:

    نسخه جدید نسخه 3، Lcom/kauf/marketing/Ad.

    اینجا جایی است که شی ایجاد می شود. نظر می دهیم. جستجو را ادامه می دهیم و در خطوط 433، 435، 466، 468، 738، 740، 800 و 802 فراخوانی متدهای کلاس Ad را پیدا می کنیم. نظر می دهیم. بنظر همینه پس انداز می کنیم. اکنون بسته باید دوباره مونتاژ شود و عملکرد آن و وجود تبلیغات بررسی شود. برای خلوص آزمایش، خط حذف شده از AndroidManifest.xml را برمی گردانیم، بسته را جمع آوری می کنیم، آن را امضا می کنیم و آن را نصب می کنیم.

    خوکچه هندی ما تبلیغات قابل مشاهده

    اوپ-پا! تبلیغات تنها زمانی که برنامه در حال اجرا بود ناپدید شد، اما در منوی اصلی باقی ماند، که هنگام راه اندازی نرم افزار مشاهده می کنیم. بنابراین، صبر کنید، اما نقطه ورودی کلاس MainActivity است، و تبلیغات در حین اجرای برنامه ناپدید شدند، اما در منوی اصلی باقی ماندند، بنابراین نقطه ورودی متفاوت است؟ برای آشکار کردن نقطه ورودی واقعی، فایل AndroidManifest.xml را دوباره باز می کنیم. و بله، شامل خطوط زیر است:

    آنها به ما (و مهمتر از آن اندروید) می گویند که فعالیتی به نام Start باید در پاسخ به تولید intent (رویداد) android.intent.action.MAIN از دسته android.intent.category.LAUNCHER راه اندازی شود. این رویداد زمانی ایجاد می‌شود که روی نماد برنامه در راه‌انداز ضربه بزنید، بنابراین نقطه ورودی، یعنی کلاس Start را مشخص می‌کند. به احتمال زیاد، برنامه نویس ابتدا یک برنامه بدون منوی اصلی نوشت که نقطه ورود به آن کلاس استاندارد MainActivity بود و سپس یک پنجره (اکتیویتی) جدید حاوی یک منو و در کلاس Start توضیح داده شد و به صورت دستی آن را به عنوان ورودی تبدیل کرد. نقطه.

    فایل Start.smali را باز می کنیم و دوباره به دنبال خط "Ad" می گردیم، در خطوط 153 و 155 به کلاس FirstAd اشاره می کنیم. همچنین در کد منبع وجود دارد و با قضاوت از روی نام، وظیفه نمایش تبلیغات در صفحه اصلی را بر عهده دارد. ما بیشتر نگاه می کنیم، یک نمونه از کلاس FirstAd و یک intent، با توجه به زمینه مربوط به این نمونه، وجود دارد، و سپس برچسب cond_10، که انتقال شرطی به آن دقیقاً قبل از ایجاد یک نمونه از کلاس انجام می شود. :

    If-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :cond_10

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

    #if-ne p1, v0, :cond_10 goto:cond_10

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

    نتایج

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

    برنامه های پلتفرم اندروید تنها فایلی هستند که با پسوند apkکه بسیار راحت است در واقع، نصب هر برنامه ای بر روی گوشی هوشمند یا تبلت به نتیجه می رسد کپی آسانبه ابزار شما فایل apk چیست و چگونه می توانید آنچه در داخل آن است را ببینید؟

    فایل APK چیست؟

    مخفف APK به عنوان گسترش یافته است بسته اندرویدکیت یک بسته اجرایی از فایل ها برای برنامه های اندروید است. این آرشیو حاوی کدهای کامپایل شده و آماده اجرا و منابع دیگر است. فایل‌های apk در سایت‌های اینترنتی مانند Google Play ذخیره می‌شوند و از آنجا می‌توان آن‌ها را دانلود و بر روی ابزار شما نصب کرد. آنها رمزگذاری نشده اند.

    ساختار آن توسط توسعه دهنده برای اجرا در محیط ماشین مجازی Dalvik یا ART آماده شده است. این دستگاه‌ها در سیستم‌عامل اندروید تعبیه شده‌اند و تمام برنامه‌های موجود در دستگاه شما را اجرا می‌کنند.

    خود فایل apk یک آرشیو معمولی است که می توانید با هر بایگانی در آن باز کنید محیط ویندوز. به عنوان مثال، WinRAR، یا یک مدیر فایل که بایگانی های ZIP را باز می کند. بیایید ببینیم داخل آن چه چیزی است.

    • یک فایل اجرایی با پسوند dex (نام می تواند هر چیزی باشد) که فقط کد برنامه است.
    • در کنار آن source.arsc است، این یک رجیستری از منابعی است که برنامه باید از آن استفاده کند. این یک ساختار XML است.
    • AndroidManifest.xml یک فایل اجباری برای هر برنامه است، مانیفست که حاوی اطلاعات اصلی در مورد آن است. در اینجا به عنوان مثال می توان نسخه برنامه، نسخه مورد نیاز اندروید، اطلاعات مربوط به توسعه دهنده، وضوح صفحه نمایش مورد نیاز و ... را ضبط کرد.
    • دایرکتوری res حاوی منابع داخلی است که برنامه برای اجرا نیاز دارد. همه تصاویر، نمادها، نمادها، نقشه ها و غیره می توانند اینجا باشند.
    • دایرکتوری lib کتابخانه های بومی برای کار برنامه است، برای مثال کد C++. اگر از کتابخانه ها استفاده نشود، ممکن است این دایرکتوری وجود نداشته باشد.
    • فهرست دارایی ها منابع اضافی برای برنامه است، همچنین ممکن است گاهی اوقات از دست رفته باشد. اینکه چه منابعی باید استفاده شوند در فایل source.arsc توضیح داده شده است.
    • فهرست META-INF - فراداده برنامه. به عنوان مثال، فایل MANIFEST.MF، که ممکن است شامل مسیرهای داده و جمع های کنترلی آنها باشد. فایل های گواهی RSA، اطلاعات Manifest-Version و اطلاعات خدمات مشابه را می توان در اینجا ذخیره کرد.

    مروری بر ویرایشگرهای محبوب فایل APK

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

    هیچ مشکلی با تصاویر وجود نخواهد داشت، آنها را می توان در هر برنامه مناسب باز کرد. فرمت XMLبا هر ویرایشگر متنی مانند Notepad++ باز می شود. اگر می دانید این قالب چگونه کار می کند، می توانید آنها را قبلا ویرایش کنید. اما برای فایل های اجرایی کامپایل شده، باید از ابزارهای خاصی استفاده کنید.

    Eclipse Editor. این یک محیط چند پلتفرمی کامل برای یک برنامه نویس است. شما می توانید در هر توسعه زبان های مدرنو پختن فایل های اجراییاز جمله برای اندروید. محیط را می توان با استفاده از افزونه های متعدد به صورت انعطاف پذیر پیکربندی کرد.

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

    دانلود کننده APK. این یک افزونه برای مرورگر کروم، که دانلود برنامه های apk را از هر سایتی و مشاهده ساختار آنها بسیار آسان می کند. برای این کار حتی می توانید در گوگل پلی ثبت نام نکنید.

    ویرایشگر APK. ویرایشگری که به شما امکان می دهد با منابع داخل بسته های apk کار کنید. به اندازه Eclipse قدرتمند نیست، اما کارهای ساده زیادی انجام می دهد. به عنوان مثال، می‌توانید بلوک‌های تبلیغاتی را از برنامه حذف کنید، رابط را روسی کنید، آیکون‌ها یا بافت‌ها را با خود جایگزین کنید، و موارد دیگر.

    ویرایش برنامه های سیستم اندروید اغلب زمانی انجام می شود که کاربر یک تلفن هوشمند، تبلت یا دستگاه دیگری توسط این کنترل شود سیستم عامل، دیگر ارضای جریان را متوقف می کند ظاهربرنامه های نصب شده در دستگاه توسط سازنده یا فروشنده. دلیل دیگر ممکن است نیاز به ایجاد تغییرات نه تنها در مورد طراحی گرافیکیبرنامه های اندروید، بلکه بر مکان عناصر مختلف و عملکرد عملکردهای اساسی تأثیر می گذارد.

    برای ایجاد تغییرات در کد، تقریباً در هر زبانی (ترجیحاً جاوا و C ++) به مهارت های اولیه برنامه نویسی نیاز است. برای جایگزینی گرافیک، دست های مستقیم و قابلیت کار در ویرایشگر گرافیک انجام می شود.

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

    تغییر گرافیک در برنامه های کاربردی سیستماندروید

    برای جایگزینی یا اصلاح گرافیک اصلی (تغییر رنگ دکمه ها، ترسیم مجدد تصاویر و غیره) کافی است یک استاندارد داشته باشید. بایگانی کننده WinRAR. در عین حال، کاربر باید حقوق «ریشه» روی دستگاه داشته باشد (مشابه با حساب administrator در ویندوز)، و داشتن آن نیز مطلوب است بازیابی جایگزین(CWM) و روت اکسپلورر (برای دسترسی سیستم فایلاندروید به طور مستقیم در خود دستگاه).

    اول از همه، باید «USB debugging» را در دستگاه فعال کنید، سپس با استفاده از کابل USB آن را به رایانه متصل کرده و نصب کنید. درایورهای مورد نیاز. آنها معمولا در واقع در دیسک مجازیکه هنگام اتصال به کامپیوتر ظاهر می شود.

    سپس باید افزونه ADB را نیز از اینترنت دانلود کنید مدیر فایل. این افزونهبه شما امکان می دهد کل سیستم اندروید را به عنوان یک درایو متصل با پوشه ها مشاهده کنید. همه برنامه های سیستم در /system/app و /system/framework قرار دارند. پس از یافتن برنامه مورد نظر، به سادگی آن را در رایانه خود کپی کنید. اگر افزونه نصب نشده باشد، می‌توانید از root explorer برای کپی کردن برنامه با پسوند apk در یک کارت SD قابل جابجایی و سپس از آن به رایانه خود استفاده کنید.

    بعد از کپی برنامه مورد نظرمی توانید ویرایش گرافیک را شروع کنید. به هر حال، تمام تصاویر در برنامه های اندروید در آن ذخیره می شوند فرمت pngکه توسط هر ویرایشگر گرافیکی به راحتی باز می شود. با باز کردن فایل برنامه با با استفاده از WinRAR، می توانید تعدادی پوشه را مشاهده کنید. ما فقط به پوشه res علاقه مند خواهیم بود، که در داخل آن، به نوبه خود، تعداد زیادی از پوشه های مختلف. از این میان فقط به آنهایی نیاز است که در نامشان کلمه "قابل ترسیم" وجود دارد.

    حال بیایید نوع دستگاه خود و وضوح صفحه نمایش آن را به یاد بیاوریم. اگر این گوشی هوشمند است و رزولوشن آن 240x320 است، ما عمدتاً به پوشه های قابل ترسیم و قابل کشیدن-ldpi علاقه مند خواهیم بود. اگر وضوح 320x480 باشد - به ترتیب پوشه های drawable و drawable-mdpi و برای وضوح 480x800 - پوشه های drawable و drawable-hdpi. علاوه بر آنها، معمولاً پوشه هایی نیز وجود دارد که در نام آنها کلمه "land" وجود دارد - اینها گرافیکی برای حالت پرتره، یعنی هنگامی که دستگاه کج می شود.

    اگر تبلتی در دست دارید، ما فقط به پوشه‌های قابل ترسیم و قابل ترسیم-mdpi در هر وضوح صفحه علاقه مند خواهیم بود.

    با کپی کردن پوشه های انتخاب شده در رایانه خود می توانید تصاویر اصلی را با رنگ دلخواه و دلپذیر جایگزین یا تغییر رنگ دهید. شما باید به تصاویر با وضوح 9.png توجه ویژه ای داشته باشید. واقعیت این است که در امتداد محیط چنین تصویری یک قاب ویژه به عرض یک پیکسل با علائم خاص وجود دارد که نقض یکپارچگی آن منجر به شکست برنامه می شود. بنابراین هنگام ویرایش چنین فایل هایی باید دقت بیشتری به خرج داد.

    پس از ویرایش پوشه، باید آن را دوباره به آرشیو آپلود کنید، که خود برنامه با پسوند apk است. در این صورت لازم است گزینه “بدون فشرده سازی” را در WinRAR انتخاب کنید.

    برنامه اصلاح شده یا با استفاده از root explorer به دستگاه بارگیری می شود (ابتدا فایل به کارت SD و از آن به دستگاه کپی می شود) یا پس از خروج از بازیابی - بلافاصله از رایانه به / سیستم / برنامه یا پوشه / system / Framework . در مرحله بعد، باید مجوزهای فایل را با استفاده از گزینه های مناسب در root explorer یا افزونه ADB تنظیم کنید. باید با فرمت 644 باشند پس از راه اندازی مجدد دستگاه می توانید نتیجه کار را مشاهده کنید برنامه به روز شده.

    ویرایش کد منبع برنامه های کاربردی سیستم

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

    1) بسته نرم افزاری لازم را بر روی کامپیوتر در آنها نصب کنید آخرین نسخه ها: Java SE Runtime Environment و Android SDK Windows (برنامه های کار با برنامه ها و اجزای آنها)، APKtool یا APKManager یا Firmware_tool (یکی از سه برنامه برای جداسازی و دکامپایل کردن برنامه های سیستم)، ویرایشگر NotePad ++ (برای ایجاد تغییرات در منبعبرنامه های سیستم اندروید).

    2) اشکال زدایی USB را در دستگاه فعال کنید، آن را با استفاده از کابل USB به رایانه متصل کنید، درایورهای لازم را برای کار با دستگاه نصب کنید.

    3) با استفاده از یکی از برنامه های فوق برای کار با کد برنامه، باید پوشه / سیستم / فریمورک را (به طور کامل) از گوشی به پوشه مناسب برنامه و برنامه های سیستمی را از پوشه / system / app استخراج کنید. برای مثال، برای برنامه Firmware_tool، فایل‌های گوشی باید در پوشه C: Firmwaretoolfw_project1_source2_system.img_unpacked در زیرپوشه‌های مناسب (برنامه‌های کاربردی در پوشه برنامه، فایل‌ها از چارچوب به پوشه فریمورک) کپی شوند. هنگام استفاده از این برنامه و سایر برنامه ها، حتماً دستورالعمل های مربوط به آنها را مطالعه کنید.

    4) "چارچوب مرجع" را نصب کنید، یعنی. مجموعه‌ای از قوانین که بر اساس آن حذف (یعنی جداسازی کد) و کامپایل (یعنی مونتاژ کد) برنامه‌ها انجام می‌شود.

    این کار آماده سازی برای کار با برنامه های سیستمی را تکمیل می کند.

    بارگیری برنامه ها از دستگاه و بارگیری مجدد آنها مشابه روشی است که در بخش "تغییر گرافیک در برنامه های سیستم اندروید" توضیح داده شده است.

    ویرایش کد برنامه های اندروید معمولا با استفاده از آن انجام می شود ویرایشگر NotePad++ - یکی از راحت ترین ویرایشگرهای متن، که دارای گزینه برجسته سازی نحو برای زبان برنامه نویسی انتخاب شده هستند. به عنوان یک قاعده، هنگام ویرایش، می توانید گرافیک را در طول مسیر با استفاده از انتخاب شده تغییر دهید ویرایشگر گرافیکی.

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