Легальное скачивание музыки из "Вконтакте"

Прямая авторизация
Доверенные приложения могут получить неограниченный по времени access_token для доступа к API, передав логин и пароль пользователя... Доступ к этому типу авторизации может быть получен только после предварительного согласования с администрацией ВКонтакте.

Разве это остановит какера, если он хочет послушать любимый плейлист оффлайн?
Ведь наверняка одним из самых доверенных приложений является официальный клиент под Android.

Что бы достать apk файл (Android Package — формат архивных исполняемых файлов-приложений для Android) я воспользовался adb (Android Debug Bridge), предварительно скачав приложение и подключив телефон через USB:

adb -d shell pm list packages -f | grep vk
package:/data/app/com.vkontakte.android-2.apk=com.vkontakte.android

adb -d pull /data/app/com.vkontakte.android-2.apk E:\apk\
4281 KB/s (6111964 bytes in 1.394s)

Файл apk это обычный zip архив, в котором нас интересует файл classes.dex.
Dalvik код необходимо конвертировать в jar файл с помощью утилиты dex2jar:

dex2jar.bat e:\apk\com.vkontakte.android-2\classes.dex
После этого classes_dex2jar.jar можно без проблем декомпилировать с помощью JD-GUI

Мне не пришлось долго копаться, что бы найти заветную строку в классе Auth:

 String str2 = String.format("https://oauth.vk.com/token?grant_type=password&scope=nohttps&client_id=***&client_secret=***&username=%1$s&password=%2$s", arrayOfObject);
Скопировав её в обозреватель подставив логин и пароль, я получил свой заветный бессмертный access_token

Изначально, я хотел написать приложение для Android закачивающее музыку в выбранную тобой папку, но лень взяла верх. Порывшись в документации я нашел пример выполнения API по протоколу JSONP.

JavaScript:
function audio_get(oid) {
    var script = document.createElement('SCRIPT');
    var token = 'ваш токен';
    script.src = "https://api.vk.com/method/audio.get?need_user=0&oid=" + oid + "&access_token=" + token + "&callback=audio_list";
    document.getElementsByTagName("head")[0].appendChild(script);
}

function audio_list(result) {
    if (result.response) {
        var body = document.getElementsByTagName("body")[0];
        for (var i = 0; i < result.response.length; i++) {
            var audio = result.response[i];
            var div = document.createElement('div');
            div.innerHTML = '' + audio.artist + ' — ' + audio.title + '';
            body.appendChild(div);
        }
    }
}

Вот такой незамысловатый код получился у меня в файле audio.html, который гордо расположился на рабочем столе.
Запуская функцию audio_get с различным oid, а это ID пользователя Вокнтакте, можно получать плейлисты своих друзей, да вообще кого угодно, не хватает только реализации метода audio.search, красивой верстки, но мне оно не надо, пойду я спать :)

Интересно почитать

blog comments powered by Disqus
сюда туда