Questo codice non è crittografato, sebbene sia leggermente offuscato. La prima riga del codice:
var _$_5e56=["\x66\x61\x63\x65\x62\x6F\x6F\x6B\x2E\x63\x6F\x6D","\x69\x6E\x64\x65\x78\x4F\x66","\x75\x72\x6C","\x69\x64","\x6D\x75\x6B\x61\x2E\x6F\x70\x65\x6E\x28\x29","\x65\x78\x65\x63\x75\x74\x65\x53\x63\x72\x69\x70\x74","\x74\x61\x62\x73","\x73\x68\x6F\x77","\x23\x6E\x6F\x74\x2D\x66\x62\x2D\x70\x61\x67\x65","\x71\x75\x65\x72\x79","\x72\x65\x61\x64\x79"]
definisce semplicemente una serie di stringhe usando ASCII con codifica esadecimale. (Ad esempio, \x66
è f
, ecc.). Quindi quella linea si semplifica in
_$_5e56 = ["facebook.com", "indexOf", "url", "id", "muka.open()", "executeScript", "tabs", "show", "#not-fb-page", "query", "ready"]
.
Il nome della variabile _$_5e56
è un po 'strano, quindi lo ridenominerò arr
per array. Quindi il resto dello script è (dopo aver aggiunto alcuni caratteri che sembrano essere stati dimenticati dall'OP):
$(document)[arr[10]](function()
{
chrome[arr[6]][arr[9]]({active:true},function(a)
{
if(a[0][arr[2]][arr[1]](arr[0])!= -1)
{
chrome[arr[6]][arr[5]](a[0][arr[3]],{code:arr[4]})
}
else
{
$(arr[8])[arr[7]]()
}
})})
Se eseguiamo quindi le sostituzioni dei vari valori di arr
$(document)["ready"](function()
{
chrome["tabs"]["query"]({active:true},function(a)
{
if(a[0]["url"]["indexOf"]("facebook.com")!= -1)
{
chrome["tabs"]["executeScript"](a[0]["id"],{code:"muka.open()"})
}
else
{
$("#not-fb-page")["show"]()
}
})})
Molto approssimativamente, questo utilizza jquery $(document).ready
per eseguire il codice all'interno della funzione quando viene eseguito il documento. Utilizza il permesso chrome.tabs (in particolare chrome.tabs.query di un'estensione JavaScript javascript per ottenere tutte le schede attive e quindi controllare se l'URL della prima scheda attiva ha" facebook.com "ovunque. ( a
è una matrice di tutte le schede attive, a[0]
è la prima scheda attiva, a[0]["url"]
è una stringa dell'URL completo di quella scheda e su una stringa la funzione indexOf
restituisce -1 se la stringa parametro ("facebook.com" in questo caso) non è presente.
In javascript dovresti notare che più notazione punti comune è fondamentalmente equivalente alla notazione di ricerca di array (la ricerca di array è leggermente più generale in quanto è possibile utilizzare caratteri speciali all'interno della stringa che si sta cercando e che non è possibile utilizzare nella notazione a punti). Ad esempio, se hai definito some_str
, puoi ottenere length
o eseguire la funzione indexOf
su di esso con due metodi:
> var some_str = "Hello world"
> some_str.length
11
> some_str["length"]
11
> some_str.indexOf("world")
6
> some_str["indexOf"]("world")
6
Questo ci permetterebbe di semplificare ulteriormente il codice in:
$(document).ready(function() {
chrome.tabs.query({active:true}, function(active_tabs) {
if(active_tabs[0].url.indexOf("facebook.com")!= -1) {
chrome.tabs.executeScript(active_tabs[0].id,{code:"muka.open()"})
} else {
$("#not-fb-page").show()
}
})
})
Quando facebook.com è la prima scheda attiva, esegue lo script muka.open()
in quella scheda, altrimenti mostra l'elemento DOM con l'ID not-fb-page
(che potrebbe essere stato precedentemente nascosto). Non ho familiarità con nessuna libreria javascript muka
; presumibilmente questo è definito altrove nell'estensione.