Trojan.Android.SmsSpy.Z

شرح کلی

نوع: تروجان (Trojan)
درجه تخریب: متوسط
میزان شیوع: متوسط

اسامی بدافزار

  • Padvish: Trojan.Android.SmsSpy.Z
  • Sophos: Andr/Xgen-CAE
  • DrWeb: Android.Spy.7688
  • Avast: Android:Evo-gen [Trj]
  • Kaspersky: HEUR:Trojan-Spy.AndroidOS.Realrat.z

تروجان چیست؟

تروجان‌ها نوعی از بدافزارها محسوب می‌شوند که خود را در قالب نرم‌افزاری سالم و قانونی نشان می‌دهند و بسیار شبیه به نرم‌افزارهای مفید و کاربردی رفتار می‌کنند. اما هنگامی ‌که اجرا می‌شوند، خرابی‌های زیادی را برای دستگاه ایجاد می‌کنند. از جمله راه‌های ورود تروجان‌ها به سیستم: نرم‌افزارهای دانلود شده از اینترنت، جاساز شدن در متن HTML، ضمیمه شدن به یک ایمیل و … هستند. تروجان‌ها برخلاف ویروس‌ها و کرم‌ها قادر به تکثیر خود نیستند.

خانواده بدافزاری SmsSpy چیست؟

این خانواده بدافزاری شامل اپلیکیشن‌های مخربی است که در ظاهر برنامه‌های کاربردی و مفید اما با هدف اصلی سرقت اطلاعات بانکی و حساب‌های کاربری، از طریق پیامک‌های حاوی لینک آلوده، وب‌سایت‌ها و شبکه‌های اجتماعی (به‌ویژه پیام‌رسان‌های داخلی مانند بله، ایتا و روبیکا) توزیع می‌شوند. نسخه‌های جدید این بدافزارها برای دور زدن مکانیزم تشخیص آنتی‌ویروس‌ها و پیچیده‌تر کردن تحلیل استاتیک، به‌طور گسترده از تکنیک‌های پیشرفته پنهان‌سازی و پکرهای سفارشی (Custom Packers) استفاده می‌کنند.

روند عملیاتی آن‌ها بدین صورت است که ابتدا با ترفندهای مهندسی اجتماعی، کاربر را به ورود اطلاعات کارت بانکی یا کدهای تأیید (OTP) پیام‌رسان‌ها ترغیب کرده، سپس با دریافت دسترسی به پیامک‌ها و بارگذاری صفحات فیشینگ (از طریق WebView درون‌برنامه‌ای یا درگاه‌های جعلی)، رمز پویای قربانی را دریافت کرده و اقدام به تخلیه حساب بانکی قربانی می‌نمایند. در نهایت نیز با سوءاستفاده از دسترسی به مخاطبان و حساب‌های سرقت‌شده، لینک آلوده را به‌صورت زنجیره‌ای برای سایر افراد ارسال می‌کنند.‬‬

توضیحات فنی

 علائم آلودگی

❌ درخواست دسترسی‌های بسیار حساس در زمان نصب (مانند خواندن و ارسال پیامک، لیست مخاطبین و تماس‌ها).

❌ افزایش مصرف غیرعادی باتری و اینترنت به دلیل ارتباط مداوم با سرور مهاجم در پس‌زمینه.

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

شرح عملکرد

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

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

افزون بر این، نمونه حاضر با سوءاستفاده از وب‌سرویس بات‌های پیام‌رسان بله، ارتباطی امن و بدون فیلتر با سرور مهاجم بصورت پایدار نگه می‌دارد تا حتی با مسدودسازی دامنه‌های اصلی، فرآیند جاسوسی و تخلیه حساب‌های بانکی بدون اختلال ادامه یابد.

چند نمونه از انتشار بدافزار در شبکه‌های اجتماعی به شرح زیر هستند:

نمونه از انتشار بدافزار در شبکه های اجتماعی

پس از کلیک روی لینک، صفحات زیر در مرورگر گوشی نمایش داده می‌شود:

نمایش صفحات زیر در مرورگر گوشی،  پس از کلیک روی لینک

بعد از اجرای بدافزار، صفحات زیر برای سرقت اطلاعات بانکی به کاربر نمایش داده می‌شود:

صفحات اجرای بدافزار

کلاس ProxyComponentFactory کنترل instantiation تمام مولفه‌ها را در دست می‌گیرد. سپس کلاس ProxyApplication کتابخانه‌ بومی را بارگذاری می‌کند.

متد native init_app فایل APK نصب‌شده را مستقیماً mmap می‌کند و دو فایل درون پوشه asset را از داخل آن استخراج می‌کند. وظیفه mmap ایجاد یک نگاشت بین فایل و فضای آدرس مجازی پردازش است

در ادامه فایل‌ i11111i111.zip از مسیر داده‌ اپلیکیشن استخراج‌ شده‌ و بررسی شد. در این فایل zip سه فایل classes.dex و classes2.dex و classes3.dex قرار داشت. هنگام تلاش برای decompile کلاس Technis که حاوی متدهایی مثل GetContactID، GetContactbyPhone و GetContactNamebyPhone بود، همان‌طور که در تصویر سمت چپ مشخص می‌باشد، دیباگر هنگام decompile با خطا مواجه شده است.

بررسی هگزادسیمال متدها نشان داد که بدنه‌ واقعی تمام متدها با دنباله‌ای از بایت‌های 0e 00 0e 00 … معادل شبه کد return-void در Dalvik جایگزین شده است. بنابراین با توجه به تصویر کدهای سمت چپ، متدها فاقد بدنه می‌باشند و در کدهای سمت راست، متدها دارای بدنه هستند که پس از Unpack قابل رویت شده است:

بدنه متدها

Unpacking

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

توسعه‌دهنده برای تکمیل این پنهان‌کاری، کتابخانه‌های اجرایی سطح پایین (فایل‌های .so) را به جای مسیر استاندارد سیستم‌عامل، در پوشه‌های متفرقه برنامه مخفی کرده است. به محض راه‌اندازی اپلیکیشن روی گوشی قربانی، زنجیره بارگذاری از لایه جاوا آغاز شده و کتابخانه native مربوط به پردازنده دستگاه در حافظه اجرا می‌شود تا کنترل فرآیند را به لایه سیستمی منتقل کند.

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

در فرآیند تحلیل امنیتی، با تحلیل ریاضی و شکستن ساختار رمزنگاری، کلید رمزگشایی چهار‌بایتی کدهای پنهان‌شده کشف شد و با بازسازی آفلاین فایل‌های اصلی و جایگزینی مجدد بیش از ۵ هزار متد، تمامی بخش‌های پنهان بدافزار شامل ماژول‌های سرقت پیامک، استخراج مخاطبان و Phishing بانکی استخراج و آشکار گردید.

🔷 کلاس com.vblebs.app.serverlink

این کلاس یک ماژول کد استاندارد درکتابخانه B4A است که صرفاً به عنوان یک مخزن استاتیک برای نگهداری آدرس سرور کنترل و فرمان بدافزار عمل می‌کند. بدافزارها برای فرار از شناسایی توسط آنتی‌ویروس‌های استاتیک، آدرس سرور خود را به صورت متن ساده درون کد قرار نمی‌دهند.

🔺 متد _process_globals

آدرس سرور C2 بدافزار به صورت کدگذاری شده با الگوریتم Base64 در متغیر استاتیک _link ذخیره شده است.

متد _process_globals

🟦 اکتیویتی com.vblebs.app.main

🔺 متد _requestallpermissions

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

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

🔺 متد ContinueToWebView

هسته اصلی ارتباطات شبکه بدافزار است. برنامه ابتدا آدرس سرور را از serverlink خوانده و به رشته متنی تبدیل می‌کند. سپس پورت سرور را از فایل sudoport.txt می‌خواند. بلافاصله سرویس‌های پس‌زمینه مخفی برای شنود پیامک و پیام‌رسانی Firebase را شروع می کند.

در نهایت، شناسه اختصاصی دستگاه یعنی android_id را دریافت کرده و به انتهای آدرس دریافتی اضافه می‌کند تا بتواند قربانی را روی سرور ردیابی کند و در نهایت یک صفحه وب پورتال جعلی مثلا صفحه پرداخت یا ابلاغیه قضایی را در Web View نمایش دهد.

متد ContinueToWebView

🔺 متد _exitappnow

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

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

متد _exitappnow

🟦 اکتیویتی com.vblebs.app.google

توسعه‌دهندگان بدافزار این اکتیویتی و اکتیویتی‌های youtube و second را به صورتی طراحی کرده‌اند که در صورت باز شدن توسط سیستم یا کاربر، یک رفتار کاملاً قانونی و عادی را شبیه‌سازی کند. زمانی که این اکتیویتی اجرا می‌شود در متد _activity_create، بدافزار به جای نشان دادن یک صفحه سفید یا رابط کاربری مشکوک، متد _opengoogleapp را صدا می‌زند.

این متد یک Intent صریح برای باز کردن اکتیویتی اپلیکیشن رسمی و واقعی گوگل روی گوشی یعنی com.google.android.googlequicksearchbox ایجاد می‌کند. هدف از این کار این است که اگر کاربر به طور تصادفی این بخش از برنامه را باز کند، بلافاصله برنامه رسمی گوگل باز می‌شود و کاربر تصور می‌کند همه چیز عادی است و اپلیکیشن مشکلی ندارد.

🔷 سرویس com.vblebs.app.starter

در این بدافزار، کلاس starter وظیفه راه‌اندازی زنجیره بدافزار و اعلام وضعیت نصب موفق به مهاجم را دارد.

🔺 متد _permissionsgranted

سرویس به صورت مداوم در چرخه‌های حیات خود (_service_create، _service_start و حتی زمان بسته شدن اجباری برنامه _service_taskremoved) چک می‌کند که آیا سرویس پایداری بدافزار فعال است یا خیر. اگر متوقف شده باشد، بلافاصله آن را مجدداً استارت می‌زند.

به محض اینکه کاربر در صفحه اصلی مجوزهای درخواستی را تایید کند، متد _permissionsgranted فعال شده و بلافاصله سرویس starter، دریافت کننده Firebase مهاجم و دریافت کننده شنود پیامک را به صورت همزمان فعال می‌کند.

یکی از رفتارهای بسیار مخرب این کلاس در زمان اولین اجرا رخ می‌دهد. بدافزار بررسی می‌کند که آیا فایلی به نام FirstInstall.txt در حافظه داخلی گوشی وجود دارد یا خیر. اگر وجود نداشته باشد، یعنی این اولین باری است که بدافزار روی گوشی قربانی اجرا شده است.

در این لحظه، بدافزار فرآیند Fingerprinting را آغاز کرده و اطلاعاتی مثل وضعیت روشن یا خاموش بودن صفحه نمایش، مشخصات دقیق سخت‌افزاری شامل مدل گوشی، شرکت سازنده و نام محصول، نام اپراتورهای سیم‌کارت‌های فعال روی گوشی (همراه اول، ایرانسل و…) به همراه تعداد سیم‌کارت‌ها، شناسه اختصاصی اندروید دستگاه برای ردیابی قربانی، میزان درصد شارژ باتری و نسخه سیستم‌عامل اندروید را جمع‌آوری می‌کند.

در نهایت با فراخوانی متد _senddata با پارامتر action=install، این پکیج اطلاعاتی را از طریق پروکسی به سرور مهاجم می‌فرستد تا او متوجه شود یک قربانی جدید به شبکه بدافزار اضافه شده است. پس از ارسال موفق، فایل FirstInstall.txt را می‌سازد تا این فرآیند جاسوسی سخت‌افزاری دوباره تکرار نشود.

اگر کاربر منوی برنامه‌های اخیر را باز کند و این اپلیکیشن را به بیرون بکشد تا بسته شود، سیستم‌عامل اندروید رویداد onTaskRemoved را اجرا می‌کند که در کتابخانه B4A به متد _service_taskremoved متصل می‌شود. بدافزار از این رویداد سوءاستفاده کرده و به محض اینکه کاربر سعی در بستن برنامه داشته باشد، مجدداً دستور فعال‌سازی دریافت کننده های پیامک و Firebase را صادر می‌کند تا مانع از قطع ارتباط بدافزار با سرور کنترل شود.

متد _permissionsgranted

🔷 سرویس com.vblebs.app.liveit

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

🔺 متد _initializebroadcastreceiver:

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

با این مکانیزم، به محض اینکه کاربر گوشی خود را روشن کند یا صفحه آن را باز و بسته کند، متد _pnreciver_onreceive فراخوانده می‌شود تا سرویس اصلی بدافزار و ارتباط Firebase با مهاجم را مجدداً شروع کند.

🔺 متد _createnotificationchannel و _startkillprotection

در نسخه‌های اندروید، یک سرویس برای اینکه در پس‌زمینه زنده بماند باید یک پیغام به کاربر نشان دهد. این متدها یک کانال اعلان جعلی و کاملاً بی‌صدا (setSound(false))، بدون لرزش (enableVibration(false)) و بدون متن ایجاد می‌کنند و اهمیت آن را روی پایین‌ترین سطح قرار می‌دهند تا بدافزار به عنوان یک سرویس Foreground در سیستم ثبت شود اما هیچ پیغامی یا علامتی روی گوشی به کاربر نشان داده نشود تا کاربر از وجود آن مطلع نگردد.

🔷 کلاس com.vblebs.app.sendserver

این بدافزار برای اینکه ارتباطش با سرور مهاجم قطع نشود، یک بخش اینترنتی اختصاصی به نام ProxyHttp دارد که کاملاً مستقل از ابزارهای معمولی برنامه‌نویسی کار می‌کند و هیچ نیازی هم به نصب بودن خود برنامه «بله» روی گوشی قربانی ندارد.

ترفند اصلی مهاجم در این بخش، سوءاستفاده از ساختار آدرس tapi.bale.ai است؛ چرا که وب‌سرویس ربات‌های پیام‌رسان بله (tapi مخفف Telegram-compatible API) به صورت ۱۰۰٪ سازگار و مشابه با معماری ربات‌های تلگرام طراحی شده است. این شباهت ساختاری به بدافزار اجازه می‌دهد تا با همان دستورات استاندارد تلگرام (مانند متد getUpdates)، اما این‌بار به سمت سرورهای داخلی و بدون فیلتر بله درخواست بفرستد.

در این چرخه، بدافزار هر ۳۰ دقیقه یک‌بار به صورت مخفیانه آخرین پیام ربات مهاجم را دانلود می‌کند؛ این پیام که حاوی مشخصات یک پروکسی جدید است، با کاراکترهای خاصی مثل * _ – @ # رمزگذاری شده تا آنتی‌ویروس‌ها به آن شک نکنند، اما متد _decodetext با یک فرمول ریاضی و الگوریتم XOR آن را رمزگشایی می‌کند.

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

این کلاس داخلی حاوی کدهای native جاوا برای ایجاد تردها و اتصالات شبکه به صورت کاملاً مستقل از ابزارهای استاندارد B4A است.

postAsync: ارسال ناهمگام داده‌های سرقت شده مانند پیامک‌ها به فایل Received.php روی سرور مهاجم.

uploadAsync: آپلود فایل‌های حجیم (مانند فایل فشرده تصاویر شخصی گالری کاربر یا Screenshotها) در قالب فرم‌های multipart/form-data به فایل file.php سرور.

pollAsync: برقراری اتصال مداوم با اسکریپت longpoll.php برای گوش به زنگ بودن بدافزار.

تمامی این متدها مجهز به سیستم مسیردهی از طریق پروکسی‌های SOCKS و HTTP از نام کاربری و رمز عبور هستند تا ترافیک خروجی بدافزار رمزگذاری یا پنهان شود و سیستم‌های امنیتی شبکه مانند Firewallها نتوانند متوجه سرقت اطلاعات شوند.

🔺 متد _checkproxyfrombale

مهاجمین برای جلوگیری از نابودی شبکه بدافزار، از ربات‌های پیام‌رسان بله به عنوان یک ابزار هدایت ترافیک استفاده می‌کنند. بدافزار ابتدا توکن ربات بله را از فایل lb.txt در assets برنامه بارگذاری می‌کند.

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

متد _checkproxyfrombale

🔺 متد _decodetext

برای اینکه فرمان‌هایی که مهاجم در پیام‌رسان بله می‌گذارد توسط آنتی‌ویروس‌ها یا Firewallهای شبکه بله اسکن و کشف نشود، بدافزار از یک سیستم رمزگذاری اختصاصی استفاده می‌کند. فرمان‌ها ابتدا با کاراکترهای خاصی مانند * _ – @ # $ % ^ & ! ~ ? دستکاری شده و سپس به صورت Base64 در می‌آیند.

متد _decodetext رشته دریافتی که با data شروع می‌شود را باز کرده، کاراکترهای فرضی را جایگزین می‌کند، مقدار Base64 را دیکد کرده و با استفاده از یک فرمول ریاضی بر پایه توکن ربات، متن واقعی دستور (مانند آدرس پروکسی جدید) را استخراج می‌کند.

🔺 متد _parsebaleresponse

پس از دریافت پاسخ از بله، در این متد متن پیام‌ها را اسکن می‌کند. اگر پیام حاوی رشته رمزگشایی شده Lebeka:[Port] باشد، بدافزار متوجه می‌شود که این یک دستور برای تغییر پورت یا ریست کردن تنظیمات پروکسی است.

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

متد _parsebaleresponse

🔺 متدهای ResumableSub_DoPoll و ResumableSub_onPollResult

این دو متد فرآیند Long Polling را پیاده‌سازی می‌کنند. بدافزار یک اتصال طولانی مدت ۳۵ ثانیه‌ای با اسکریپت longpoll.php سرور مهاجم برقرار نگه می‌دارد. به محض اینکه مهاجم دستوری در پنل خود ثبت کند مثل دستور ارسال پیامک انبوه، سرور در پاسخ به این کانال باز، دستور را ارسال می‌کند.

🔺 متد _onpollresult

این متد پاسخ را به صورت JSON تحلیل کرده و به کلاس اصلی بدافزار دستور اجرای سریع عملیات مخرب را صادر می‌کند. اگر سرور پاسخی نداشته باشد، بدافزار بر اساس یک زمان‌بندی هوشمند _waittime از ۵ ثانیه تا ۱ دقیقه مجدداً اتصال را برقرار می‌کند تا باتری گوشی بیش از حد مصرف نشود و کاربر شک نکند.

🔺 متد _addtopending و _flushpendingrequests

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

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

متد _addtopending و _flushpendingrequests

🔷 کلاس com.vblebs.app.httpjob

این کلاس، ماژول کمکی و مکمل کلاس httputils2service است. این کلاس اساساً یک شیء برای هر درخواست شبکه ایجاد می‌کند تا اطلاعات ارسالی و دریافتی را کپسوله‌سازی کند.

🔺 متد patchbytes_

این متد اطلاعات متنی مانند لیست مخاطبین استخراج‌شده یا متن پیامک‌های بانکی سرقت شده را به بایت‌های با فرمت UTF8 تبدیل کرده و مستقیماً متد _postbytes را فرا میخواند تا اطلاعات را بدون جلب توجه سیستم‌عامل، به سرور مهاجم ارسال کند.

برنامه ابتدا حجم فایل را چک می‌کند؛ اگر فایل کوچک باشد (کمتر از ۱ مگابایت)، آن را به یک آرایه از نوع بایت تبدیل کرده و با متد _postbytes می‌فرستد. اگر بزرگتر باشد، با باز کردن یک فرستنده جریان فایل را مستقیماً به سمت سرور مهاجم ارسال می‌کند.

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

متد patchbytes_

🔺 متد _download

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

متد _download

🔸 دریافت کننده com.vblebs.app.newmessage

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

🔺 متد _parsesmsintent

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

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

متد _parsesmsintent

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

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

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

دستور ping: مهاجم با فرستادن کلمه ping، وضعیت زنده بودن بدافزار را چک می‌کند. بدافزار در پاسخ، تمام سرویس‌های مخرب و Firebase را دوباره شروع می کند و یک پیامک تایید با متن “Target device is active…” برای مهاجم می‌فرستد.

دستور lastsms [تعداد]: مهاجم با این دستور می‌تواند آرشیو پیامک‌های قبلی کاربر را سرقت کرده و از طریق پیامک دریافت کند (مثلاً ارسال ۱۰ پیامک آخر گوشی).

دستور L [کلید] (تنظیم شماره آفلاین): برای فعال یا غیرفعال کردن حالت Forward آفلاین و ثبت شماره مهاجم در فایل offline.txt.

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

🔺 متد _sendsms

این متد در بدافزار برای فرستادن پیامک‌ها چه برای Forward داده‌ها به مهاجم و چه برای پاسخ به دستورات از آن استفاده می‌شود. این متد با دسترسی مستقیم به SmsManager بومی اندروید و متد sendMultipartTextMessage پیامک‌ها را به صورت چند تکه‌ای حتی اگر متن بسیار طولانی باشد و بدون انداختن Popup یا اطلاع به کاربر در پس‌زمینه ارسال می‌کند.

متد _sendsms

🔸 دریافت کننده com.vblebs.app.firebasemessaging

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

🔺 متدهای ResumableSub_send_sms_all و ResumableSub_send_sms

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

▪️کامند های سرور c2

  • _all_contacts: استخراج و سرقت کامل لیست مخاطبین
  • _all_sms_recived و _all_sms_sent: سرقت آرشیو کامل پیامک‌های دریافتی و ارسالی کاربر
  • _userphoneall: جمع‌آوری اطلاعات سخت‌افزاری، شماره تلفن و مشخصات شبکه سیم‌کارت

▪️تکنیک‌های پنهان‌سازی و تخریب

  • _set_icon_status: مخفی کردن آیکون برنامه از منوی گوشی بلافاصله پس از نصب، تا کاربر نتواند به راحتی آن را پیدا و حذف کند.
  • _deletedir: حذف پوشه‌ها و فایل‌های موقت برای پاک کردن ردپای بدافزار پس از سرقت.
  • _zipfromfolder: فشرده سازی فایل‌های متنی پیامک‌ها و مخاطبین برای آماده‌سازی ارسال.
▪️اجرای کدهای دستوری USSD بدون اجازه کاربر

SendUssdWithSlot و _sendussdsmart: این متدها کدهای USSD مثل کدهای انتقال وجه، خرید شارژ یا کدهای تغییر تنظیمات سیم‌کارت را مخفیانه و از طریق Slot سیم‌کارت اجرا می‌کنند تا موجودی سیم‌کارت یا حساب متصل به آن را خالی کنند.

🔷 کلاس com.vblebs.app.subs

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

🔺 متد _bank_balances

این متد وظیفه دارد رقم دقیق موجودی یا مانده حساب کاربر را از درون متن پیامک بیرون بکشد. بدافزار با استفاده از یک Regex تخصصی، متن پیامک را برای یافتن کلماتی مثل «موجودی»، «مانده» یا کاراکتر مخفف «م» اسکن می‌کند.

به محض پیدا کردن این کلمات، اعداد جلوی آن‌ها (چه اعداد انگلیسی \d، چه عربی ٠-٩ و چه فارسی ۰-۹) را که با ویرگول یا خط تیره جدا شده‌اند جدا کرده و در صورت داشتن طول منطقی، آن را به عنوان «موجودی سرقت شده» ذخیره می‌کند تا بعداً به سرور مهاجم ارسال شود.

🔺 متد _bank_isbank

این متد دو پارامتر فرستنده پیامک (s1) و متن پیامک (s) را تحویل می‌گیرد. اگر متن حاوی کلماتی نظیر «بانک»، «بانك»، «بلو»، «موجودی» یا «مانده» باشد، یا فرستنده پیامک یکی از شماره‌ها و سرشماره‌های رسمی بانک‌های ایران مانند بانک پاسارگاد، ملت، رسالت، کشاورزی، مسکن، پارسیان، اقتصاد نوین، صادرات، کارآفرین یا مؤسسه ملل باشد، وضعیت را مثبت اعلام می‌کند تا بدافزار فرآیند جاسوسی روی آن پیامک را آغاز کند.

🔺 متد _detect_bankname

زمانی که بدافزار مطمئن شد پیامک بانکی است، باید نام بانک را دقیقاً تشخیص دهد تا مهاجم در پنل خود بداند حساب کدام بانک قربانی را خالی می‌کند. متد _detect_bankname با بررسی شماره فرستنده و شناسه‌های متنی، نام دقیق بانک را به صورت فارسی (بانک کشاورزی، بانک ایران زمین، بانک مسکن، صندوق امداد ولایت، صندوق کارآفرینی امید، مؤسسه اعتباری ملل، بانک صادرات ایران، بانک کارآفرین، بانک اقتصاد نوین، بانک ملت، بانک پارسیان، بانک قرض‌الحسنه رسالت و بانک مهر ایران) استخراج کرده و به پکیج داده‌های سرقتی اضافه می‌کند.

متد _detect_bankname

🔺 متد find_hesabnumber

بدافزار ابتدا جملات پیامک را بر اساس خطوط (n\) از هم جدا می‌کند. سپس لیستی از کلمات کلیدی تراکنش‌های بانکی ایران شامل: «حساب»، «به حساب»، «واریز به»، «برداشت»، «برداشت از»، «کارت»، «واریز»، «خرید با کارت»، «خرید کالا و خدمات»، «انتقالی»، «خرید اینترنتی» و «سود» را بررسی می‌کند.

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

متد find_hesabnumber

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

روش مقابله و پاک‌سازی سیستم

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

روش‌های پیشگیری از آلودگی تلفن همراه

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