ABP X Files e Harmful WebSites: ecco come nascono

| |

Gli utilizzatori di X Files e degli altri due moduli NoFacebookAds (NFA) e Harmful WebSites (HWS) diventano ogni giorno sempre più. Complice (fuori di dubbio) la sempre più forte necessità di non essere assaliti da pubblicità che troppo spesso prendono il posto dei contenuti o interi siti web compromessi che vanno così a mettere a rischio l’incolumità della propria postazione di lavoro, il mio “lavoro” diventa così sempre più delicato, bisogna fare attenzione ad ogni minimo dettaglio e cercare di pensare che qualsiasi modifica non andrà ad impattare solo le mie macchine ma anche quelle di centinaia di altre persone in giro per il globo. Si spiegano così le mie risposte (via mail o ai ticket aperti o ancora nei report segnalati sul sito ufficiale dell’estensione) ad alcune richieste troppo specifiche e troppo poco condivisibili, non ve la prendete!

ABP X Files e Harmful WebSites: ecco come nascono 1

Vi siete però mai chiesti come nascono davvero X Files e Harmful WebSites? Contrariamente a NoFacebookAds che contiene solo poche righe specifiche per il noto social network sulla quale mi basta quindi mettere mano “a cuore aperto“, entrambe le altre liste vengono rese pubblicamente accessibili tramite gli URL di sottoscrizione che tutti utilizzano solo in un “secondo momento“. I filtri vengono scritti o raccolti, verificati, quindi esportati e poi lavorati da uno script in VBScript. Voglio condividere con voi questo lavoro, non si sa mai, potrebbero spuntare fuori nuove idee, correzioni o miglioramenti :-)

Harmful WebSites

ABP X Files e Harmful WebSites: ecco come nascono 2E’ quella più semplice. Harmful WebSites nasce infatti dalla ben più corposa e collaborativa lista messa a disposizione da MalwareDomainList come vi avevo spiegato in un precedente articolo e va solo lavorata in quanto scaricabile ma non compatibile nativamente con Adblock. Parte tutto da questo file: malwaredomainlist.com/hostslist/hosts.txt, nel quale però dovranno sparire i 127.0.0.1 e le informazioni di testa. Questo perché si tratta di una lista da sostituire o integrare al file hosts di Windows, non studiata per un’estensione di un browser, non per il momento almeno ;-)

Ecco quindi che ho fatto intervenire “qualche” riga di codice VBScript che possa fare questo lavoro in completa autonomia (previo doppio clic ovviamente), da qui in poi l’articolo prende una piega più tecnica, forse meno adatta ai semplici curiosi.

' ABP X FILES HWS Maker 0.4 rev1
' GSolone - Ultima modifica: 09/01/17
'
' Lo script scarica la lista filtri più aggiornata disponibile su MalwareDomainList.com e la modifica per renderla integrabile all'interno di una lista filtri standard per Adblock Plus e compatibili, a prescindere dal browser utilizzato.
'
' STORICO MODIFICHE
' 0.4 rev1- ho aggiunto un riferimento allo spazio hosting GitHub (per far notare all'utente che sta utilizzando il giusto repository). Aggiornato anche versione di Adblock richiesta (2.8).
' 0.4 - ho modificato la posizione del file di lista (si passa su Github!).
' 0.3 - integrato il nuovo blocco che toglie dalla lista alcuni siti web non più infetti (Find and remove Healthy Websites), segnalati tramite ticket su noads.it / UserVoice e verificati. Viene prevista inoltre la possibilità di collegamento tramite Proxy (Connection through proxy) utilizzando le credenziali dell'utente corrente.
' 0.2 - modificato l'URL di riferimento della distribuzione lista, si comincia a lavorare su noads.it
' 0.1 rev3 - corretto il problema dell'ultima linea con il solo "##HTML *" che bloccava la navigazione su ogni sito web. Rimangono due righe vuote a termine file ma non è un problema. Corretto un problema di formattazione nel titolo della lista.
'
' Sviluppo: Giovanni F. -Gioxx- Solone (dev@gfsolone.com)
' Testato su: Windows 7 Pro Sp1
'
' LISTA HOST UTILIZZATA
HTTPDownload "http://www.malwaredomainlist.com/hostslist/hosts.txt"
' Non toccare nulla oltre questa riga!
' DO NOT touch anything below this line!
Sub HTTPDownload(myURL)
' Variables and constants definition
Dim i, objFile, objFSO, objHTTP, strFile, strMsg
Dim objWMIService, objProcess, colProcess
Const ForReading = 1, ForWriting = 2, ForAppending = 8
' Date and time
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objItem in colItems
dtmLocalTime = objItem.LocalDateTime
dtmMonth = Mid(dtmLocalTime, 5, 2)
dtmDay = Mid(dtmLocalTime, 7, 2)
dtmYear = Left(dtmLocalTime, 4)
dtmHour = Mid(dtmLocalTime, 9, 2)
dtmMinutes = Mid(dtmLocalTime, 11, 2)
dtmSeconds = Mid(dtmLocalTime, 13, 2)
Next
update = dtmYear & dtmMonth & dtmDay & dtmHour & dtmMinutes
lastmodified = dtmDay & "-" & dtmMonth & "-" & dtmYear
' debug Wscript.Echo update
' Create a File System Object
Set objFSO = CreateObject( "Scripting.FileSystemObject" )
' Check if the specified target file or folder exists, and build the fully qualified path of the target file
Set objShell = CreateObject("Wscript.Shell")
Set objProcess = objShell.Environment("Process")
Set WshShell = WScript.CreateObject("Wscript.Shell")
strApplicationData = WshShell.ExpandEnvironmentStrings("%TEMP%")
'FILE DEST. - Sblocca la stringa qui di seguito per scrivere nella cartella temporanea quando necessario
' e commenta quella successiva che scrive invece su Dropbox!
'strFile = strApplicationData + "\hws_xfiles.txt"
strFile = "C:\GitHub\xfiles\siteblock.txt"
'Nuova posizione dal 12/2016, era strFile = "C:\Dropbox\Public\abpxfiles\siteblock.txt"
' Create an HTTP object
Set objHTTP = CreateObject( "WinHttp.WinHttpRequest.5.1" )
' Connection through proxy (remove comment in the line below)
'objHttp.setProxy 2, "proxy.contoso.com:8080", ""
' Download from the specified URL
objHTTP.Open "GET", myURL, False
objHTTP.Send
if LenB( objHTTP.ResponseBody ) < 500 Then
MsgBox "Errore durante il download della lista host ..." & chr(13) & "Lista non trovata o sito web momentaneamente non funzionante." & chr(13) & "Lista non creata"
Exit Sub
End If
' Create or open the target file
Set objFile = objFSO.OpenTextFile( strFile, ForWriting, True )
' Write the downloaded byte stream to the target file
For i = 1 To LenB( objHTTP.ResponseBody )
objFile.Write Chr( AscB( MidB( objHTTP.ResponseBody, i, 1 ) ) )
Next
' Close the target file
objFile.Close()
' Remove line 1 to 6, header of MalwareDomainList.com Hosts List
For i = 1 To 6
DeleteLine strFile, "", 1, 0
Next
' Find and remove 127.0.0.1 from each line
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "127.0.0.1 ", "")
Set objFile = objFSO.OpenTextFile(strFile, ForWriting)
objFile.WriteLine strNewText
objFile.Close
' Find and remove Healthy Websites
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "www.angolotesti.it", "")
strNewText = Replace(strNewText, "www.secondome.com", "")
strNewText = Replace(strNewText, "ms11.net", "")
Set objFile = objFSO.OpenTextFile(strFile, ForWriting)
objFile.WriteLine strNewText
objFile.Close
' Remove empty lines at the end of file!
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.Readline
strLine = Trim(strLine)
If Len(strLine) > 0 Then
strNewContents = strNewContents & strLine & vbCrLf
End If
Loop
objFile.Close
Set objFile = objFSO.OpenTextFile(strFile, ForWriting)
objFile.Write strNewContents
objFile.Close
' Append "##HTML *" for each line
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, ForReading, True)
Set tmpFile= objFSO.OpenTextFile(strFile & ".tmp", ForWriting, True)
Do While Not objFile.AtEndofStream
url = objFile.ReadLine
url = url & "##HTML *"
tmpFile.WriteLine url
Loop
objFile.Close
tmpFile.Close
objFSO.DeleteFile(strFile)
objFSO.MoveFile strFile&".tmp", strFile
' Add list header (ABP X Files HWS)
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
strContents = objFile.ReadAll
objFile.Close
strFirstLine = "[Adblock Plus 2.8]" & vbCrLf & "! Version: " & update & vbCrLf & "! Title: X Files: HWS Harmful WebSites" & vbCrLf & "! Harmful WebSites blocca siti web potenzialmente dannosi per la vostra navigazione" & vbCrLf & "! Last modified: " & lastmodified & vbCrLf & "! Expires: 3 days" & vbCrLf & "! Homepage: http://noads.it" & vbCrLf & "! Home: http://noads.it" & vbCrLf & "! Blog: http://gioxx.org/tag/x-files" & vbCrLf & "! Hosting lista: GitHub.com" & vbCrLf & "! "
strNewContents = strFirstLine & vbCrLf & strContents
Set objFile = objFSO.OpenTextFile(strFile, ForWriting)
objFile.WriteLine strNewContents
objFile.Close
' Open the file (verification process)
CreateObject("WScript.Shell").Run strFile
End Sub
Sub Run(ByVal sFile)
' Variables definition
Dim shell
Set shell = CreateObject( "WScript.Shell" )
shell.Run Chr(34) & sFile & Chr(34), 1, false
Set shell = Nothing
End Sub
Sub DeleteLine(strFile, strKey, LineNumber, CheckCase)
'Use strFile = "c:\file.txt" (Full path to text file)
'Use strKey = "John Doe" (Lines containing this text string to be deleted)
'Use strKey = "" (To not use keyword search)
'Use LineNumber = "1" (Enter specific line number to delete)
'Use LineNumber = "0" (To ignore line numbers)
'Use CheckCase = "1" (For case sensitive search )
'Use CheckCase = "0" (To ignore upper/lower case characters)
Const ForReading=1:Const ForWriting=2
Dim objFSO,objFile,Count,strLine,strLineCase,strNewFile
Set objFSO=CreateObject("Scripting.FileSystemObject")
Set objFile=objFSO.OpenTextFile(strFile,ForReading)
Do Until objFile.AtEndOfStream
strLine=objFile.Readline
If CheckCase=0 then strLineCase=ucase(strLine):strKey=ucase(strKey)
If LineNumber=objFile.Line-1 or LineNumber=0 then
If instr(strLine,strKey) or instr(strLineCase,strkey) or strKey="" then
strNewFile=strNewFile
Else
strNewFile=strNewFile&strLine&vbcrlf
End If
Else
strNewFile=strNewFile&strLine&vbcrlf
End If
Loop
objFile.Close
Set objFSO=CreateObject("Scripting.FileSystemObject")
Set objFile=objFSO.OpenTextFile(strFile,ForWriting)
objFile.Write strNewFile
objFile.Close
End Sub
view raw HWS-Maker.vbs hosted with ❤ by GitHub

Righe di debug sparse un po’ ovunque, sicuramente una marea di errori dovuti alla mia inesperienza e auto-formazione sulla programmazione in VBScript e (quasi certamente) molteplici modi di farlo con la metà delle righe di codice, eppure lo script che vedete qui di sopra si occupa ad oggi di scaricare la lista filtri da MalwareDomainList, rimuovere tutta la prima parte di informazioni, pulire ogni riga dal suo 127.0.0.1 e inserire i dettagli di aggiornamento, scadenza e non solo, quindi caricare nella cartella pubblica del mio Dropbox la nuova versione della lista finalmente compatibile che tutti voi potrete scaricare (o lasciar scaricare a Adblock) senza il minimo sforzo :-)

Giusto per farvi sentire un pelo più sicuri: alla fine del procedimento un “CreateObject(“WScript.Shell”).Run strFile” avvierà Notepad++ sul mio PC per verificare che tutto sia a posto e che non vi stia dando in pasto un file non corretto!

Inutile dire che avendo dichiarato delle cartelle ben precise al suo interno, se voleste riutilizzare questo script per qualche vostro particolare interesse dovrete fare attenzione e andare a modificare quelle righe per evitare di mandarlo in errore e non ottenere alcun risultato ;-)

Per evitare che ogni nuova modifica vada nel dimenticatoio e non venga aggiornata in questo articolo ho voluto pubblicare lo storico delle modifiche sul Wiki: public.gfsolone.com/wiki/doku.php?id=mozilla:abpxfiles:vbs:hwsmaker, dove aggiornerò la pagina con eventuali nuove versioni o note sull’attuale.

X Files

ABP X Files e Harmful WebSites: ecco come nascono 3Una parziale modifica e semplificazione dello script sopra mostrato, questo si occupa solo di sostituire il file dei filtri pubblico (che voi tutti scaricate e utilizzate) con quello estratto dalla mia configurazione principale, quindi da una qualsiasi delle mie postazioni Windows con Firefox e Adblock Plus a bordo. Quando viene corretto un errore o aggiunto un filtro particolarmente importante o molto richiesto (spesso ho a che fare con le continue nuove pubblicità nei video Youtube o nei siti web delle testate giornalistiche più conosciute) arriva il momento di “testare, esportare e pubblicare“. Scrivo quindi i filtri necessari (o correggo gli errori), esporto la lista completa dal mio Firefox salvandola come “filtri.txt” sul mio Desktop e lascio fare il lavoro di fino a questo codice:

' ABP X FILES Stable Maker 0.3 rev1
' GSolone - Ultima modifica: 09/01/17
'
' Lo script modifica la lista filtri esportata dall'Adblock Plus di Staging e la modifica per inserire le informazioni di rilascio, quindi la copia all'interno della cartella pubblica di Dropbox dove tutti i client puntano per l'aggiornamento.
'
' STORICO MODIFICHE
' 0.3 rev1- ho aggiunto un riferimento allo spazio hosting GitHub (per far notare all'utente che sta utilizzando il giusto repository). Aggiornato anche versione di Adblock richiesta (2.8).
' 0.3 - ho modificato la posizione del file di lista (si passa su Github!).
' 0.2 rev0- corregge il bug sullo sdoppiamento dei contenuti (Remove Empty Lines usava una variabile già piena e replicava ogni riga)
' 0.1 rev0- stadio iniziale di sviluppo.
'
' Sviluppo: Giovanni F. -Gioxx- Solone (dev@gfsolone.com)
' Testato su: Windows 7 Pro Sp1
'
' Non toccare nulla oltre questa riga!
' DO NOT touch anything below this line!
' Variables and constants definition
Dim i, objFile, objFSO, strFile, strMsg
Dim objWMIService, objProcess, colProcess
Const ForReading = 1, ForWriting = 2, ForAppending = 8
' Date and time
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each objItem in colItems
dtmLocalTime = objItem.LocalDateTime
dtmMonth = Mid(dtmLocalTime, 5, 2)
dtmDay = Mid(dtmLocalTime, 7, 2)
dtmYear = Left(dtmLocalTime, 4)
dtmHour = Mid(dtmLocalTime, 9, 2)
dtmMinutes = Mid(dtmLocalTime, 11, 2)
dtmSeconds = Mid(dtmLocalTime, 13, 2)
Next
update = dtmYear & dtmMonth & dtmDay & dtmHour & dtmMinutes
lastmodified = dtmDay & "-" & dtmMonth & "-" & dtmYear
' DEBUG: show $datetime
'Wscript.Echo update
' Expand Environment
' Create const's to spare time and place
Dim WshS
Set WshS = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
usrProfile = WshS.ExpandEnvironmentStrings("%UserProfile%")
strFile = usrProfile & "\Desktop\filtri.txt"
' DEBUG: Message to prove my string contains the path to my profile
'cartellaProfilo = usrProfile
'Msgbox strFile, 0, "Percorso lista"
' Staging filtri.txt is on my Desktop?
If objFSO.FileExists(strFile) Then
Else
MsgBox "Non ho trovato il file filtri.txt sul Desktop. Lo hai esportato da Firefox?",16,""
Wscript.Quit
End If
' Remove line 1 to 2, default header of Adblock Plus export
For i = 1 To 2
DeleteLine strFile, "", 1, 0
Next
' Add list header (ABP X Files Stable)
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
strContents = objFile.ReadAll
objFile.Close
strFirstLine = "[Adblock Plus 2.8]" & vbCrLf & "! Version: " & update & vbCrLf & "! Title: ABP X Files" & vbCrLf & "! X Files migliora la tua navigazione quotidiana!" & vbCrLf & "! Last modified: " & lastmodified & vbCrLf & "! Expires: 3 days" & vbCrLf & "! Homepage: http://noads.it" & vbCrLf & "! Home: http://noads.it" & vbCrLf & "! Blog: http://gioxx.org/tag/x-files" & vbCrLf & "! Hosting lista: GitHub.com" & vbCrLf & "! "
strNewContents = strFirstLine & vbCrLf & strContents
Set objFile = objFSO.OpenTextFile(strFile, ForWriting)
'objFile.WriteLine strNewContents
objFile.Write strNewContents
objFile.Close
' Remove empty lines at the end of file!
Set objFile = objFSO.OpenTextFile(strFile, ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.Readline
strLine = Trim(strLine)
If Len(strLine) > 0 Then
strCleaned = strCleaned & strLine & vbCrLf
End If
Loop
objFile.Close
Set objFile = objFSO.OpenTextFile(strFile, ForWriting)
objFile.Write strCleaned
objFile.Close
' Move updated X Files to Dropbox (and overwrite old file)
' (from %UserProfile%\Desktop\filtri.txt to C:\GitHub\xfiles\filtri.txt)
strDropbox = "C:\GitHub\xfiles\"
'Nuova posizione dal 12/2016, era strDropbox = "C:\Dropbox\Public\abpxfiles\"
If objFSO.FileExists(strFile) Then
objFSO.CopyFile strFile, strDropbox, True
Else
MsgBox "Non sono riuscito a muovere il file dei filtri. Verifica che i puntamenti siano corretti",48,""
End If
' Open the file (verification process) and delete "Staging X Files"
strDropboxFile = "C:\GitHub\xfiles\filtri.txt"
'Nuova posizione dal 12/2016, era strDropboxFile = "C:\Dropbox\Public\abpxfiles\filtri.txt"
CreateObject("WScript.Shell").Run strDropboxFile
objFSO.DeleteFile strFile, True
Sub Run(ByVal sFile)
' Variables definition
Dim shell
Set shell = CreateObject( "WScript.Shell" )
shell.Run Chr(34) & sFile & Chr(34), 1, false
Set shell = Nothing
End Sub
Sub DeleteLine(strFile, strKey, LineNumber, CheckCase)
'Use strFile = "c:\file.txt" (Full path to text file)
'Use strKey = "John Doe" (Lines containing this text string to be deleted)
'Use strKey = "" (To not use keyword search)
'Use LineNumber = "1" (Enter specific line number to delete)
'Use LineNumber = "0" (To ignore line numbers)
'Use CheckCase = "1" (For case sensitive search )
'Use CheckCase = "0" (To ignore upper/lower case characters)
Const ForReading=1:Const ForWriting=2
Dim objFSO,objFile,Count,strLine,strLineCase,strNewFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile=objFSO.OpenTextFile(strFile,ForReading)
Do Until objFile.AtEndOfStream
strLine=objFile.Readline
If CheckCase=0 then strLineCase=ucase(strLine):strKey=ucase(strKey)
If LineNumber=objFile.Line-1 or LineNumber=0 then
If instr(strLine,strKey) or instr(strLineCase,strkey) or strKey="" then
strNewFile=strNewFile
Else
strNewFile=strNewFile&strLine&vbcrlf
End If
Else
strNewFile=strNewFile&strLine&vbcrlf
End If
Loop
objFile.Close
Set objFile=objFSO.OpenTextFile(strFile,ForWriting)
objFile.Write strNewFile
objFile.Close
End Sub

Lo script si occupa quindi di prendere la lista appena esportata, aggiungere le informazioni di rilascio necessarie e infine sostituire il vecchio file filtri con quello nuovo appena lavorato. Sarà così pronto e raggiungibile per qualsiasi browser tramite aggiornamento automatico o manuale (a voi la scelta). Anche in questo caso ci sono diverse righe di debug lasciate appositamente per le verifiche del caso e magari -ancora una volta- si poteva fare “meglio con meno“.

Anche in questo caso ho voluto pubblicare lo storico delle modifiche (ad oggi c’è solo questa versione) sul Wiki: public.gfsolone.com/wiki/doku.php?id=mozilla:abpxfiles:vbs:stablemaker.

Come sempre vi invito a utilizzare l’area commenti di questo articolo nel caso in cui vogliate segnalare qualche errore o possibile miglioramento di entrambi i lavori o più semplicemente mettervi in contatto con me e ragionare insieme su come far evolvere questi codici :-)

Enjoy!

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

1 Commento
Oldest
Newest Most Voted
Inline Feedbacks
View all comments