jspenguin2017 / uBlockProtector

An anti-adblock defuser for Nano Adblocker and uBlock Origin
GNU General Public License v3.0
743 stars 82 forks source link

di.fm #510

Closed mooop12 closed 7 years ago

mooop12 commented 7 years ago

Test link (required):

https://www.di.fm/ (any station, probably needs to be logged in to hear the ads)

Screenshot of the web page (required):

http://i.imgur.com/Fr8ATOP.png

Screenshot of the console (press F12 to bring up the console) (required):

http://i.imgur.com/TO78Sq2.png http://i.imgur.com/Gb0QpH3.png

Add everything else that you believe to be useful below (optional):

You can see in the logs the name of the anti-adblock addon they are using: https://github.com/sitexw/FuckAdBlock

jspenguin2017 commented 7 years ago

How do you reproduce it? Do you have to listen for a while?

Also: https://gitlab.com/xuhaiyang1234/NanoAdblockerSecretIssues/issues/27

uBlock-user commented 7 years ago

Can't reproduce.

If it's happening on a specific link, post that link here!

mooop12 commented 7 years ago

Sorry, forgot to mention that. Yes, though I don't know the exact interval. You should hear the ads in the first 30 minutes of listening when logged in. There seems to be a kind of trial when you're not logged in, I'm not sure if they play the ads then.

There aren't any links to post, this site doesn't work like that. The only station I'm listening to is "Progressive", and I hear the ads there.

uBlock-user commented 7 years ago

FuckAdblock is patched already. I listened to first 5 mins, no audio ads here.

mooop12 commented 7 years ago

I think you need to listen a little longer than 5 minutes. Maybe they also use something other than FuckAdblock. In the logs I sent (second screenshot) you can see at timestamp 19:56:34.730 they detect the adblock and are redirecting to an adblock wall.

uBlock-user commented 7 years ago

https://www.di.fm/search/channels?q=Progressive&page=1

Is the second one the Progressive one ?

mooop12 commented 7 years ago

Yes.

uBlock-user commented 7 years ago

https://www.di.fm/assets/application-007986938e0ac35a55d99243e2d2c444.js

https://www.di.fm/assets/application-007986938e0ac35a55d99243e2d2c444.js

Those are the traces of midroll ads I have found.

Zhangsun321 commented 7 years ago

hey moop ill show you how to get di.fm comerical free! https://friezy.ru/en/rt

you have a few choices... they have an apk you candownload to your mobile device.. OR for pc's they have.... you can plug their ripped stream url OR just download a new playlist everyweek with the 'free 7 day trial' to use with winamp or VLC also works for jazzradio.com classicalradio.com rockradio.com and radiotunes.com

jspenguin2017 commented 7 years ago

So what's the problem exactly? The audio tracks have ads or it shows the anti-adblock screen?

uBlock-user commented 7 years ago

I guess he's facing both. I can't reproduce any so far.

mooop12 commented 7 years ago

Previously with an adblock there was just a 5 second announcement of ads, with no actual ads playing. Recently they changed something, and now when it is time to play the ads the stream just stops and an anti-adblock screen is shown.

@Zhangsun321 I guess that's one way out of it, though you loose the track progress, easy station changing etc. Thanks nonetheless.

jspenguin2017 commented 7 years ago

I think nooping the ads track should work.

Zhangsun321 commented 7 years ago

hey @mooop12 try this https://hqradio.ru/di/

jspenguin2017 commented 7 years ago

This one is really hard to reproduce, we need someone who regularly use this website to debug it.

mooop12 commented 7 years ago

I can do that - just tell me what do you need.

jspenguin2017 commented 7 years ago

Can you find out which URL serves the audio ads and see if nooping it works? Also, is there a flag in localStorage that is linked to the block screen?

mooop12 commented 7 years ago

I'm not sure what nooping means? You mean to just block it in the adblock? Wouldn't that just trigger the anti-adblock wall like it does now?

jspenguin2017 commented 7 years ago

So first find the ads server from logger, then $redirect it to noopmp3-0.1s.

mooop12 commented 7 years ago

These are the rules that work for me:

||gvt1.com/*/gfp_video_ads/*/file.webm*$media,redirect=noopmp3-0.1s,domain=di.fm
@@||pubads.g.doubleclick.net/gampad/ads^$xmlhttprequest,domain=di.fm
@@||di.deliveryengine.adswizz.com^$xmlhttprequest,domain=di.fm

I'm not a big fan of adding these ad domains to allowed exceptions, but I know of no other way to modify an Angular module on the fly, which is what they are using when serving the ads and detecting the adblock.

jspenguin2017 commented 7 years ago

XHR can be modifies with a.replace. Although I would need a dump to create the rule. Marking as workaround.

jspenguin2017 commented 7 years ago

I don't really see the requests in logger, I guess it is only reproducible with an account. Can you provide a test account? You can send it to me privately by opening a confidential issue in GitLab or sending it to https://jspenguin.com/PrivateMessage/ with reference Issue 510.

adreporter commented 7 years ago

You can send it to me privately by opening a confidential issue in GitLab or sending it to https://jspenguin.com/PrivateMessage/ with reference Issue 510.

Sent.

mooop12 commented 7 years ago

Here's a uBlock log for a single ad "loop" if that will help:

18:13:49    @@||di.deliveryengine.adswizz.com^$xmlhttprequest,domain=di.fm  ++  xhr https://di.deliveryengine.adswizz.com/www/delivery/swfIndex.php?zone_alias=%5B%7Bza%3ADImidroll%2Cn%3A8%7D%5D&companion_zones_alias=Display&duration=245000&listenerId=&protocolVersion=2.0-compliant&reqType=AdsSetup&aw_0_azn.pgenre=Electronic&cb=1800269430
18:13:49    @@||pubads.g.doubleclick.net/gampad/ads^$xmlhttprequest,domain=di.fm    ++  xhr https://pubads.g.doubleclick.net/gampad/ads?sz=300x250&ciu_szs=300x250&iu=/1009675/radio_di_progressive&url=https%3A%2F%2Fwww.di.fm%2F&correlator=1503936829692&description_url=%5Bdescription_url%5D&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1
18:13:49    @@||di.deliveryengine.adswizz.com^$xmlhttprequest,domain=di.fm  ++  xhr https://di.deliveryengine.adswizz.com/www/delivery/swfIndex.php?zone_alias=%5B%7Bza%3ADImidroll%2Cn%3A8%7D%5D&companion_zones_alias=Display&duration=245000&listenerId=&protocolVersion=2.0-compliant&reqType=AdsSetup&aw_0_azn.pgenre=Electronic&cb=469573735
18:13:49    @@||pubads.g.doubleclick.net/gampad/ads^$xmlhttprequest,domain=di.fm    ++  xhr https://pubads.g.doubleclick.net/gampad/ads?sz=300x250&ciu_szs=300x250&iu=/1009675/radio_di_progressive&url=https%3A%2F%2Fwww.di.fm%2F&correlator=1503936829353&description_url=%5Bdescription_url%5D&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1
18:13:49    noopmp3-0.1s    <<  media   https://redirector.gvt1.com/videoplayback/id/0e5ce236caf6b42f/itag/43/source/gfp_video_ads/requiressl/yes/acao/yes/mime/video%2Fwebm/ip/0.0.0.0/ipbits/0/expire/1503958429/sparams/ip,ipbits,expire,id,itag,source,requiressl,acao,mime/signature/06008EE71D9AB1245FBF3BEE0A5026EF248FE6BA.2BC74F9C2B1B954E6D51977DEFC58E0E529BDADF/key/ck2/file/file.webm
18:13:49    _video_ads/ --  media   https://redirector.gvt1.com/videoplayback/id/0e5ce236caf6b42f/itag/43/source/gfp_video_ads/requiressl/yes/acao/yes/mime/video%2Fwebm/ip/0.0.0.0/ipbits/0/expire/1503958429/sparams/ip,ipbits,expire,id,itag,source,requiressl,acao,mime/signature/06008EE71D9AB1245FBF3BEE0A5026EF248FE6BA.2BC74F9C2B1B954E6D51977DEFC58E0E529BDADF/key/ck2/file/file.webm
18:13:48    @@||pubads.g.doubleclick.net/gampad/ads^$xmlhttprequest,domain=di.fm    ++  xhr https://pubads.g.doubleclick.net/gampad/ads?sz=300x250&ciu_szs=300x250&iu=/1009675/radio_di_progressive&url=https%3A%2F%2Fwww.di.fm%2F&correlator=1503936828984&description_url=%5Bdescription_url%5D&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1
jspenguin2017 commented 7 years ago

Dump: https://pastebin.com/PjVJcgif

jspenguin2017 commented 7 years ago

I'm testing my solution.

    if (a.domCmp(["di.fm"])) {
        a.loopback((ignored, url) => {
            //=====Debug Only=====
            window.console.log(url);
            //=====Debug Only=====
            if (url.startsWith("https://pubads.g.doubleclick.net/")) {
                return `
<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
</VAST>
`;
            } else if (url.startsWith("https://di.deliveryengine.adswizz.com/")) {
                return `
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="2.0"/>
`;
            } else {
                return null;
            }
        });
    }

It is available in debug mode of Extension.

jspenguin2017 commented 7 years ago

Yep, it does seem to work. Can you update Extension to 11.166 and test it out to make sure? Those white lists can be removed.

mooop12 commented 7 years ago

It works, although it's throwing errors about not being able to parse the string your returning. Is it supposed to be doing that?

screenshot_20170828_204752

jspenguin2017 commented 7 years ago

Not really, I didn't look into it since it worked.

jspenguin2017 commented 7 years ago

This is the current payload:


<?xml version="1.0" encoding="UTF-8"?>
<VAST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vast.xsd" version="3.0">
</VAST>