AdForm Micro API

Trackovací knihovny jsou vždy plné balastu, šesti půlek fallbacků a dalších krámů. Jako třeba potenciálních backdoorů (iframe, JSONP), document.write kravin atd. No a pokud je vám jedno, že nějaký vrak s IE 4 na tom vašem scriptu zahyne, pak si ušetřete 40kB a napište si vlastní mikro API, které je z velké části kompatibilní s tou původní knihovnou.

old-mine-shaft

Nejdříve analyzovat

Nejdřív přes Charlese zjistíme, kam data tečou.

charles_adf_addr

https://track.adform.net/Serving/TrackPoint/….

A jaká data tečou.

charles_adf_payload

Koukneme se na vstupy od mediálky.

_adf.conf = {
	pm: 23547865,
    divider: encodeURIComponent('|'),
    pagename: encodeURIComponent('ceskytunak.cz|velka_ryba')		   
};
window._adftrack = _adf.conf;

Pak už si jen napíšeme scriptík.

// Adform Micro API v0.1
var AdFormMicroAPI = function(caller){
	try{
		function merge(a,b){var c={};for(var d in a)c[d]=a[d];for(var d in b)c[d]=b[d];return c};
		// Turn object into URL search string
		function serialize(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b.join("&")};
		// Create image as a transport method
		function createImage(a){var b=new Image;b.src=a};
		// Get Random ID
		function getRandomInt(a,b){return Math.floor(Math.random()*(b-a+1))+a};
		// Get AdForm custom String1
		function getBrowserInfo(){function d(a){var b;if(a)b=a.width+"x"+a.height;else if(!a&&window.java)try{var c=window.java.awt.Toolkit.getDefaultToolkit().getScreenSize();b=c.width+"x"+c.height}catch(a){}return b}var a=window,b=a.screen,c=a.navigator,e=c&&c.language?c.language:c&&c.browserLanguage?c.browserLanguage:"";return (e+"|"+e+"|"+d(b)+"|"+(b?b.colorDepth:""))};
		// Constants for ADF
		var signals = {	 
		  "ord": getRandomInt(10000000000,999999999999),
		  "ADFtpmode" : "2",
		  "loc" : caller || window.location.href,
		  "Set1" : getBrowserInfo()
		};
	}
	catch(e){}
	// Request server for image
	this.track = function(custom_data){
		var c = "https://track.adform.net/Serving/TrackPoint/";
		if(custom_data){signals = merge(signals,custom_data)}else{console.log("AdForm Custom Tracker called with incorrect parameters");return !1;}
		var src = c+"?"+serialize(signals);
		createImage(src);
	}
};

// Create new Micro tracker
var AdFormMicroTracker = new AdFormMicroAPI("https://ceskytunak.cz/fakeurl/");

AdFormMicroTracker.track({
   // to co vám dodá mediálka
});

Tradá a máme JavaScriptově programovatelný pixel pro AdForm.

Co mě pobavilo?

Když se v Charlesovi podíváte na parametr Set1, uvidíte string cs|cs|1945×666. Člověk oddtuší, že cs bude asi něco s češtinou. Ale proč jsou tam dvě cs|cs? Moc se mi nechtělo to zkoumat, tak jsem to do scriptu nafakoval oboje stejné, řízené jednou funkcí, stejně to nikdo nebude moc řešit.

Pak jsem se v tom ale začal vrtat a měl jsem hypotézu, že jedno je jazyk OS, druhé třeba klávesnice, tak jsem si deobfuscoval originální knihovnu a ti gangsteři od AdFormu to tam mají úplně stejně natvrdo, jak jsem se na to vyprdnul já. Předpokládám, že u nich je to tam z důvodu zpětné kompoatibility s verzí AdForm trackeru z doby nebreč, ale pobavilo mě to:-)

Disclamer

Jestli se bojíte, rozhodně to doma nezkoušejte. O AdFormu vím zhola ***, takže žádná garance že to bude dělat to, co má. Ale na stranu druhou, AdForm běžně vybavuje své scripty doplňkovou části NOSCRIPT, která vypadá třeba takto:

<img src="https://track.adform.net/Serving/TrackPoint/?pm=23789855&ADFPageName=tunak_con_carne&ADFdivider=|" width="1" height="1" alt="" />

Takže jestli jejich servery zchroupou takto tupý signál, tak z toho mého musí zpívat imperiální hymnu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..