sábado, 16 de outubro de 2010

Desafio: Strings Criptografadas em Malware Banker

Ao analisar e fazer engenharia reversa em alguns malwares me deparei com um padrão de strings criptografadas que se repetia em alguns trechos do código.

Não sei se isso pode ser chamado de criptografia ou obfuscação, mas enfim, é um método que o fraudador utiliza para esconder algumas strings de olhares curiosos. Pelo menos na idéia dele ninguém conseguirá entender o que escreveu (deixa ele pensar assim :) .

Bem, agora eu pergunto, você sabe me dizer o que significam as strings abaixo encontradas em um malware real?

xoj buopd be psfn
FZF_0102_TTBMDJOV_VBUJ
ojhpm/MO/mbnspo/nfmfufd/mbuspq/tqa/sc.npd.nfmfufd.aaa//:tquui
!fuofnbufsspd febejmbx fe bube b fnspgoJ
usbd po pebxbsh fnpO p fujhjE
OVS\OPJTSFXUOFSSVD\TAPEOJA\UGPTPSDJN\FSBAUGPT
.fuofnbufsspd sbmvuju pe GQD p fujhjE
Fica aí o desafio, caso tenha se interessado deixe um comentário.

[POST ADICIONADO EM 18/10/2010]

Os colegas nos comentários rapidamente descobriram a lógica por traz dessa criptografia caseira como foi citado. Realmente é só inverter a direção da string e para cada letra pegar a anterior do alfabeto.

Para as strings citadas a descriptografia é:

mero da conta inv
itau_uniclass_2010_exe
https://www.cetelem.com.br/wps/portal/cetelem/normal/nl/login
informe a data de validade corretamente!
digite o nome gravado no cart
software\microsoft\windows\currentversion\run
digite o cpf do titular corretamente.!

No dia que eu encontrei essa tipo de criptografia e descobri a lógica delas eu até fiz um script PHP para descriptografar automaticamente, não é muito elaborado mas fica aí como exemplo.

<?php

// funcao recebe uma letra e retorna a anterior
function converte($letra){
$letra=strtoupper($letra);
if($letra=='A'){$letra='W';return $letra;}
if($letra=='B'){$letra='A';return $letra;}
if($letra=='C'){$letra='B';return $letra;}
if($letra=='D'){$letra='C';return $letra;}
if($letra=='E'){$letra='D';return $letra;}
if($letra=='F'){$letra='E';return $letra;}
if($letra=='G'){$letra='F';return $letra;}
if($letra=='H'){$letra='G';return $letra;}
if($letra=='I'){$letra='H';return $letra;}
if($letra=='J'){$letra='I';return $letra;}
if($letra=='K'){$letra='J';return $letra;}
if($letra=='L'){$letra='K';return $letra;}
if($letra=='M'){$letra='L';return $letra;}
if($letra=='N'){$letra='M';return $letra;}
if($letra=='O'){$letra='N';return $letra;}
if($letra=='P'){$letra='O';return $letra;}
if($letra=='Q'){$letra='P';return $letra;}
if($letra=='R'){$letra='Q';return $letra;}
if($letra=='S'){$letra='R';return $letra;}
if($letra=='T'){$letra='S';return $letra;}
if($letra=='U'){$letra='T';return $letra;}
if($letra=='V'){$letra='U';return $letra;}
if($letra=='X'){$letra='V';return $letra;}
if($letra=='Z'){$letra='X';return $letra;}
if($letra=='Y'){$letra='Z';return $letra;}
if($letra=='W'){$letra='Y';return $letra;}
return $letra;
}

// string a ser descriptografada
$s='OVS\OPJTSFXUOFSSVD\TAPEOJA\UGPTPSDJN\FSBAUGPT';

$rev=strrev($s); // inverte a direcao

// chama a funcao para converter
for($i=0;$i<strlen($rev);$i++){
$rev[$i]=converte($rev[$i]);
}

// exibe a string descriptografada em minúsculas
for($i=0;$i<strlen($rev);$i++){
echo strtolower($rev[$i]);
}
?>

Você também pode gostar: Decodificando Strings em Malwares

12 comentários:

  1. Não posso fazer nada, além de chutar...

    FZF_0102_TTBMDJOV_VBUJ: me cheira a registro do windows

    ojhpm/MO/mbnspo/nfmfufd/mbuspq/tqa/sc.npd.nfmfufd.aaa//:tquui
    url criptografada e invertida? :P

    Análise muito superficial.
    É possivel descobrir o que esse trecho de código faz? Ele está isolado do código disassemblado, ou não?

    Enfim, sou só um noob...

    ResponderExcluir
  2. Anônimo,

    "url criptografada e invertida? :P"

    É por aí mesmo, está criptografada como?
    Essas linhas que postei não fazem nada no código, são apenas partes de strings utilizadas em algum lugar do malware.

    Mas todas possuem o mesmo padrão de criptografia, se você descobrir uma descobre todas.

    Analise a URL que você consegue.

    Abraço!

    ResponderExcluir
  3. Bom, é uma criptografia bem caseira que na maioria das vezes funciona bem :P

    Eu traduzi a URL.. ai o resto é só deduzir! :P
    i=h
    u=t
    q=p
    t=s
    o=n
    a=w
    d=c
    p=o
    n=m
    c=b
    s=r
    u=t
    b=a
    m=l
    f=e
    h=g
    j=i

    https://www.cetelem.com.br/wps/portal/cetelem/normal/NL/login

    ResponderExcluir
  4. Era interessante o case completo do mesmo..abs!!!

    ResponderExcluir
  5. Como fazer o script PHP funcionar no navegador IE?

    ResponderExcluir
  6. "Não sei se isso pode ser chamado de criptografia ou obfuscação..."

    Eu chamo de obfuscação de "código", "nome", "endereço", etc.

    ResponderExcluir
  7. Diário de um Tux,

    Agradeço seus comentários no Blog, é sempre bom saber a opinião de outras pessoas.

    Anônimo,

    Você precisa ter o PHP instalado e configurado com o Apache por exemplo. Depois você copia esse código e salva em um arquivo com extensão .php na pasta raiz do Apache.

    Então acessa pelo navegador através do endereço:

    http://localhost/nomedoscript.php

    A string criptografada vc coloca na variável:

    $s='string criptografa';

    Abraços!

    ResponderExcluir
  8. "...é sempre bom saber a opinião de outras pessoas."

    Principalmente, se elas estiverem certas.

    ResponderExcluir
  9. Este comentário foi removido pelo autor.

    ResponderExcluir
  10. Essa criptografia é baseada em tabela, sendo cada letra da cifra representando a verdadeira letra....

    Temos 26 letras , ou seja ,26 combinações diferentes por cifra, tendo uma palavra de 4 letras, temos 26^4 possibilidades ou 456976 combinações possíveis, isso ? É mais fácil dumpar a aplicação e ficar vendo o que ela faz em memória do que tentar chutar uma combinação que nem essa.... estou certo ou errado ?

    Ainda eu esqueci de mencionar 26 letras minusculas.... não mencionei as outras 26 maiusculas....

    ResponderExcluir
  11. Isso Julien, tabelas de substituição.

    Não conheço muito os conceitos corretos da criptografia mas tem material muito bom nesse site:

    http://www.numaboa.com/criptografia/

    Essa daí como era bem simples nem precisou fazer o dump, após analisar algumas strings foi possível descobrir o padrão, mas com certeza para as mais complexas é muito mais rápido executar o programa e pelo debug ir analisando os resultados.

    Inclusive estou finalizando um novo post sobre uma funçao de criptografia de strings mais complexa encontrada em outro malware.

    Abraço!

    ResponderExcluir

Related Posts Plugin for WordPress, Blogger...