Recuperar senha perdida do Oracle XE
Eu sou bem esquecido! E hoje esqueci a senha do meu Oracle XE, para recuperar é necessário realizar os seguintes procedimentos:
- Acesse o sqlplus: sqlplus /nolog
- Digite: conn / as sysdba
- Digite: alter user NOMEDOUSUARIO identified by SENHA;
No meu caso eu mudei a senha do SYS. E tudo ok agora! Bem fácil.
Quebrando CAPTCHAs
CAPTCHAs (Completely Automated Public Turing test to tell Computers and Humans Apart“) são testes de Turing automatizados que tentam descobrir se você é um ser humano ou uma máquina. Em síntese os CAPTCHAs são aquelas imagenzinhas embaralhadas que aparecem quando você vai fazer um post em um blog, fazer consulta ou cadastro em alguns sites.
Por que utilizar? Ao utilizar um CAPTCHA em seu site, você evita que programas enviem spams, evita cadastros indevidos e tenta diminuir o uso informações automatizadas em outros sites. Um exemplo de uso é o meu formulário de contato.
Será que o CAPTCHA é realmente uma forma eficaz de descobrir se realmente é um ser humano que está realizando a operação? Se a gente consegue identificar o CAPTCHA, por que uma máquina não conseguiria? Um dos alunos meu perguntou se haveria uma forma de se realizar isso. A escolha foi o CAPTCHA da Receita Federal: http://www.receita.fazenda.gov.br/PessoaJuridica/CNPJ/cnpjreva/Cnpjreva_Solicitacao.asp
Por questões de segurança não irei disponibilizar o código, mas para fins acadêmicos, demonstrarei que é possível ultrapassar a barreira de alguns CAPTCHA. Alguns são fáceis, outros nem tanto.
Por exemplo, vamos ver o CAPTCHA do Facebook:
Esse CAPTCHA é monocromático, o que facilita um pouco e os ruídos existentes são uma bola de fundo e o texto torto. O do Orkut/Google só tem o texto torto:
Vamos ao da Receita Federal:
Esse CAPTCHA é muito mais complicado, há uma imagem de fundo que complica bastante, o texto está torto e são gerados vários tipos de CAPTCHAs diferentes, um com texto pontilhado, outro com um filtro esférico e esse da imagem com o texto torto em dois eixos. Vamos ao mais difícil. Fiz um programinha pra automatizar a tarefa.
O primeiro passo que eu fiz foi obter a imagem do CAPTCHA. Essa etapa é a mais fácil, o código para obter foi o seguinte:
Com essa imagem eu converto para uma BufferedImage e consigo pegar os valores de cada pixel pelo método getRGB(x,y) e posso montar minha matriz. Agora é só relembrar da época da Graduação e Mestrado: Geometria Analítica, Cálculo Numérico, Álgebra Linear, Computação Gráfica, Extração de Características, … No meu Mestrado trabalhei bastante com extração de características de imagens médicas: forma, cor, textura, identificação de cluster, … os conceitos são os mesmo, as características que mudam.
Os passos que executei para o texto torto e fonte forte foram:
- Utilizar um filtro de eliminação de ruídos. Implementei um filtro de mediana.
- Reduzir o espaço de cores da imagem.
- Utilizar uma transformação para “endireitar a imagem”. No caso utilizei duas funções cosseno. y=a*cos(b*x)+c e x=d*cos(e*f)+g. O mais difícil foi identificar os coeficientes. Fui na tentativa e erro. Ainda não está 100%.
- Dividir os caracteres. Poderia ser utilizado um k-means com k=4. Já que sempre são 4 letras.
- Extrair os caracteres e utilizar para treinamento no OCR. Realizar essas etapas com um número bom de letras. Obter o alfabeto todo seria o ideal.
- Aplicar o OCR identificando o texto.
Segue o programinha:
A primeira imagem é a original. A segunda é com o filtro de mediana aplicado. A terceira com a redução do espaço de cores. A quarta é com o “endireitamento” da imagem. E a quinta imagem é com a seleção de caracteres.
Para fontes pontilhadas o filtro de ruídos tem que ser um pouco mais suave. Ele erra bastante, mas também acerta. Cada operação dessa demora poucos milissegundos, como não há limite de tentativas e nem tempo de espera no site da Receita Federal, mesmo com vários erros a velocidade de descoberta do valor do CAPTCHA é muito baixa, poucos segundos. O mais demorado é o treinamento do OCR que é feito uma única vez. Para OCR utilizei a biblioteca JavaOCR.
Para demonstrar o “endireitamento” da imagem, que foi o que mais deu trabalho, pois foi na tentativa e erro, vou exibir uma imagem utilizando somente essa transformação, aí fica fácil entender o motivo das últimas imagens serem maiores. Eu poderia ter identificado pontos da imagem e feito interpolação de pontos para traçar uma curva, mas como é só pra conceito, fiz da forma que achei mais simples.
Criei um filtro de “efeito bandeira”
. Por isso que a imagem fica maior. Portanto, se você quer um sistema seguro, a primeira dica é, coloque um limite máximo de tentativas, obrigue uma espera de alguns minutos para a próxima tentativa e coloque algumas perguntas inteligentes além do CAPTCHA.
Recuperar senha do Weblogic
Tive um problema com a senha do Weblogic e resolvi criar soluções para resetar a senha. O inconveniente é que não recuperamos a senha e sim apagamos e criamos ela novamente. E se quisermos recuperar? Primeiro vamos à solução de apagar a senha, após isso veremos como recuperar a senha sem a necessidade de apagá-la – ideal e menos trabalhoso.
Existem vários “how-to” na internet para resetar a senha do Weblogic, mas para facilitar criei um bash script.
Esse script só funciona para servers que utilizem o DefaultAuthenticator.
Segue abaixo o código dele:
# Author: Thiago Galbiatti Vespa
# 09/17/2010
## Please configure this variables
WL_HOME="/home/thiago/Oracle/Middleware/wlserver_10.3/server/bin"
DOMAIN_HOME="/home/thiago/Oracle/Middleware/user_projects/domains/sample_domain"
ADMIN_SERVER_NAME="AdminServer"
BACKUP_HOME="/home/thiago/domainBckp"
### End
NEW_USERNAME="$1"
NEW_PASSWORD="$2"
if [ -z $1 ] ; then
echo "Please inform the new username!";
exit 1;
fi
if [ -z $2 ] ; then
echo "Please inform the new password!";
exit 1;
fi
NOW=`date +%y%m%d%H%m`
# Backup the domain
tar cvzf ${BACKUP_HOME}/${ADMIN_SERVER_NAME}-${NOW}.tar.gz ${DOMAIN_HOME}
# Weblogic enviroment
. ${WL_HOME}/setWLSEnv.sh
# New DefaultAuthenticatorInit.ldift
java weblogic.security.utils.AdminAccount ${NEW_USERNAME} ${NEW_PASSWORD} .
# Move DefaultAuthenticatorInit.ldift to security dir
mv DefaultAuthenticatorInit.ldift ${DOMAIN_HOME}/security/DefaultAuthenticatorInit.ldift
# Replace the old boot.properties
echo "username=$1" > ${DOMAIN_HOME}/servers/${ADMIN_SERVER_NAME}/security/boot.properties
echo "password=$2" >> ${DOMAIN_HOME}/servers/${ADMIN_SERVER_NAME}/security/boot.properties
# This folder will be recreated
rm -rf ${DOMAIN_HOME}/servers/${ADMIN_SERVER_NAME}/data/ldap/
Para o Weblogic Portal que utiliza o SQLAutenticator como padrão, basta alterar na tabela de usuários e grupos, utilizando o código abaixo.
INSERT INTO GROUPMEMBERS (G_NAME, G_MEMBER) VALUES ('Administrators', 'portaladmin');
INSERT INTO GROUPMEMBERS (G_NAME, G_MEMBER) VALUES ('PortalSystemAdministrators', 'portaladmin');
Achei também alguns códigos que prometem recuperar a senha do Weblogic, o problema é que ele só funciona com 3DES e não com AES. Que é a criptografia que está sendo utilizada pelo meu Weblogic 10.3.2.
Funçando um pouco nas classes do Weblogic achei algumas responsáveis pela criptografia. Deu um bom trabalho para descobrir como o Weblogic fazia, pois envolve criptografia AES e classes internas do Weblogic, mas foi a melhor pro meu caso e agora é bem simples de se executar. Basta passar o serviço de criptografia do Weblogic e mandar descriptografar
.
ClearOrEncryptedService ces= new ClearOrEncryptedService(es);
System.out.println(ces.decrypt(pass));
Pronto! Estou disponibilizando também essa classe pra quem só quiser executar. O comando para executar é o seguinte:
por exemplo:
E o dado descriptografado irá aparecer no console! Funciona em Windows também
.














