Skip to content

Commit b1be244

Browse files
author
Adrian
committed
Fix signature decoder
1 parent 74342be commit b1be244

File tree

2 files changed

+7
-6
lines changed

2 files changed

+7
-6
lines changed

AIMPYouTube.rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ FONT 8, "Tahoma", 400, 0, 0
7373
CONTROL "", IDC_YTDLTIMEOUTSPIN, UPDOWN_CLASS, UDS_ARROWKEYS | UDS_AUTOBUDDY | UDS_HOTTRACK | UDS_SETBUDDYINT, 87, 212, 11, 15, WS_EX_LEFT | WS_TABSTOP
7474
AUTOCHECKBOX "Always use youtube-dl", IDC_YTDLFORCE, 15, 183, 250, 8, 0, WS_EX_LEFT | WS_TABSTOP
7575
EDITTEXT IDC_YTDLPARAMS, 58, 195, 137, 14, ES_AUTOHSCROLL, WS_EX_LEFT
76-
LTEXT "aimp_YouTube v1.5", IDC_VERSION, 30, 244, 285, 8, SS_LEFT | SS_NOTIFY, WS_EX_LEFT
76+
LTEXT "aimp_YouTube v1.6", IDC_VERSION, 30, 244, 285, 8, SS_LEFT | SS_NOTIFY, WS_EX_LEFT
7777
}
7878

7979

YouTubeAPI.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ void YouTubeAPI::ResolveUrl(const std::wstring &url, const std::wstring &playlis
415415
std::wstring YouTubeAPI::GetStreamUrl(const std::wstring &id) {
416416
std::wstring stream_url;
417417
if (!YouTubeDL::Force) {
418-
std::wstring url2(L"https://www.youtube.com/get_video_info?video_id=" + id + L"&el=detailpage&sts=16511");
418+
std::wstring url2(L"https://www.youtube.com/get_video_info?video_id=" + id + L"&eurl=https%3A%2F%2Fyoutube.googleapis.com%2Fv%2F" + id + L"&sts=18389&html5=1");
419419
AimpHTTP::Get(url2, [&](unsigned char *data, int size) {
420420
if (char *streams = strstr((char *)data, "player_response=")) {
421421
streams += 16;
@@ -469,10 +469,11 @@ std::wstring YouTubeAPI::GetStreamUrl(const std::wstring &id) {
469469

470470
std::string stream;
471471
if (px.HasMember("url")) stream = px["url"].GetString();
472-
if (stream.empty() && px.HasMember("cipher")) {
472+
if (stream.empty() && (px.HasMember("cipher") || px.HasMember("signatureCipher"))) {
473473
std::string s, sig, sp = "signature";
474+
std::string cipher = px.HasMember("cipher")? px["cipher"].GetString() : px["signatureCipher"].GetString();
474475

475-
Tools::SplitString(px["cipher"].GetString(), "&", [&](const std::string &token) {
476+
Tools::SplitString(cipher, "&", [&](const std::string &token) {
476477
if (token.find("url=") == 0) { stream = Tools::UrlDecode(token.substr(4)); }
477478
else if (token.find("s=") == 0) { s = Tools::UrlDecode(token.substr(2)); YouTubeAPI::DecodeSignature(s); }
478479
else if (token.find("sp=") == 0) { sp = Tools::UrlDecode(token.substr(3)); }
@@ -525,12 +526,12 @@ std::wstring YouTubeAPI::GetStreamUrl(const std::wstring &id) {
525526

526527
void YouTubeAPI::LoadSignatureDecoder() {
527528
static std::map<std::string, std::function<void(std::string &s, int param)>> mutatorTypes {
528-
{ "swap", [](std::string &s, int param) { std::swap(s[0], s[param]); } },
529+
{ "swap", [](std::string &s, int param) { std::swap(s[0], s[param % s.size()]); } },
529530
{ "erase", [](std::string &s, int param) { s.erase(0, param); } },
530531
{ "reverse", [](std::string &s, int param) { std::reverse(s.begin(), s.end()); } },
531532
};
532533

533-
std::wstring ua(L"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36");
534+
std::wstring ua(L"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36");
534535
AimpHTTP::Get(L"https://www.youtube.com/\r\nUser-Agent: " + ua, [&](unsigned char *data1, int) {
535536
std::string player = Tools::FindBetween((char *)data1, "\"jsUrl\":\"", "\"");
536537
if (!player.empty()) {

0 commit comments

Comments
 (0)