Thursday, June 26, 2008

ExtPascal - Pascal para Ext JS

Legal! Wanderlan Anjos publicou uma versão inicial de seu framework ExtPascal, um wrapper para as bibliotecas Ext JS.
Está em seus estágios iniciais mas vale uma olhada. Baixei os fontes e irei criar um projeto piloto para verificar a possibilidade de utilização em algum projeto! Parabéns Wanderlan!

Thursday, June 12, 2008

G-Buster revisited. Batendo a praga em seu próprio jogo!

ATENÇÃO: Este procedimento não é válido para as versões mais recentes do G-Buster. Um novo post explica como bater esta praga novamente! Estou adorando brincar de gato & rato com a GAS Tecnologia! ;-)
A mais nova versão da praga pode ser removida mais fácil que antes, com o novo procedimento descrito neste link.

Pois bem amigos. Nunca pensei que o G-Buster Browser Defense fizesse tanto mal a tanta gente! Depois que fiz o post com o método que usei para remover a praga do meu PC recebo pelo menos dois e-mails por dia. Alguns agradecendo pela receita, outros se lamentando que não conseguiram, mesmo seguindo fielmente os passos para a remoção do G-Buster.
Bem, resolvi então fazer um segundo post sobre o assunto. Juntei inclusive opiniões e dicas de leitores, e apimentei um pouco a situação! Resolvi bater o G-Buster em seu próprio jogo SUJO de mudanças de permissão de acesso a chaves da registry, arquivos, etc. Então vamos lá! PS: Uso Windows XP, mas a receita funciona para todos!

1) Faça logon no Windows como administrador da máquina, sem permissões de administrador, nada feito.

2) Conforme explicado no meu outro post, o G-Buster é composto de uma DLL que é o controle ActiveX que interage com o Internet Banking do banco em questão, e também por um serviço, o abominável GbpSv.exe, ambos na pasta C:\Arquivos de programas\GbPlugin (ou C:\Program Files\GbPlugin se seu Windows for em Inglês).
O GbpSv.exe TEM que ser removido. Ele é o serviço que fica ativo 24x7 em sua máquina usando recursos sem a menor necessidade, e principalmente, SEM A SUA PERMISSÃO!

Você pode ver o G-Buster em execução teclando Ctrl+Alt+Del e abrindo o Task Manager (uso o DTaskManager), conforme a figura abaixo:



Não adianta tentar matar o G-Buster a partir do Task Manager. Ele entra em execução novamente. Mas... Se o arquivo executável do programa não pode ser acessado para leitura, então ele não pode ser executado, certo? CERTO! Então vamos remover a permissão de leitura do arquivo GbpSv.exe.

Siga os passos que constam nas figuras abaixo:

2.1) Removendo a propriedade de leitura do diretório C:\Arquivos de programas\GbPlugin:

Vá no Windows Explorer encontre a pasta C:\Arquivos de programas\GbPlugin. Clique com o botão direito do mouse e escolha no menu Propriedades:



Vá na aba Segurança. Clique em avançado e desmarque a opção "Herdar do Pai as entradas de permissão aplicáveis..."



Clique em OK. O Windows irá perguntar se é para copiar as permissões ou excluí-las. Para facilitar a demonstração, vou supor que você irá escolher COPIAR. Então teremos depois disso:



Remova, um por um, TODOS os usuários da lista de usuários com permissão. Deixe somente o usuário SYSTEM e o usuário LOCAL SERVICE. Se os usuários SYSTEM e LOCAL SERVICE não estiverem na lista adicione-os. A partir do momento que somente os dois usuários estiverem na lista você irá NEGAR acesso (TODOS) a estes usuários. Teremos então:



A partir daí, nem o Windows Explorer terá acesso aos arquivos e você não mais poderá vê-los no painel da direita.

3) Agora, reinicie a máquina. O G-Buster não conseguirá mais ser carregado, mesmo que as entradas na Registry ainda sejam mantidas, pois não terá mais acesso ao HD na pasta onde está o arquivo executável.

Após o boot, repare no Task Manager que o G-Buster não está mais na lista de processos em execução:



Agora vamos bater o G-Buster em seu próprio jogo sujo. Atenção: Estes passos são opcionais. Não é necessário fazer isto pois o G-Buster já foi removido, mas eu fiz para impedir que ele volte quando eu acessar novamente o Internet Banking.

4) Adicione acesso total ao seu usuário na pasta do G-Buster, conforme a figura:



Agora, renomeie o GbpSv.exe para um outro nome qualquer que não tenha extensão EXE (eu usei GbpSv_Ex_EXE.OLD) com esta extensão OLD ele é inofensivo, e não pode ser executado pois o Windows não reconhece esta extensão).

Crie então um arquivo com o nome que o serviço tinha antes. Pode ser um arquivo texto mesmo, de tamanho zero, com o nome GbpSv.exe. Deixe o arquivo sem permissão nenhuma de nenhum usuário como a figura:

Renomeando o GbpSv.exe:


Criando um novo arquivo GbpSv.exe, que não é executável:


Negando acesso ao arquivo GbpSv.exe:


Você pode estar se perguntando para quê eu fiz isto? Criar um arquivo vazio com o nome GbpSv.exe e bloquear o acesso a ele. Isto é uma forma simples de impedir que o instalador do plugin que roda quando você acessa o site consiga instalar de novo o GbpSv.exe original. Mesmo que as permissões da pasta sejam alteradas a existência de um arquivo de mesmo nome e sem permissão de acesso impede que um novo GbpSv.exe seja copiado para esta pasta. Ou seja, não tem mais como o instalador instalar a praga novamente. Será?

Bem a melhor forma é testar de novo, acessando o site do banco. Testei na Caixa Econômica Federal e olhem aí o Internet Banking totalmente funcional:



Será que o G-Buster não voltou? Hum... Desta vez não! ;-)

Bem, este segundo método de remover o G-Buster é mais fácil que o primeiro que fiz, mas mesmo assim é cheio de etapas. E pela extensão do processo, fica difícil explicar detalhadamente cada passo e usuários menos experientes em configurações avançadas do Windows podem ter alguma dificuldade. Mesmo não sendo difícil, é longo e passível de erros. Se você tentou e não conseguiu, respire fundo, acalme-se e comece de novo, passo-a-passo! ;-) Vale a pena! Depois disso você fica livre do G-Buster e continua acessando seu Internet Banking, sem problemas!

Você pode continuar o extermínio da praga até o fim, eliminando as entradas da registry pertinentes, conforme eu mostrei no primeiro post sobre o assunto. Não que seja necessário, mas eu gosto de começar e TERMINAR o serviço, então na minha máquina eu eliminei cada traço do G-Buster na registry!

Se quiser continuar até o fim, remova as DLL's que estão na pasta do G-Buster, ou, melhor ainda, renomeie-as usando um outro nome qualquer. Agora que o serviço GbpSv.exe não está mais ativo é fácil remover ou renomear as DLL's (após a reinicialização do sistema e ANTES de qualquer acesso ao Internet Banking do seu banco, caso contrário a DLL será carregada e estando em memória não pode ser excluída). Lembre-se somente que, excluindo a DLL, sempre que você acessar o Internet Banking será solicitado que você instale novamente o plugin ou ActiveX do banco, o que reinstalará a DLL (mas não o serviço GbpSv.exe, caso você tenha bloqueado o acesso ao arquivo de mesmo nome que está na pasta).

Wednesday, April 23, 2008

Midas.dll and COM+ applications deployment issues

It is a known fact that Midas.dll needs to be registered before installing/registering a COM+ ActiveX Library under COM+, when deploying an ActiveX library written with Delphi, right?
Well... something interesting that I discovered this week: DON'T register a Midas.dll version 10.x (from BDS 2006 installation). Use a lower version - I'm using my D6 dll.
If you use version 10.x it will be registered without any errors, but when you try to install the ActiveX Library, boooom!!! You will get a "Error loading type library" error, as Midas.dll was not registered at all.
After ActiveX Library installation/registration, Midas.dll can be even deleted (If you are linking with MidasLib.dcu), as usual.

Monday, April 14, 2008

ASP.NET Compilation Error

Another common error I've found installing ASP.NET web services in IIS:

"Compilation Error - The compiler failed with error code 128"

This error has a simple solution: Just go to your .NET subfolder, for instance,

%SystemRoot%\system32\Microsoft.NET\Framework\

and type

aspnet_regiis -i

This will re-install and configure ASP.NET for IIS.

Thursday, March 13, 2008

Arcana Intraweb Elite Suite is now Open Source!

Good news for Intraweb developers! Arcana has released its Intraweb Elite Suite to Open Source (MIT license). This is an excellent component pack for every Intraweb project!
Download here: http://code.google.com/p/iwelite/

Object Serialization in Delphi - Part II

This is a unit based on JVCL’s JvgXMLSerializer (from old Globus library). It has some basic classes used for object serialization:

unit XMLSerializer;

interface

uses
SysUtils, Classes, JvgXMLSerializer;

type
TXMLSerializer = class(TJvgXMLSerializer)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
procedure Serialize(Component: TObject; var s: string); overload;
procedure DeSerialize(Component: TObject; s: string); overload;
published
{ Published declarations }
end;

TSerializable =
class(TPersistent)
public
{ Public declarations }
function Serialize: string;
procedure DeSerialize(s: string);
end;

implementation

{ TXMLSerializer }

procedure TXMLSerializer.DeSerialize(Component: TObject; s: string);
var
Stream: TStringStream;
begin
Stream := TStringStream.Create(s);
try
DeSerialize(Component, Stream);
finally
Stream.Free;
end;
end;

procedure TXMLSerializer.Serialize(Component: TObject; var s: string);
var
Stream: TStringStream;
begin
Stream := TStringStream.Create('');
try
Serialize(Component, Stream);
s := Stream.DataString;
finally
Stream.Free;
end;
end;

{ TSerializable }

procedure TSerializable.DeSerialize(s: string);
var
Serializer: TXMLSerializer;
begin
Serializer := TXMLSerializer.Create(nil);
try
Serializer.DeSerialize(Self, s);
finally
Serializer.Free;
end;
end;

function TSerializable.Serialize: string;
var
Serializer: TXMLSerializer;
begin
Serializer := TXMLSerializer.Create(nil);
try
Serializer.Serialize(Self, Result);
finally
Serializer.Free;
end;
end;

end.



The classes declared are:

TXMLSerializer
: my direct descendant of TJvgXMLSerializer. It implements two new methods:
- Serialize: serialize an instance directly to a string, without the necessity of creating a TStream;
- DeSerialize: receive a string as a parameter containing the XML and deserialize the instance.

TSerializable: a TPersistent descendant that implements the Serialize and DeSerialize methods too.
They both work to serialize and deserialize itself.
All my "serializable" classes are direct descendants of TSerializable.

I've modified the original JVCL unit TvgXMLSerializer (using latest version 3.33) to make it compatible with VCL.NET (using BDS 2006).
Using that unit I can create serializable classes that can be shared - and used - among Win32 and .NET modules. Not only creating single sorced projects, but I can pass a XML to a ASP.NET WebService from my Win32 consumer client, in an easy and convinient way.
More about it later. ;-)