Dec 15, 2006

Não custa nada tentar...

Ao chegar hoje no trabalho carreguei o firefox e abri minha conta de email do gmail (como faço usualmente) e qual não foi minha surpresa ao ver o seguinte email:


Uhm.... mais um hacker tentando instalar um cavalo de tróia (ou qualquer coisa parecida) em minha máquina.

Certo. Nice try Mr. hacker! Mas não vai ser desta vez :)

Fico imaginando o número de usuários que ao receber um email como este (ou outro qualquer, por exemplo convidando o usuário a ver as últimas fotos nuas de uma atriz bonitona qualquer) se desesperam, ou ingenuamente, e acabam por clicar no link (observe bem, é um executável). Certamente não deve ser um número pequeno :(.

Não sou especialista em segurança, mas de qualquer forma aqui vão algumas dicas de segurança:

  • Não acredite em propostas fantásticas (que normalmente o induzem a fazer algo impensado pois a tal proposta é "válida apenas para hoje"; como minha esposa diz: "Negócio da China? deixa para o chines!"

  • Via de regra as instituições financeiras (bancos) não enviam emails com links. Se você receber algum email em nome de um banco e este possuir links e você tiver dúvida se o mesmo foi realmente enviado pelo banco ou não, entre em contato com o Banco, ou entre no site do banco.

  • NUNCA click em links dentro de emails supostamente enviados por instituições financeiras, órgãos públicos, etc. Procure sempre verificar o destino do link (no email que eu recebi o destino era um executável!!! NUNCA MESMO CLICK EM LINKS CUJO DESTINO SÃO PROGRAMAS EXECUTÁVEIS. Nem mesmo se você conheçe a pessoa que enviou o email pois é possível enviar emails se passando por uma pessoa qualquer)

  • Procure utilizar o computador com um usuário com poucos privilégios.

  • Mantenha um bom antivirus sempre atualizado em seu computador.

  • Apesar de algumas pessoas não verem como essencial, eu prefiro manter um bom firewall instalado também

  • Instale também um bom programa para verificação de rootkits, spyware e comania.

  • Utilize senhas fortes (nada de utilizar a data de nascimento, nome do cachorro ou informações facilmente deduzíveis e/ou suscetíveis a ataques de dicionário).

  • Mantenha seu SO (Windows, Linux, Mac OS X, etc.) sempre atualizado.

  • Esta dica é derivada da anterior mas considero a mesma tão importante que vou ser explícito: Mantenha seu Web Browser (Firefox, IE, Opera, etc) sempre atualizado.

  • Acho desnecessário dizer que não é seguro anotar senhas em agendas, papéis (principalmente debaixo do teclado), etc. Se for necessário armazenar várias senhas (para evitar esquecê-las) utilize um programa que guarde as mesmas de forma segura.

  • Não acesse sites duvidosos.

  • Se realmente for necessário acessar algum site duvidoso procure fazê-lo a partir de uma virtual machine (VM) (a Microsof distribui gratuitamente o Virtual PC; a VMWare distribui o VMWare Player de graça, mas neste caso você terá que criar a Virtual Machine de alguma forma [existem vários programas gratuítos que podem criar VMs para o VMWare]). Ok, reconheço que apenas usuários mais avançados possuem condições técnicas para fazer isto)

  • Cuidado com programas baixados de redes P2P (Kazza, Bit Torrent, etc.). Hackers estão utilizando estas redes para espalhar vírus, cavalos de tróia, etc.

Bom, espero que isso o ajude a tornar mais seguro seu computador ;)

Adriano.

Dec 13, 2006

Problema de gases?

Outro dia minha esposa me enviou um email com este vídeo; não costumo promover este tipo de email mas como achei muito engraçado aqui esta....

Dec 8, 2006

Sinais dos tempos....

Eu não pretendia postar hoje mas um fato inusitado me fez mudar de idéia... Bom, hoje é sexta feira, e como sempre, eu e o pessoal da empresa, almoçamos mais rápido para jogar Counter Strike (CS). Chegando à lan-house que sempre jogamos o atendente nos informou que um vírus havia infectado as máquinas e que justamente o CS poderia não funcionar. Para evitar prejuízos financeiros aos clientes o atendente estava liberando 10 minutos para testarmos se o CS iria funcionar na máquina que cada um escolheu para jogar. Até aqui tudo bem. Então lá fui eu; escolhi uma máquina e liguei a mesma; alguns instantes depois dou um click no menu do windows, seleciono o CS e.... Bum! Este programa executou uma instrução ilegal e será finalizado! Droga! Tudo bem, pensei comigo; desliguei a máquina, me dirigi a outro computador, liguei o mesmo e.... Bum! Mesma coisa. Quando já estava quase desistindo um adolescente de uns 13 anos (compadecido com meu desespero :) virou e disse:
"Eu sei como fazer para funcionar! Quer que eu te ensine?"
Ótimo, pensei comigo mesmo! Posso ser orgulhoso e dizer que não (afinal de contas, sou mais capacitado para resolver problemas com computadores que um adolescente de 13 anos) e tentar resolver o problema (ou tentar outro computador) ou responder sim e ver no que dava. Bom, depois de infindáveis 3 segundos, respondi que sim; então o adolescente abriu um sorriso, pediu licença, pegou o teclado da minha mão e saiu pressionando o mesmo como louco (na realidade de forma ordenada :). É claro que eu entendi o que ele estava fazendo (abrindo o Windows Explorer e copiando o executável do jogo de uma pasta compartilhada na rede, que supostamente estava livre do vírus). Algumas teclas pressionadas depois e pronto! Ele vira novamente para mim e diz:
"Pronto, pode jogar!"
Eu conversei um pouco mais com ele, agradeci e tentei executar o jogo novamente... Bum! O mesmo problema! Comentei que não havia funcionado e o adolescente disse que ele havia se deparado com o mesmo problema e que este procedimento havia funcionado para ele. Pensei por alguns instantes e comentei que o vírus poderia ter infectado o programa novamente (enquanto conversávamos). Então copiei o executável do jogo novamente (é claro que ele me ajudou a encontrar a pasta da rede onde eu poderia encontrar o executável) e tentei novamente... Agora sim o jogo carregou e pude me divertir :) O que mais me chamou a atenção neste acontecimento? Um adolescente me auxiliando a solucionar problemas em um computador :) é... sinais dos tempos!!!!! Adriano

Dec 1, 2006

Aplicativo (útil) da Semana - Parte 2

Como sempre a falta de tempo tem me impedido de postar mais frequentemente :( De qualquer forma, hoje pretendo apresentar um aplicativo bastante útil que usuários do Unix/Linux já estam bastante acostumados mas, por motivos que não importam, a marioria dos usuários do Windows desconhecem. Quando comecei a trabalhar na empresa que me encontro atualmente me deparei com a seguinte situação: todos os desenvolvedores criavam uma estrutura de diretórios fixa (por exemplo: c:\Projetos\NomeProjeto, ou algo parecido) e algumas ferramentas dependiam destes caminhos (pois usavam caminhos absolutos). Como sempre tive o habito de particionar meus HDs em pelo menos duas partições (uma para dados e a outra para programas) o drive C ficou para o SO (sistema operacional) e a partição de dados acabou ficando como E (ok, eu sei que posso mudar este mapeamento, mas eu não queria fazer isto por outros motivos). Para resolver este impasse (eu desejava colocar o diretório de projetos no drive E, mas algumas ferramentas esperavam que o mesmo se encontrasse no drive C) eu criei um Junction Point (ou ponto de junção) no drive C apontando para o drive E. Junction Points permitem que sejam criados links para diretórios em qualquer volume (por exemplo o diretório c:\projetos pode ser um Junction Point, ou seja, pode apontar, para o diretório c:\meus documentos\projetos). Assim, para solucionar o impasse fiz o seguinte:
  • Criei a estrutura de diretórios no drive E (E:\Projetos\Nome Projeto)
  • No drive C eu criei um Junction Point chamado Projetos apontando para E:\Projetos
  • desta forma ao acessar o diretório c:\Projetos na realidade estou acessando E:\Projetos.
O resultado pode ser visto na seguinte imagem: Observe que o c:\Projetos aparece no console como JUNCTION (e não como DIR como os demais diretórios) enquando e:\Projetos é apresentado (como era de se esperar) como DIR, indicando que o mesmo é um diretório comum. Agora, todas as operações que forem realizadas em c:\projetos na realidade estarão sendo realizadas em e:\projetos. E como criamos (manipulamos) Junction Points? A resposta rápida é que apesar do Windows suportar Junction Points desde o Windows 2000, por algum motivo que desconheço, a MS não possui uma forma simples para manipular Junction Points (aqui você pode encontrar explicações [em inglês] de como criar Junction Points com ferramentas da própria MS). Porém nem tudo esta perdido :). Você pode encontrar utilitários (gratuítos) que manipulam Junction Points aqui, aqui e aqui. Eu, particularmente, uso a primeira delas pois a mesma permite criar também Hard Links e Symbolik Links (no Windows Vista) além de possuir versões para x86 e x64.

Oct 24, 2006

Aplicativo (útil) da Semana - Parte 1

O primeiro aplicativo que eu gostaria de sugerir é o Notepad++, um ótimo editor de textos (e o que é melhor, gratuito!) com vários recursos úteis, entre os quais gostaria de citar: tabbed editing, syntax highlighting, folding/undolding (para tipos de arquivos que suportam este conceito), seleçao de blocos, entre outros. Já faz algum tempo que uso este aplicativo; o mesmo é bastante estável e não possui muitos bugs. Não deixe de testar o Notepad++! Abraços. Adriano

Oct 9, 2006

Windows Vista RC2

A Microsoft liberou o Release Candidate 2 (RC2) (build 5744) do Windows Vista para o público. Tanto a versão 32 bits (x86) quanto a 64 (x64) podem ser baixadas em: http://download.windowsvista.com/preview/rc2/en/download.htm Se você tem interesse baixe logo pois o download público será por tempo limitado (eu já baixei :). Adriano

Sep 30, 2006

O que esta errado com esta código (Parte X)

Infelizmente, por motivo de tempo, já faz algum tempo que não posto neste blog :(. Infelizmente ao postar a última entrada desta série (Oque esta errado com este código?) não inclui um número. Assim sendo, vou atribuir o valor X para o mesmo. Com relação ao post referido, o problema esta relacionado ao acesso de propriedades de controles da UI em uma thread diferente daquela que o componente.

Observe novamente o código abaixo:

Created with colorer-take5 library. Type 'csharp'

0: using System;
1: using System.Windows.Forms;
2: using System.Threading;
3:
4: namespace TestWinForm
5: {
6:     public partial class TestCallBackFromDiferentThread : Form
7:     {
8:         private System.Threading.Thread workerThread;
9:
10:         public TestCallBackFromDiferentThread()
11:         {
12:             InitializeComponent();
13:         }
14:
15:         private void button1_Click(object sender, EventArgs e)
16:         {
17:             ThreadStart ts = new ThreadStart(AddNewLine);
18:             workerThread = new Thread(ts);
19:             workerThread.Start();
20:         }
21:
22:         private void AddNewLine()
23:         {
24:             listBox1.Items.Add(textBox1.Text);
25:         }
26:     }
27: }

Nas linhas # 17 ~ 19 criamos uma thread e iniciamos a execução da mesma; esta thread chama a função AddNewLine() que por sua vez tenta incluir um item em uma listbox. O problema (como explicado aqui) é que o acesso a controles em WinForms não são thread safe automaticamente, ou seja, se duas threads modificarem o estado de um controle simultaneamente o mesmo pode ficar em um estado inconsistente ou mesmo gerar exceções (oque seria melhor que a primeira possibilidade). Crie uma aplicação WinForm, adicionar os controles listbox, textbox e um botão e copie o código acima para o formulário da aplicação. Se você executar esta aplicação a partir do explorer pode lhe parecer que a mesma não possui problema nenhum; ou seja, aparentemente a mesma funcionou. Contudo execute a mesma a partir do Visual Studio; se a opção "enable exception assistence" estiver habilitada uma exceção será gerada quando a thread tentar acessar o listbox na linha 24. Ok, e como solucionar o problema? Simples, usando a propriedade InvokeRequerid do controle... No método AddNewLine(), antes de incluir o item no listbox consulte a propriedade InvokeRequired; se a mesma for true então execute o método Invoke() passando um delegate que irá executar o mesmo método (AddNewLine()).

Veja no exemplo abaixo:

Created with colorer-take5 library. Type 'csharp'

using System;
using System.Windows.Forms;
using System.Threading;

namespace TestWinForm
{
    public partial class TestCallBackFromDiferentThread : Form
    {
        private System.Threading.Thread workerThread;

         public TestCallBackFromDiferentThread()
         {
             InitializeComponent();
         }

         private void button1_Click(object sender, EventArgs e)
         {
             ThreadStart ts = new ThreadStart(AddNewLine);
             workerThread = new Thread(ts);
             workerThread.Start();
         }

         private void AddNewLine()
         {
             if (listBox1.InvokeRequired)
             {
                listbox1.Invoke(new MethodInvoker(AddNewLine));
             }
             else
             {
                listBox1.Items.Add(textBox1.Text);
             }
         }
     }
 }

Você pode encontrar mais informações (em inglês) sobre o assunto aqui.

A partir do próximo post irei iniciar uma série onde em cada post falarei sobre um aplicativo/site que uso com frequência e que acho interessante. Fique atento.

Adriano

Sep 20, 2006

Eficiência dos antivirus gratuitos...

Estou escrevendo este post a partir do Windows Vista RC1; não porque eu pretendia fazer desta forma mas sim porque meu Windows XP foi contaminado com o bagle_ge; e a pobre da minha esposa foi quem sofreu as primeiras consequências :(. Então, enquanto baixo as novas versões da bios, drivers do chipset etc eu aproveitei para escrever este post. Em parte o fato ocorrido foi bom pois não tenho mais dúvida que a qualidade das versões personal de alguns antivirus deixa bastante a desejar; por outro lado este problema também me fez considerar ainda mais passar a utilizar o Windows Vista (RC1) como meu SO primário. Mas para isto antes necessito fazer alguns testes (principalmente com a impressora já que a mesma já completou 7 anos de vida e o fabricante não me parece muito empolgado com a idéia de escrever um driver de 64 bits para a mesma [ps: o Windows reconheceu a impressora mas não sei se a mesma esta funcionando corretamente pois ainda não imprimi nada nela]) Adriano

Sep 6, 2006

Apresentação (novamente)

Este é meu primeiro post neste novo blog :) Antes de mais nada gostaria de dizer que não vou abandonar meu blog antigo (AccessViolation); só mudei para este novo blog para poder usar alguns recursos que ainda estão na versão beta (a que mais me interessou foi a possibilidade de incluir "labels" mas tem muito mais :) Assim que estes recursos estiverem disponíveis para meu blog antigo devo voltar para o mesmo.