Jedną z najłatwiejszych metod wyłączania reklam w systemie Android jest aplikacja AdFree. Bazuje ona na podmianie pliku hosts znajdującym się w /system/etc/hosts. Co w przypadku jeśli aplikacja wykrywa tą blokadę? W dalszej części pokaże na to sposób.
Z uwagi na popularność tego rozwiązania, wielu programistów analizuje plik hosts pod kątem występowania domen serwisów reklamowych z których korzystają. Jeśli takowy tam znajdą blokują swój program.
Jeśli mamy aplikacje która działa w ten sposób a jednak chcemy z niej korzystać nie wyświetlając przy tym reklam proponuje poniższe rozwiązanie (konieczność posiadania dostępu do uprawnień root’a):
- Instalujemy aplikację DroidWall czyli Firewall na Androida
- Zaznaczam dwa pierwsze kwadraty (Any application) dla WiFi/3G i klikamy opcje ==> Firewall enabled w celu uruchomienia firewalla
- Klikamy opcje ==> więcej ==> set custom script
- Wklejamy w pierwsze pole kod:
$IPTABLES -A "droidwall" --destination "63.215.202.6" -j DROP $IPTABLES -A "droidwall" --destination "165.193.245.52" -j DROP $IPTABLES -A "droidwall" --destination "165.193.245.178" -j DROP $IPTABLES -A "droidwall" --destination "70.32.132.54" -j DROP $IPTABLES -A "droidwall" --destination "165.193.245.54" -j DROP $IPTABLES -A "droidwall" --destination "173.194.34.57" -j DROP $IPTABLES -A "droidwall" --destination "173.194.34.58" -j DROP $IPTABLES -A "droidwall" --destination "209.85.148.154" -j DROP $IPTABLES -A "droidwall" --destination "209.85.148.155" -j DROP $IPTABLES -A "droidwall" --destination "209.85.148.156" -j DROP $IPTABLES -A "droidwall" --destination "209.85.148.157" -j DROP $IPTABLES -A "droidwall" --destination "173.194.70.154" -j DROP $IPTABLES -A "droidwall" --destination "173.194.70.155" -j DROP $IPTABLES -A "droidwall" --destination "173.194.70.156" -j DROP $IPTABLES -A "droidwall" --destination "173.194.70.157" -j DROP $IPTABLES -A "droidwall" --destination "173.194.35.153" -j DROP $IPTABLES -A "droidwall" --destination "173.194.35.141" -j DROP $IPTABLES -A "droidwall" --destination "173.194.35.154" -j DROP
- Wstecz ==> Apply rules
Tym sposobem tworzymy reguły IPTABLES dla wszystkich połączeń z adresami IP najpopularniejszych reklamodawców.
Oczywiście nie są to wszystkie adresy. Tylko przeanalizowane przeze mnie najpopularniejsze reklamowe giganty.
Jeśli nadal w aplikacji wyświetlają nam się reklamy, patrzymy przez jakiego reklamodawce są dostarczane. Dla przykładu może być to AdMob, szukamy w sieci adresu z jakiego pobierane są reklamy AdMob, jest to adres r.admob.com.
W wierszu poleceń wpisujemy komendę:
nslookup r.admob.com
Wyświetlone zostaną adresy IP danej domeny. Dopisujemy je wtedy analogicznie do IPTABLES.
Proszę jednak pamiętać, że usuwanie reklam godzi w prawo autorów aplikacji i zmniejsza ich zysk. Nie jest to jednak modyfikacja oprogramowania a jedynie środowiska w jakim pracują.
P.S. Aktualizacja 28.09.2012
Jeśli nie wiemy dokładnie z jakiego usługodawcy reklam aplikacja korzysta lub chcemy poznać dokładne adresy IP z którymi się łączy możemy skorzystać ze sniffera:
- Pobieramy aplikację Shark for Root (sniffer na androida)
- Blokujemy Droidwallem wszystkie aplikacje, tzn na białą listę wstawiamy tylko tą którą sprawdzamy
- Odpalamy Shark for Root i klikamy Start, nie zamykamy Shark for Root (przycisk „domek”)
- Uruchamiamy aplikację którą chcemy sprawdzić i czekamy na załadowanie reklamy, gdy się wczyta zamykamy ją
- Przechodzimy do Shark for Root i klikamy Stop, zapisaliśmy tym sposobem zrzut bazujący na tcpdump, tzn plik o rozszerzeniu .pcap (np. shark_dump_1348777564.pcap)
- Przesyłamy ww plik .pcap na komputer
- Uruchamiamy Wireshark w celu przeanalizowania zrzutu
- Wczytujemy do Wireshark’a plik .pcap
- Szukamy adresów IP reklamodawny
- Dodajemy je do reguł $IPTABLES przedstawionych wyżej.