stg-deepsee-dev.kinsta.cloud

Detect ad fraud before it becomes a problem.

stg-deepsee-dev.kinsta.cloudblog@stg-deepsee-dev.kinsta.cloud
2023-03-08

This investigation was a joint effort between Malwarebytes Threat Intelligence’s Jérôme Segura, DeepSee’s Rocky Moss and Antonio Torres.

Key findings

  • Over a dozen unique domains were found selling ad inventory through Google Ad Manager, even though the pages were embedded invisibly under the content of illegal movie & porn streaming sites
  • Streaming sites in the DeepStreamer fraud ring generated an estimated 210,550,928 visits in January 2023, as measured by Similar Web
  • There was not a single seller in common between each of the sites used for laundering (the “money sites”), but most offered their inventory for sale through Google Ad Manager
  • Using extremely conservative estimates, which factor in a 50% ad-block rate & 70% ad-unit fill rate, we project advertiser spend on this scheme between $120k – $1.2 million in January 2023 alone
  • Working with a leading ad buying platform, we were able to confirm there were hundreds of millions of bid requests generated for these domains between January – February 2023
Table of Contents

Introduction

Online video streaming sites have always been some of the most visited destinations on the web. Legitimate ones will typically require a subscription fee or rely on advertising as part of their business model. Unfortunately, at any given point in time, there are thousands of sites that allow users to illegally stream pirated content, and they often manage to devise strategies that allow them to monetize their illegally sourced content with programmatic advertising.

Researchers at DeepSee and Malwarebytes have identified an invalid traffic scheme that has gone undetected for over one year via a number of illegal video streaming platforms. DeepStreamer used different techniques to evade detection and forge traffic by surreptitiously loading “money sites” (ad-monetized sites used to monetize/launder the human traffic to pirate sites) filled with Google ads completely hidden from view, while internet users were watching movies.

Not only are these streaming sites breaking the law by using copyrighted material, they are also defrauding advertisers for, possibly, up to $1.2million per month, based on conservative estimates.

A deceptive business model

DeepSee researchers contacted Malwarebytes about a scheme they had observed recently via a video streaming website called moviesjoy[.]to. DeepSee’s crawlers had observed the site mikerin[.]com loading ads deep under the content of moviesjoy, but it wasn’t exactly clear how this was happening.

Interestingly, the site claims to offer free HD movies and TV series with “absolutely zero ads on our site. Once you hit the play button, you can start streaming right away, without any interruptions in the middle.

On the internet if something is “free”, it usually means you are the product in some shape or form. Hosting and streaming costs money that needs to be recouped so the service can stay online.

What we identified was not entirely surprising but was quite clever. The platform does indeed rely on ads but rather than having them visible on the site, they are embedding and hiding them.

While the site owner could display ads to their visitors, there is no way legitimate advertisers (meaning those that would pay more) would accept traffic coming from a site offering pirated movies.

The trick consists of loading ads from seemingly regular websites and not showing them to anyone. Those “legitimate” websites are embedded and hidden into the page as iframes while users are watching movies.

There are 4 Google ads that load per page and the pages reload periodically. Advertisers are buying ad space for mainstream content but on websites that are inserted as invisible iframes into illegal video streaming platforms.

Anti-debugging tricks

Rather than using more simple techniques such as popunders, DeepStreamer relies on intermediary domains that create hidden iframe containers within the existing page.

The code that they use is highly obfuscated and detects the presence of debuggers. Capturing network traffic externally will only show some static elements, and not the dynamically created iframes.

Here is the overall traffic view, from the streaming site (moviesjoy) to the money site (mikerin):

There are several anti-debugging tricks being used, the first one actually from the online video streaming site itself: 

The domain hosted at adtrue[.]top (or adtrue[.]info) plays an important role in loading the money domains by performing a HEAD /dynamic/ads/ HTTP request, and yet it shows an enigmatic 404 code response.

We were able to replay the attack by putting a breakpoint on adtrue[.]info using an external web debugger (Fiddler) and observed that it started loading the domain immediately responsible for rendering the money site.

It appears though that all these intermediary domains are connected and watching for each other.

Hidden iframe containers

Let’s look at the difference between static and dynamically rendered content with mikerin[.]ml which is related to mikerin[.]com (money site with ads). It only appears to load jquery.js:

This has nothing to do with the popular jQuery JavaScript library, but instead is heavily obfuscated and debugger-proof code that contains the clues on how DeepStreamer is loading their iframe:

However, we can take a shortcut and see what the Document Object Model (DOM) looks like by saving the current webpage as a complete *.html,*.html file using the browser UI.

While the HTML saved from mikerin[.]ml showed very little information (Figure xx), the DOM provides a lot more useful information since it shows objects that have been rendered by the browser.

There is a new element called “containerIframeBlog____” that is referring to the money sites which are ordinary looking blogs with Google ads. The iframe’s properties make it so that nothing is visible to the user.

One way to confirm those iframes without triggering the anti-debugger code is by launching Chrome’s Task Manager:

Evasion techniques

What we refer to as the money sites are WordPress sites with a number of blog articles and Google ads. At first glance, everything looks legitimate but that is simply a decoy to fool everyone.

What we noticed are articles that are completely clean, while others contain ad fraud code. Of course, you will only get to the latter if your referer is one of the movie streaming sites.

There is one problem though. If visitors truly came from a pirated site, then ad networks would not allow their customer’s ads through. 

This is where referral forging comes into play. We can see that DeepStreamer is spoofing the referer and choosing from one of their own (Google, Bing or Facebook):

Another issue is that the invisible iframes will not reflect user activity, and yet it is important to pretend humans are scrolling and clicking on the articles. The next piece of code from the ad fraud script does just that:

If the money site was not hidden as an iframe, this is what it would look like while performing ad fraud:

Perhaps as a measure to avoid creating too many ad requests, these embedded pages do not often refresh ad units within the context of a single page-view. Instead, they generate a visit to a new spoofed page every 2-3 minutes, as demonstrated in this code snippet (looking at the interval object in particular for details on timing):

This is also confirmed by our packet captures from manually generated visits to these pirate sites; a new page is loaded every 2-3 minutes. 

(Un)intended 3rd Party Measurement Evasion

One interesting side effect of embedding the money domain as DeepStreamer here has: estimates from SimilarWeb were completely thrown off! Take for example the SimilarWeb results for 2 money sites that generated hundreds of millions of ad opportunities in the same measurement period (Nov ‘22 to Jan ‘23):

Similarweb has no idea they exist & are generating these kinds of ad traffic volumes. This makes it seem like SimilarWeb measures traffic for domains that are navigated to in the browser address bar, and not accounting for hidden / embedded pages. This could be both a blessing and a curse. 

On the plus side: many ad exchanges check for 3rd party traffic metrics from tools like SimilarWeb before making a publisher’s inventory available, and organizations doing that basic check will protect themselves from exposure to sites like this. Put another way: a quality specialist would see that there’s no traffic to mikerin[.]com, or guiadosabor[.]com, and the sites would not be approved for the platform subsequently. 

  • This begs the question: how were these publishers able to sell their inventory through Google’s ad exchange? What checks and balances were in place to ensure that the traffic volumes to those sites were believable?

One negative outcome of this measurement scenario is that researchers who rely on SimilarWeb insights can not know about the “money” sites’ connections to pirate domains; the connection from source -> money site is lost given the absence of SimilarWeb “related sites” data. 

DeepSee’s crawl data revealed ground-truth connections between the pirate & “money” sites, but it could not account for the volume of traffic directed at the “money” sites. Luckily, since these sites load every time someone visits the pirate sites, it’s possible to estimate the visit counts to the “money” domains by understanding traffic volumes to the pirate sites which embed them.

Monetization

The Roster of Embedded Sites

By working with the team at Malwarebytes, DeepSee was better able to profile the activity of a monetized site involved in the DeepStreamer scheme, and set about the task of mapping the active ones to their pirate/source domains. What we found are 14 active content domains, loaded by 250+ unique pirate sites, which cumulatively generated hundreds of millions of visits in January:

Money DomainUnique Source DomainsSource Domain Est. Jan SimWeb Visitsbrandingjoy[.]in3380,991,970aitechgear[.]in1950,552,027guiadosabor[.]com237,769,619mikerin[.]com232,999,385adorablefurnishing[.]com19432,100,166journeywithvision[.]com129,430,082satishmoheyt[.]in221,499,619primesinfo[.]com19,913,095techyclub[.]in24,190,218streamix[.]tv113,899,551newsworldcity[.]com13,427,093pharmabeaver[.]com12,948,025guerytech[.]online32,590,490virvida[.]com11,359,371

In order to arrive at the estimated visit statistics, we used data from Similarweb. Not every pirate domain was found in their dataset due to recent registration, or low traffic volumes.

Now that we had identified a sample of ad-monetized domains, we needed to make sure these ad units were actually firing off impression trackers, meaning the advertiser would be charged for presenting their ads on the page. 

In order to confirm this, DeepSee analyzed data its crawlers had gathered when visiting the pirate sites in question, and compared the number of Google ad requests generated to the number of corresponding Google impression trackers fired. 

This dataset, composed of 6,748 crawls performed between January 1st and February 27th 2023 showed the following:

  • Of the 35,269 Google ad requests measured, DeepSee measured 25,387 corresponding impression trackers, making for a fill rate of ~72%
  • The “money” sites loaded a median 4 ad units per-page load; confirmed by manual inspection performed by Malwarebytes
  • In DeepSee’s limited manual tests, generated by visiting the pirate sites & running packet capture software, there was a measured fill rate of ~80%
  • Perhaps more troubling, ~98% of the sessions that DeepSee crawlers generated were from known data centers, performed without any attempt to cloak the IP.

(For more information on how to do this kind of auditing yourself, check out this explainer from MonetizeMore)

These data points in hand, we could now construct an estimate of how much advertisers might be spending on this inventory. For complete insights into the dataset we used to create these estimates, alongside the complete list of Source:Money domain mappings, check out our companion document

  • After matching the pirate source domains to SimilarWeb data, and summing the visit counts, we counted 221,823,394 cumulative visits generated.
  • Using the visit data, and the time-on-site metrics from SimilarWeb, we arrived at a weighted average time-on-site of ~7.75 minutes per visit
  • Visitors immediately cause 4 ads to load upon a page load, and another 4 ads load on average each 2.5 minutes when the page reloads. This makes for an average 16.40 ad exposures per visit for each user
  • Multiplying average exposures per user by the number of visits yielded a total of 3,636,840,849 estimated ad exposures in January, but we had to add a few modifiers to this figure:
    • According to data compiled by Statista, ~50% of desktop web users block ads, and that number is ~30% for mobile browser users. We chose to use the more conservative 50% figure, and removed half of the projected impressions from the pool, leaving 1,818,420,425 estimated ad exposures in January
    • As we previously mentioned, DeepSee crawlers measured a fill rate of ~72% for Google ad units on the money sites during our visits. Factoring in a slightly more conservative 70% fill rate left us with 1,272,894,297 estimated ad exposures in January

Given our final figure of 1,272,894,297 estimated ad exposures in January, the advertiser spend was estimated to be between $127k and $1.27 million, depending on the average price of these advertisements, which was never disclosed to us. We broke our estimates down across several probable price points for this media:

At this point, it was clear that advertisers were really buying this space, so we started asking around for evidence that could point us to who was selling the space.

The Non-Google DSP Perspective

The data in this section was provided to DeepSee by a leading DSP (demand-side advertising platform) with global reach, who agreed to participate under condition of anonymity (we’ll call them DSP “A”) . They provided reporting, from their perspective, on the count of bid requests generated by the money domains dating back to 2020. Most helpfully, they also provided the supply-path related to an opportunity, which tells us the exchange & seller name related to the opportunity.

As a disclaimer, there are a few limitations of this dataset:

  • This is just the perspective of one DSP, and we can’t claim to know that these sellers created a similarly large share of opportunities presented to all other DSPs. We suspect they do, but without input from Google in particular, it can’t be confirmed.
  • These sites seemed to monetize extremely poorly outside of Google; fewer than 1% of requests resulted in an ad being delivered via DSP “A”.
    • That low fill rate was echoed by another non-google exchange we polled, who told us that only .1% of opportunities they created resulted in ads being loaded
    • On the other hand, we observed that these Google ad units were filled upwards of 70% of the time.

Understanding the above, the below table shows the top sellers offering space on these money domains, and the ad exchange the opportunity came through.

Google Was the Top Exchange Offering These Opportunities; There Was Not 1 Particular Seller in Common

Top Seller Per Domain, Ordered by Magnitude of Ad Opportunities Presented to DSP “A”

DomainApprox. Ad Opportunities CreatedTop ExchangeTop Seller(s)guiadosabor[.]com1 Billion+RubiconGrumft Mediamikerin[.]com1 Billion+GoogleAgency Orquideajourneywithvision[.]com100 Million – 1 BillionGooglePubliftadorablefurnishing[.]com100 Million – 1 BillionGoogleredmas.com / Entravision Latamguerytech[.]online10 Million – 100 MillionGoogleGreedyGame Mediastreamix[.]tv10 Million – 100 MillionGoogleJoin Ads (joinads.me)techyclub[.]in10 Million – 100 MillionGoogleGreedyGame Medianewsworldcity[.]com10 Million – 100 MillionGoogleHafiz Maazvirvida[.]com1 Million – 10 MillionGoogleredmas.com / Entravision Latamsatishmoheyt[.]in1 Million – 10 MillionGoogle / RubiconVerizon Media Inc & Cyber Media (India) Ltd.pharmabeaver[.]com<1 MillionGoogleGlobalSNS Titans LTD

Conclusion

In this investigation, we uncovered a network of streaming websites and bogus domains created for the purpose of illicitly gaining revenue from advertisements by a threat actor we called DeepStreamer.

We were impressed by the technical complexity of the code and underlying infrastructure. The perpetrators took many steps to prevent reverse engineering and tracking metrics were not accurately representing the scale of the abuse at play.

We have notified Google and other industry partners and some actions have already taken place. Malwarebytes users are not participating in this invalid traffic scheme defrauding advertisers as we already block the fraudulent domains used.

The active domains used for laundering traffic, as well as some other key details related to projections we made are available in the companion data workbook.

Indicators of Compromise

Domains launching invisible iframes:

adorablefurnishing[.]ml

awscloudfront[.]ml

bigcache[.]ml

brcache201[.]ml

brient[.]ml

cache33[.]ml

cdncache[.]ml

compactembed[.]ml

dbcache[.]fun

dcache[.]ml

embed123[.]ml

fcache[.]ml

filecache[.]ml

financeirocartao[.]ml

fishuflatinned[.]ml

fullcdn[.]ga

harateness[.]ml

honessity[.]ml

hypercdn[.]ml

hypercdn3[.]ml

investwell[.]ml

jestick[.]ml

journeywithvision[.]ga

jscache[.]live

kbyte[.]ml

livrosdereceita[.]ml

maxcache[.]ml

mbyte[.]gq

mcdn[.]ga

megacdn[.]ml

megacdn[.]top

megasearch[.]gq

melhoresdomomento[.]ml

mikerin[.]ml

myplayer[.]ml

newsworldcity[.]ml

poptube[.]fun

primesinfo[.]ml

satishmoheyt[.]ml

supercache[.]top

tapcache[.]ml

tcache[.]ml

tecnowebclub[.]ga

toptube[.]fun

uwatchtube[.]ml

video[.]your-notice[.]fun

videocdn[.]fun

videosdahora[.]fun

whatsappvideos[.]ml

wispields[.]ml

wpcache[.]ml

youbesttube[.]gq

yourtube[.]fun

ytcache[.]fun

pharmabeaver[.]ml

pharmabeaver[.]com

virvida[.]com

guiadosabor[.]com

techyclub[.]in

journeywithvision[.]com

newsworldcity[.]com

mikerin[.]com

primesinfo[.]com

investwell[.]site

streamix[.]tv

guerytech[.]online

brandingjoy[.]in

aitechgear[.]in

adorablefurnishing[.]com

satishmoheyt[.]in

Money domains:

brandingjoy[.]in

aitechgear[.]in

guiadosabor[.]com

mikerin[.]com

adorablefurnishing[.]com

journeywithvision[.]com

satishmoheyt[.]in

primesinfo[.]com

techyclub[.]in

streamix[.]tv

newsworldcity[.]com

pharmabeaver[.]com

guerytech[.]online

virvida[.]com

Malicious JavaScript (iframe):

1701f50afde2db48d58e6789cfa810f2fdfae74ad0b5de983ace21beb9542a4b

2405699d9b90c36950440d8dd0335d8da1574abda11ae9900cfb31a68f80a864

344550fd85db609434f9eb6838642df1e0283ce43b23c02859cb593b7331ef70

5f8598bdf64f2f3c7a6b9134cd80bb44ac46f546d4047d796278437b5c3485b7

86c160f073347d3c810a824ba90de66105882195dd607175a32fa7adffe31163

98d2cd6e4f3a3aa3200d53ac09750d192ca6ba546aba09a935fe4f38d878bc4c

af70188588c75165f919c9c155827eb458f26aed5288ef52bab532dc7bd38015

b6845734220755e8a163d27d30fb0470ac0aa0d6e57e52af38fe59619d4dd1fb

bcb9ee387efcd936e2abd1ede483fda13cfe40320af9df6462398f329e6aae1e

fc2006c24b6153bfeafb3e9dc6e5ffc4d239c021f1e1777265569f672b4e184b

About Malwarebytes

Malwarebytes believes that when people and organizations are free from threats, they are free to thrive. Founded in 2008, Malwarebytes CEO Marcin Kleczynski had one mission: to rid the world of malware. Today, Malwarebytes’ award-winning endpoint protection, privacy and threat prevention solutions and its world-class team of threat researchers protect millions of individuals and thousands of businesses across the globe. 

The effectiveness and ease-of-use of Malwarebytes solutions are consistently recognized by independent third parties including MITRE Engenuity, MRG Effitas, AVLAB, AV-TEST (consumer and business), Gartner Peer Insights, G2 Crowd and CNET.

The company is headquartered in California with offices in Europe and Asia. For more information and career opportunities, visit https://www.malwarebytes.com.

About DeepSee

DeepSee uses highly sophisticated crawlers, combined with rigorous network analysis, in order to capture the behaviors websites present when visited by actual humans, and contextualize those behaviors within the graph of the internet.

DeepSee uses this data to arm advertising professionals with ground-truth signals about content appropriateness, ad-density, on-page technologies, backlink makeup, and more.

This dataset enables the sell-side to effectively & automatically moderate the quality of the inventory they offer, and empowers the buy-side to quickly generate robust blocking / targeting lists.

https://stg-deepsee-dev.kinsta.cloud/blog/deepstreamer-piracy-platforms-hide-lucrative-ad-fraud-operation

#adFraud #deepstreamer #embedded #Laundering #malwarebuytes #pin #Piracy

stg-deepsee-dev.kinsta.cloudblog@stg-deepsee-dev.kinsta.cloud
2022-08-10
Table of Contents

Introduction to Rewarded Traffic

In this article we provide clarity into the practice of “rewarded traffic,” or traffic generated by users who are compensated with in-game currency in exchange for opening ad-monetized publisher pages in a webview during an ad break. There is no real industry documentation about this format for creating web traffic; it could best be considered an abuse / misapplication of rewarded ad placements.

For Example, take this session we captured from the Subway Surfer app on Android:

An example of a session to Young Hollywood generated via rewarded advertisement

At ~:15 seconds you can see where a users is asked to choose between using in-game currency to re-spawn, or watching an ad. The “Ad” is actually a whole ad-monetized publisher page (younghollywood[.]com in this case) containing multiple display placements and a video ad. The video doesn’t load properly in this example due to the packet capture software we were using, but normally a video ad would be the first thing you see. After visiting 2 pages for ~15 seconds each, we can drop back into the game.

For years, millions of daily visits to ad-monetized publisher destinations have likely been generated this way. In these situations, advertisers have no idea that they are paying to reach a user who is being compensated to interact with the publisher’s content.

Despite a growing negative sentiment, and public comments by Google and The Trade Desk condemning incentivized traffic as invalid, rewarded traffic maintains a thin veneer of legitimacy due to the fact that users are paid using in-game currency, not gift cards or cash (despite in-game currency having a quantifiable cash value). To make matters worse, the practice remains largely unnoticed / unknown, because such traffic is hardly ever identified as rewarded/incentivized to the buyer.

Our hope is to make this practice more transparent to programmatic ad buyers, and inspire them to ask the questions that need to be asked in order to prevent serving ads to users without genuine intent in the content.

What is Incentivized Traffic?

Incentivized traffic comes from users who are paid to visit a certain web property. They may additionally be required to perform subsequent actions on the page to receive their rewards. Compensation usually comes in the form of points that can be redeemed for cash, prizes, or gift cards.

Is Incentivized Traffic Considered IVT?

The MRC does not consider incentivized traffic invalid, but there is growing sentiment by the largest DSPs that this traffic is invalid. A few months ago, we published research on incentivized traffic sourcing by one of the worlds largest publishers. At that time, both Google and The Trade Desk made fairly unambiguous statements about such traffic being considered invalid.

At the time, Google offered this on-the-record statement:

“Google considers invalid traffic to be ad traffic that does not represent genuine user intent or interest. This includes both incentivized traffic and traffic from pop-unders. Generally speaking, invalid traffic applies to any clicks or impressions that may artificially inflate an advertiser’s costs or a publisher’s earnings.[…]”

This is echoed in numerous places across their publisher policies, for example in the AdSense publisher policies:

https://support.google.com/adsense/answer/2660562?hl=en#zippy=%2Cusing-an-incentivized-traffic-source

Google’s specific mention of “genuine user intent or interest” is helpful when thinking about rewarded traffic as well, because that bar is clearly not met. As we saw in the video featured in the introduction, the user has no idea where they will be sent when they choose to watch an ad. It’s the same for users we showed to visit websites via Swagbucks in the past.

What Are Rewarded Ads?

Do We Really Need Another Term for “Incentivized?”

A quick check of your local thesaurus may reveal that “incentivized” and “rewarded” mean largely the same thing. Unfortunately, within the universe of AdTech jargon, the terms are unlikely to merge. It’s commonly understood that “incentivized” traffic is generated by users paid in something like cash; gift cards, paypal balance, things of that nature are the commonly assumed end-goal of a user generating incentivized traffic.

“Rewarded,” on the other hand, signals a user is compensated using items / currency unique to the game / app-environment they are in. These items generally can’t be turned into cash, though they can often be purchased with cash.

How Are Rewarded Ads Supposed to Look?

According to Google Ad Manager’s feature brief: “Ads that users can choose to view in exchange for an in-app reward — such as watching a video ad to get an extra life in a game […] are called ‘rewarded ads.'” This aligns with the commonly understood definition of a rewarded ad creative looks like: a video, or interactive game demo; certainly not an ad-monetized web page.

A good example is visible at the end of our video in the intro section. For example:

A normal rewarded ad experience.

Can Advertisers Identify Rewarded Inventory?

Rewarded video / interstitial ads actually can, and should, be identified using the “rwdd” attribute within the “Imp” object of a bidRequest. This attribute has appeared at least since version 2.6 of the Open Real-Time Bidding (ORTB) standard. For those not in the know, that’s a fancy way of saying that we have standards around rewarded ads, and how they should be identified to advertisers. Bid requests are how publishers announce their ad-inventory to interested buyers, and transmit various attributes of the user & the environment where an ad would be rendered.

However, this standard assumes a “normal” rewarded ad experience wherein the ad placement can be accurately attributed to the app a user has open. Advertisers buying inventory on web pages loaded within rewarded traffic placements generally have no idea the context in which the page is loaded; they would see it as a mobile web impressions, and the visit as organic.

Given what we know, there’s an uncomfortable question here that needs to be asked:

Is Generating Rewarded Traffic a Valid Use of Rewarded Ad Placements?

We put forth that it is not.

Can you think of any other case where an entire website would be considered a valid ad creative? If entire websites were valid ad-creatives, wouldn’t websites often be trafficked within display & video placements all over the internet in order to juice visitor numbers? Unfortunately, we live in a society, and that would not be considered acceptable by any major DSP.

It’s not even just websites that are the destination of rewarded traffic; we captured evidence that users are made to listen to audio advertisements within podcasts. This results in inflated podcast listener counts & audio impression volumes. For example, take this session from the Subway Surfer app on iOS:

Bloomberg/Businesweek podcast traffic generated via rewarded placement

Who Generates Rewarded Traffic?

One of the largest companies with skin in the game, and the one we’ve dug into for the purpose of this blog post, is the Jun Group. Since 2013 they’ve operated the HyperMX SDK, which is integrated within hundreds of the top apps across multiple marketplaces. HyperMX is a mediation platform for video ads, and it’s also used to deliver the rewarded traffic experiences we’ve shown examples of.

Which Apps Use the HyperMX SDK?

A sample of the Android apps which can be observed generating Jun Group rewarded traffic is available here. They also integrate with iOS apps, but it’s harder to detect the app in such cases due to differences in available measurement signals between iOS and Android. It’s likely the iOS counterparts of these apps also integrated the HyperMX SDK, and we can certainly confirm that for one in particular.

The most popular app by FAR, and the one we did most of our testing in, is the Subway Surfer app. This app has over a billion installs on Android alone.

In the following video, Jun group’s CEO explains how they’ve included their SDK in several hundred of the most popular apps worldwide in order to to reach hundreds of millions of people back in 2013 (certainly much higher now):

It’s not terribly important you watch the whole thing to understand this blog post, but we found the following quote to confirm our understanding of how the SDK is used:

“We can also bring people to any page from our placements. So, a user might have an opportunity to go see something that’s sitting on a major publisher site, and it might have a video on it, or it might just be a page.”

@1:24 in the above video

Basically, this goes to show they’re not terribly coy about what their tech does. We understand why they feel that way, there are no standards around this traffic, and hardly anyone knows how it’s truly delivered.

That bravado is further demonstrated in their case studies. For example:

This case study demonstrates the value prop to web publisher clients

Translated to a non-weaselese dialect of English: “the publisher oversold direct campaigns, and had no way to deliver the organic inventory to the advertisers. In order to satisfy the advertiser without any uncomfortable conversations, they paid for over 13 million inorganic visits per-day from users playing mobile games, who had no attachment to the content. The advertiser and the IVT tracking vendors, were none the wiser.”

This next one makes a lot more sense given the forced podcast visits from the example we shared:

This case study demonstrates the value prop to podcast creator clients

When we look at this, the words wiggle & dance around until they look more like: “we forced 6 million people to listen to a couple 15 second snippets of a podcast, and paid them 125 GuGaCoins for their troubles.”

Weak KPIs will always be exploited, and this traffic fills a hole.

Examining HyperMX SDK Signals From Our Packet Captures

Over the course of the past few months, we played Subway Surfer while capturing detailed network logs from our iOS and Android devices. Feel free to skip to the end if additional technical details don’t interest you.

There’s a lot we could say about the flow of traffic, but we want to keep it relatively concise. Folks who want the deepest dive possible can reach out to us on Linkedin or Twitter for more details. Suffice it to say, none of the bid requests we saw from the ad-monetized web pages in the video labeled the placements as rewarded, and why would they? Almost everyone in the supply chain believes this to be a normal mobile-web experience.

Particularly, if you are a DSP, SSP, or exchange, and you’re interested in learning how to identify this traffic within your logs, please do reach out. We can help you enact filters for such traffic using the data you have available.

Programmatic Display & Video Supported Web Page

This first example relates to the experience from the following video (shared at the top of the article as well):

2 Young Hollywood pages visited in a rewarded traffic placement

Before we are sent anywhere, HyperMX gathers some information relevant to the bid request. That info can be seen in the following request to https://marketplace-android-*.hyprmx.com/trackings/offerImpressionAttempt (my personal information removed and replace with “[REDACTED]”)

{"placement_id": 32910,"offer_identifier": "[REDACTED]","offer_type": "web_traffic","distributor_id": "1000214203","uid": "[REDACTED]","msdkv": 316,"sdk_version": "6.0.1","device_os_version": "8.1.0","device_type": "android","device_model": "[REDACTED]","device_fingerprint": "[REDACTED]","device_manufacturer": "[REDACTED]","device_brand": "[REDACTED]","device": "[REDACTED]","device_product": "[REDACTED]","device_width": 720,"device_height": 1404,"pxratio": 2,"connection_type": "WIFI","bundle_id": "com.kiloo.subwaysurf","bundle_version": "2.31.0","cleartext_traffic_permitted": true,"target_sdk_version": 30,"permissions": ["android.permission.WAKE_LOCK", "android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", "com.google.android.c2dm.permission.RECEIVE", "com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE", "com.google.android.gms.permission.AD_ID", "com.kiloo.subwaysurf.permission.C2D_MESSAGE", "android.permission.ACCESS_WIFI_STATE", "android.permission.RECEIVE_BOOT_COMPLETED", "android.permission.FOREGROUND_SERVICE", "com.android.vending.BILLING", "com.android.vending.CHECK_LICENSE", "android.permission.VIBRATE", "BIND_GET_INSTALL_REFERRER_SERVICE"],"user_permissions": {"camera_permission": "denied","calendar_permission": "denied","microphone_permission": "denied"},"gaid": "[REDACTED]","ad_id_opted_out": false,"persistent_id": "[REDACTED]","mobile_js_version": 120}

In this case, Jun Group has an interested client looking for “web_traffic”, and we get a correlated response from the https://marketplace-android-*.hyprmx.com/embedded_offers/player endpoint:

{"offer_skin_path": "boomerang_popup_explore","tracking_view_html": "","tracking_impression_html": "","quarter_1_tracking_html": "","quarter_2_tracking_html": "","quarter_3_tracking_html": "","quarter_4_tracking_html": "","ivt_tracking_html": "https://pixel.adsafeprotected.com/jload?anId=929070\u0026advId=JunGroup\u0026campId=\u0026pubId=1000214203\u0026chanId=\u0026placementId=175484\u0026adsafe_par\u0026uId=[REDACTED]\u0026impID=","viewing_id": "[REDACTED]","token": "[REDACTED]","non_closable_vast": false,"svc_clickthrough": false,"is_mraid": "false","enable_custom_webview": true,"skip_thank_you": true,"browser_family": "Chrome","impression_attempt_complete": "","third_party_tracking_provider": "IAS","page_load_timeout": 8,"urls": ["https://younghollywood.com/videos/tvfilm/up-close/high-school-musical-the-musical--the-series-cast-play-truth-or-dare.html?utm_source=jun\u0026utm_medium=cpc\u0026utm_campaign=JUN15\u0026wtu_id_h=[REDACTED]", "https://younghollywood.com/videos/lifestyle/star-secrets/how-to-get-into-the-supercars-club-arabia.html?utm_source=jun\u0026utm_medium=cpc\u0026utm_campaign=JUN15\u0026wtu_id_h=[REDACTED]"],"page_load_js": {"js": ["function ias() {var po = document.createElement(\"script\"); po.type = \"text/javascript\"; po.async = true;po.src = \"https://pixel.adsafeprotected.com/jload?anId=929070\u0026advId=JunGroup\u0026campId=\u0026pubId=1000214203\u0026chanId=\u0026placementId=175484\u0026adsafe_par\u0026uId=8780771519\u0026impID=\";var s = document.getElementsByTagName(\"script\")[0]; s.parentNode.insertBefore(po, s);};ias();", ""],"map": {"0": 0,"1": 1}},"visit_length": 15,"maximum_page_load_wait_time_in_seconds": 4,"webtraffic_proscenium_delay": 0.0,"is_boomeo_web_start": "false","short_first_step": false,"is_user_choice": "false","short_step_length": 5,"hide_referrer_url": "true","reward_id": 0,"reward_quantity": 1,"reward_text": "1 reward","reward_token": "[REDACTED]","reward_cost": 1.0e-05,"bid": "0.009428","max_bid": "0.00952","bid_throttle": 15.0,"step_count": 2,"reward_timestamp": "1648504312","open_measurement": {"partner_name": "Jungroup","client_version": "1.3.15-iab2507","api_version": "android-6.0.1-316"},"player_application_origin": "https://marketplace-android-b316.hyprmx.com","cec_url": "https://vast-proxy.hyprmx.com/client_error_captures","redirection_url": "https://static.hyprmx.com/static_skins/boomerang_popup_explore/index.html?device_type=android\u0026distributor_id=1000214203\u0026msdkv=316\u0026offer=web_traffic-a22d044466101ca5d63207773802226e\u0026placement_id=32910\u0026trampoline=[REDACTED]","uid": "[REDACTED]","distributor_id": "1000214203","offer": "web_traffic-a22d044466101ca5d63207773802226e","msdkv": 316,"device_type": "android","placement_id": 32910}

There are some interesting things we can see here:

  • This placement is being tracked by IAS, their code plainly viewable in the “ivt_tracking_html” field
  • The urls we will be sent to are in an array called “urls”
    • https://younghollywood.com/videos/tvfilm/up-close/high-school-musical-the-musical--the-series-cast-play-truth-or-dare.html?utm_source=jun\u0026utm_medium=cpc\u0026utm_campaign=JUN15\u0026wtu_id_h=[REDACTED]
    • https://younghollywood.com/videos/lifestyle/star-secrets/how-to-get-into-the-supercars-club-arabia.html?utm_source=jun\u0026utm_medium=cpc\u0026utm_campaign=JUN15\u0026wtu_id_h=[REDACTED]
  • For each page, the “visit_length” will be 15 seconds
  • “hide_referrer_url” is set to “true”; one can imagine what that might signal

Next, the first page loads as you can see in the video. There are many bid requests that go out, from many major SSPs and exchanges, and none of them label the inventory as rewarded or otherwise originating from within an app.

If you are a DSP or SSP, and you’re interested in learning how to identify this traffic within your logs, please do reach out. We can help you enact filters for such traffic using the data you have available.

Audio-Ad Supported Podcast

Loading a full 30+ minute podcast in a rewarded ad placement seems even more egregious than loading a web page. At least with the web page, it’s conceivable a user might accidentally scroll through it in 15 seconds.

In the case of a podcast, the user has no real hope of engaging with the content in 15 seconds; it seems rather blatantly geared towards creating advertising events. Do they really expect people to stop playing a game, and listen to a 30 minute podcast???

In this example, we see the following request to endpoint https://live.hyprmx.com/trackings/offerImpressionAttempt (now using an iPhone):

{"placement_id": 34115,"offer_identifier": "[REDACTED]","offer_type": "web_traffic","sdk_version": "2.36.0","bundle_id": "com.kiloo.subwaysurfers","ad_id_opted_out": true,"msdkv": 225,"supported_interface_settings": ["UIInterfaceOrientationPortrait"],"pxratio": 2,"device_os_version": "15.5","ats_settings": {"NSAllowsArbitraryLoads": true,"NSAllowsLocalNetworking": true,"NSAllowsArbitraryLoadsInWebContent": true,"NSAllowsArbitraryLoadsForMedia": true},"screen_traits": {"horizontalSizeClass": "compact","verticalSizeClass": "regular","userInterfaceLayoutDirection": "LTR","accessibilityContrast": "normal","userInterfaceIdiom": "iPhone","userInterfaceStyle": "dark","userInterfaceLevel": "base","displayScale": 2},"connection_type": "WIFI","maccatalyst": false,"identifier_for_vendor": "[REDACTED]","ios_app_on_mac": false,"device_width": 750,"carrier_data": {"0000000100000002": {"allows_voip": true},"0000000100000001": {"allows_voip": true,"mobile_network_code": "260","mobile_country_code": "310","carrier_name": "T-Mobile","cellular_radio_type": "CTRadioAccessTechnologyLTE"}},"xcode_version": "13A1030d","supports_multiple_scenes": false,"uid": "[REDACTED]","hypr_modules": {"HYPRPermissions": "5"},"permissions": ["NSCameraUsageDescription", "NSUserTrackingUsageDescription", "NSMotionUsageDescription", "NSPhotoLibraryAddUsageDescription", "NSCalendarsUsageDescription", "NSPhotoLibraryUsageDescription"],"distributor_id": "1000214202","device_model": "iPhone12,8","user_permissions": {"microphone_permission": "not_determined","calendar_permission": "not_determined","camera_permission": "not_determined"},"bundle_version": "2.36.0","framework_type": "core_framework","device_type": "iPhone","persistent_id": "00000000-0000-0000-0000-000000000000","device_height": 1334,"mobile_js_version": "137"}

We get the following correlated response from the https://live.hyprmx.com/embedded_offers/player endpoint:

{"offer_skin_path": "boomerang_popup_explore","tracking_view_html": "","tracking_impression_html": "","quarter_1_tracking_html": "","quarter_2_tracking_html": "","quarter_3_tracking_html": "","quarter_4_tracking_html": "","ivt_tracking_html": "https://pixel.adsafeprotected.com/jload?anId=929070\u0026advId=JunGroup\u0026campId=\u0026pubId=1000214202\u0026chanId=\u0026placementId=191942\u0026adsafe_par\u0026uId=[REDACTED]\u0026impID=","viewing_id": "9249948818","token": "[REDACTED]","coppa": 1,"non_closable_vast": false,"svc_clickthrough": false,"is_mraid": "false","enable_custom_webview": true,"skip_thank_you": true,"browser_family": "Safari","impression_attempt_complete": "","third_party_tracking_provider": "IAS","page_load_timeout": 8,"urls": ["https://www.iheart.com/podcast/256-bloomberg-surveillance-30972795/episode/surveillance-market-timing-with-bitterly-podcast-98773848/?embed=true\u0026sc=widget\u0026pname=JunGroup\u0026campid=Bloomberg\u0026keyid=PageView\u0026cid=1000214202\u0026wtu_id_h=[REDACTED]", "https://www.iheart.com/podcast/256-bloomberg-surveillance-30972795/episode/surveillance-recession-chances-with-hatzius-podcast-98692521/?embed=true\u0026sc=widget\u0026pname=JunGroup\u0026campid=Bloomberg\u0026keyid=PageView\u0026cid=1000214202\u0026wtu_id_h=[REDACTED]"],"page_load_js": {"js": ["var _jgPlayButton=undefined;var jgPlayButton=function(){var t=document.querySelectorAll(\"button\");if(typeof _jgPlayButton===\"undefined\"){for(var e=0;e\u003ct.length;e++){if(typeof _jgPlayButton===\"undefined\"\u0026\u0026t[e].dataset[\"test\"]===\"play-button\"){_jgPlayButton=t[e];break}}}return _jgPlayButton};var jgIsPodcastPlaying=function(){var t=jgPlayButton();return typeof t!==\"undefined\"\u0026\u0026(t.getAttribute(\"aria-label\")===\"Pause\"||[\"playing\",\"buffering\"].includes(t.dataset[\"testState\"]))};var jgPlayVideo=function(){if(jgIsPodcastPlaying()){clearInterval(jgInterval)}else{var t=jgPlayButton();if(typeof t!==\"undefined\"){t.click()}}};var jgInterval=setInterval(jgPlayVideo,500);function ias() {var po = document.createElement(\"script\"); po.type = \"text/javascript\"; po.async = true;po.src = \"https://pixel.adsafeprotected.com/jload?anId=929070\u0026advId=JunGroup\u0026campId=\u0026pubId=1000214202\u0026chanId=\u0026placementId=191942\u0026adsafe_par\u0026uId=9249948818\u0026impID=\";var s = document.getElementsByTagName(\"script\")[0]; s.parentNode.insertBefore(po, s);};ias();", "var _jgPlayButton=undefined;var jgPlayButton=function(){var t=document.querySelectorAll(\"button\");if(typeof _jgPlayButton===\"undefined\"){for(var e=0;e\u003ct.length;e++){if(typeof _jgPlayButton===\"undefined\"\u0026\u0026t[e].dataset[\"test\"]===\"play-button\"){_jgPlayButton=t[e];break}}}return _jgPlayButton};var jgIsPodcastPlaying=function(){var t=jgPlayButton();return typeof t!==\"undefined\"\u0026\u0026(t.getAttribute(\"aria-label\")===\"Pause\"||[\"playing\",\"buffering\"].includes(t.dataset[\"testState\"]))};var jgPlayVideo=function(){if(jgIsPodcastPlaying()){clearInterval(jgInterval)}else{var t=jgPlayButton();if(typeof t!==\"undefined\"){t.click()}}};var jgInterval=setInterval(jgPlayVideo,500);"],"map": {"0": 0,"1": 1}},"visit_length": 10,"maximum_page_load_wait_time_in_seconds": "4","webtraffic_proscenium_delay": 0.0,"is_boomeo_web_start": "false","short_first_step": false,"is_user_choice": "false","short_step_length": 5,"hide_referrer_url": "true","reward_id": 0,"reward_quantity": 1,"reward_text": "1 reward","reward_token": "[REDACTED]","reward_cost": 1.0e-05,"bid": "0.013518","max_bid": 0.0153,"bid_throttle": 1.0,"step_count": 2,"reward_timestamp": "1656627095","open_measurement": {"partner_name": "Jungroup","client_version": "1.3.15-iab2507","api_version": "ios-2.36.0-225"},"player_application_origin": "https://live.hyprmx.com","cec_url": "https://vast-proxy.hyprmx.com/client_error_captures","redirection_url": "https://static.hyprmx.com/static_skins/boomerang_popup_explore/index.html?device_type=iPhone\u0026distributor_id=1000214202\u0026msdkv=225\u0026offer=web_traffic-d0b3a41964ce379a7b6fd732749d4584\u0026placement_id=34115\u0026trampoline=[REDACTED]","uid": "[REDACTED]","distributor_id": "1000214202","offer": "web_traffic-d0b3a41964ce379a7b6fd732749d4584","msdkv": 225,"device_type": "iPhone","placement_id": 34115}

This time we can see the “urls” array contains podcast embeds from iHeart media.

  • https://www.iheart.com/podcast/256-bloomberg-surveillance-30972795/episode/surveillance-market-timing-with-bitterly-podcast-98773848/?embed=true\u0026sc=widget\u0026pname=JunGroup\u0026campid=Bloomberg\u0026keyid=PageView\u0026cid=1000214202\u0026wtu_id_h=[REDACTED]
  • https://www.iheart.com/podcast/256-bloomberg-surveillance-30972795/episode/surveillance-recession-chances-with-hatzius-podcast-98692521/?embed=true\u0026sc=widget\u0026pname=JunGroup\u0026campid=Bloomberg\u0026keyid=PageView\u0026cid=1000214202\u0026wtu_id_h=[REDACTED]

We can additionally see tracking tech from IAS applied to this transaction.

The experience is plainly visible in the video; the podcast auto plays, and the user is dropped immediately into an advertisement. Audio ads in this case are by Triton Digital, recently acquired by iHeart media.

Conclusion

Rewarded traffic exploits the lack of MRC standards around traffic sourcing, and the lack of policing around Rewarded ad formats in general. As an industry, we need to decide if we want to allow this precedent that an entire ad-monetized webpage is a valid creative. It would be insane to attempt that in any other environment outside of incentivized traffic marketplaces, so why is it accepted for rewarded ads?

Though it may be hard to identify, we have developed several ways to flag such traffic. We had to take multiple approaches given the differences in what certain supply chain participants are able to see in the bidstream.

Are we totally off base? Do you have a success story you’d like to share from your rewarded traffic campaign? A spectacular failure? Reach out to share it with us on Linkedin or Twitter.

https://stg-deepsee-dev.kinsta.cloud/blog/rewarded-traffic-incentivized-traffic-in-a-top-hat

#incentivizedTraffic #paidTraffic #pin #rewardedTraffic

Rewarded Traffic - Incentivized Traffic in a Top Hat

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst