|
Tuesday, July 26, 2011, 15:58
Posted by Administrator
Caros,Posted by Administrator
Agora sim, acho que saem as diversões com o AVR. Vou começar pelos agradecimentos aos que me ajudaram neste start-up.
Nailson, tks pelo atmega8, por acertar o bixinho na minha protoboard e pelo "help for noobie"... ;)
Fred, pelo auxílio ao trilhar os obscuros caminhos dos "bit is myth" ...
Estou usando um atmega8 e uma interface de programação chamada USBASP.
http://www.fischl.de/usbasp/
Tools
Hardware
E-bay : Algo em torno de USD 6.89, mas precisa ver o frete
http://shop.ebay.com/i.html?_nkw=usbasp ... Categories
Goodluckbuy : 12,70 freeshipping
http://www.goodluckbuy.com/avr-usbasp-p ... ga168.html
Software
Se você usa MAC OS/X + macports
sudo port install gcc-avr avr-libc avrdude
Se você usa LINUX (Debian like) eu testei no Ubuntu
$ sudo apt-get install avrdude gcc-avr avr-libc
Se você usa Windows
procure no windows update, vai que tem né ... ;)
Testando
$ sudo avrdude -p m8 -c usbasp
sudo: cannot get working directory
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e9307
avrdude: safemode: Fuses OK
avrdude done. Thank you.
Possíveis falhas:
$ avrdude -p m8 -c usbasp
avrdude: Warning: cannot query manufacturer for device: error sending control message: Operation not permitted
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc
Causa: Falta permissão para acessar o dispositivo USB
Solução:
$ sudo avrdude -p m8 -c usbasp
$ sudo avrdude -p m8 -c usbasp
sudo: cannot get working directory
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: error: programm enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude done. Thank you.
Causa: Falha nas conexões entre o USBASP e o atmega8
Solução: Cheque as conexões.
Antes de fazer um makefile decente, eu fiz um script pra compilar e gravar o meu código.
#!/bin/bash
avr-gcc -O3 -mmcu=atmega8 -Wall -o $1.elf $1.c
avr-objcopy -j .text -O ihex $1.elf $1.hex
avrdude -p m8 -c usbasp -e -U flash:w:$1.hex
Blinkenleds, meu código de luzes piscantes
/* Example code
tks for Fred
*/
#define F_CPU 8000000UL /* 8 MHz CPU clock */
#include <util/delay.h>
#include <avr/io.h>
#define OUTPUT_BIT 0x02 /* 00000010 = PB1 */
int main(void)
{
/* Initialize SFIOR with PUD putting inputs in HIGH impendance state
saving energy and less heat
*/
SFIOR |= PUD;
/* Initialize PortB for output on OUTPUT_BIT using binary OR
0 OR X = X
1 OR X = 1
Preserving state of others BITS
DDRB = xxxxxxxx OR 00000010 = xxxxxx1x
*/
DDRB |= OUTPUT_BIT;
/* Initialize only OUTPUT_BIT with 0 (low) state with AND ~OUTPUT_BIT
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
PORTB = xxxxxxxx & 11111101 = xxxxxx0x
Preserving state of others BITS
*/
PORTB &= ~OUTPUT_BIT;
while (1)
{
/* XOR Port B pin to change only OUTPUT_BIT
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
PORTB = xxxxxx0x ^ 00000010 = xxxxxx1x
PORTB = xxxxxx1x ^ 00000010 = xxxxxx0x
Preserving state of others BITS
*/
_delay_ms(100);
PORTB ^= OUTPUT_BIT;
}
return (0);
}
É isso aí....
Já já, novidades...
sds
Kl0nez
2 comments
( 78 views )
| 0 trackbacks
| permalink
| 



( 3.1 / 25 )




( 3.1 / 25 )
|
|
Friday, July 15, 2011, 17:51
Posted by Administrator
Caros,Posted by Administrator
Muito bacana a iniciativa do Tabajara, em compartilhar um pouco de conhecimento em um vídeocast. Este é o videocast#0 ... que venham outros.
sds
Kl0nEz
|
|
Monday, July 11, 2011, 17:14
Posted by Administrator
Caros,Posted by Administrator
Outro dia, ví no blog "Bit is Myth", um desafio de programação (mais de lógica, do que de programação), que era um programa capaz de jogar o "jogo da velha" e não perder.
Resolví topar este desafio, mas usando BASH, para ter graça, já que se fosse em outra linguagem eu ficaria mais tempo pesquisando do que programando.
Fiquei muito feliz com o resultado e agradeço o elogio, já que não é uma coisa muito comum eu receber reconhecimento por algo que tenha feito.
Segue abaixo o código:
#!/bin/bash
# Inicializando o tabuleiro
casa=(1 2 3 4 5 6 7 8 9)
linha_cheia=(0 0 0 0 0 0 0 0)
tipo_teste=("0 1 2" "3 4 5" "6 7 8" "0 3 6" "1 4 7" "2 5 8" "0 4 8" "6 4 2")
mensagem="inicio do jogo"
player_choice="X"
comp_choice="O"
comp_joga=0
ganha=X
vence="velha"
lance=1
debug=0
fim=0
function tabuleiro () {
[ $debug != 1 ] && clear
linha1="${casa[0]}|${casa[1]}|${casa[2]}"
linha2="${casa[3]}|${casa[4]}|${casa[5]}"
linha3="${casa[6]}|${casa[7]}|${casa[8]}"
separador="-+-+-"
echo $linha1
echo $separador
echo $linha2
echo $separador
echo $linha3
echo $mensagem
}
function testando_linha () {
[ $debug == 1 ] && echo "teste $teste"
for j in $1 $2 $3
do
valor=${casa[$j]}
[ $valor = $comp_choice ] && comp=$(($comp+1)) && [ $debug == 1 ] && echo "computador $comp_choice"
[ $valor = $player_choice ] && player=$(($player+1)) && [ $debug == 1 ] && echo "jogador $player_choice"
[ $valor != $comp_choice ] && [ $valor != $player_choice ] && vazio=$j && [ $debug == 1 ] && echo "vazio $(($j+1))"
[ $(($comp+$player)) == 3 ] && linha_cheia[$teste]=3 && fim=$((fim+1)) && [ $debug == 1 ] && echo "Final do jogo -> $fim -> Linha cheia !!!"
done
}
function jogo_da_velha () {
for teste in 0 1 2 3 4 5 6 7
do
cheia=${linha_cheia[$teste]}
tipo=${tipo_teste[$teste]}
[ $debug == 1 ] && echo "Testando $tipo | linha cheia ? $cheia"
comp=0
player=0
vazio_old=$vazio
vazio=0
[ $cheia == 0 ] && testando_linha $tipo
cheia=${linha_cheia[$teste]}
[ $cheia == 3 ] && vazio=$vazio_old
[ $debug == 1 ] && echo "Resultado do teste $tipo -> comp $comp | player $player | vazio $vazio -> Linha cheia = $cheia"
[ $cheia == 0 ] && [ $comp == 2 ] && ganha=$vazio && vence="comp" && [ $debug == 1 ] && echo "computador ganha se jogar em $vazio"
[ $cheia == 0 ] && [ $player == 2 ] && [ $vence != "comp" ] && ganha=$vazio && vence="player"
[ $vence = "player" ] && [ $debug == 1 ] && echo "computador se defende se jogar em $vazio"
[ $comp == 3 ] && mensagem="Computador venceu !!!!!" && tabuleiro && exit
[ $player == 3 ] && mensagem="Jogador venceu !!!!!" && tabuleiro && exit
[ $fim == 8 ] && mensagem="Deu Velha !!!!!!" && tabuleiro && exit
done
}
function computador_escolhe () {
#
# 0 1 2
# 3 4 5
# 6 7 8
#
[ $debug == 1 ] && echo "Comp_joga -> $comp_joga -> quem vence ? $vence"
[ $debug == 1 ] && echo "lance $lance"
[ $comp_choice = "O" ] && [ $lance == 1 ] && case "$escolha" in
0|1|2|3|5|6|7|8 )
casa[4]=$comp_choice && comp_joga=0 && lance=$((lance+1)) && [ $debug == 1 ] && echo "Computador jogou em 4"
;;
4 )
casa[0]=$comp_choice && comp_joga=0 && lance=$((lance+1)) && [ $debug == 1 ] && echo "Computador jogou em 0"
;;
esac
[ $comp_choice = "O" ] && [ $comp_joga == 1 ] && [ $lance == 2 ] && case "$escolha" in
# Segundo lance
0 )
[ $escolha_old == 8 ] && casa[1]=$comp_choice && comp_joga=0 && lance=3 && [ $debug == 1 ] && echo "Computador jogou em 1"
;;
2 )
[ $escolha_old == 6 ] && casa[1]=$comp_choice && comp_joga=0 && lance=3 && [ $debug == 1 ] && echo "Computador jogou em 1"
;;
6 )
[ $escolha_old == 2 ] && [ $escolha != $comp_choice ] && [ $escolha != $player_choice ] && casa[1]=$comp_choice && comp_joga=0 && lance=3 && [ $debug == 1 ] && echo "Computador jogou em 1"
;;
8 )
[ $escolha_old == 4 ] && casa[6]=$comp_choice && comp_joga=0 && lance=3 && [ $debug == 1 ] && echo "Computador jogou em 6"
[ $escolha_old == 0 ] && casa[7]=$comp_choice && comp_joga=0 && lance=3 && [ $debug == 1 ] && echo "Computador jogou em 7"
;;
esac
jogo_da_velha
# Computador jogando
[ $debug == 1 ] && echo "Comp_joga -> $comp_joga -> quem vence ? $vence"
[ $comp_joga == 1 ] && [ $vence = "comp" ] && casa[$ganha]=$comp_choice && comp_joga=0 && lance=$((lance+1)) && [ $debug == 1 ] && echo "Computador jogou em $ganha"
[ $comp_joga == 1 ] && [ $vence = "player" ] && casa[$ganha]=$comp_choice && comp_joga=0 && lance=$((lance+1)) && [ $debug == 1 ] && echo "Computador jogou em $ganha"
[ $comp_joga == 1 ] && casa[$vazio]=$comp_choice && comp_joga=0 && lance=$((lance+1)) && [ $debug == 1 ] && echo "Computador jogou em $vazio"
}
while true
do
echo "Quem inicia ? (C)omputador (P)layer"
read quem
case "$quem" in
C|c )
comp_choice="X"
player_choice="O"
casa[4]=$comp_choice && comp_joga=0 && [ $debug == 1 ] && echo "Computador inicia jogando na casa do meio"
;;
P|p )
player_choice="X"
comp_choice="O"
;;
esac
while [ "$resposta" != "Q" ]
do
tabuleiro
cheat=0
echo "Qual casa voce escolhe ? (Q -> Sai)"
read resposta
[ $resposta = "Q" ] && echo "Vaza !!!" && exit
echo $resposta | egrep "^[0-9]$" || errado=1
[ $errado == 1 ] && echo "Entrada errada" && exit
escolha_old=$escolha
escolha=$(($resposta-1))
tem_gente=${casa[$escolha]}
[ $tem_gente = $comp_choice ] && cheat=1 && mensagem="CHEATER/Distraído -> O computador já jogou aí"
[ $tem_gente = $player_choice ] && cheat=1 && mensagem="CHEATER/Distraído -> Você já jogou aí"
[ $cheat == 0 ] && casa[$escolha]=$player_choice
[ $cheat == 0 ] && vence="velha"
[ $cheat == 0 ] && comp_joga=1
[ $cheat == 0 ] && computador_escolhe
[ $cheat == 0 ] && jogo_da_velha
done
done
É isso....
sds
kl0nEz
tks mais uma vez pelo elogio !!!!
|
|
Wednesday, July 06, 2011, 16:21
Posted by Administrator
Caros,Posted by Administrator
Alguma vez vocês lembraram que possivelmente os seus usuários não trocaram a senha padrão (aquela criada inicialmente, junto da conta), ou que usam senhas muito fracas ?
Pois entao... vamos testa-las... :)
No meu caso específico o servidor suporta somente o método "AUTH LOGIN", o que não é default do Net::SMTP da Perl, daí fiz algumas alterações do código que usei como referencia.
#!/usr/bin/perl -w
use strict;
$| = 1;
use Getopt::Long;
use Net::SMTP;
use MIME::Base64;
my $server = 'localhost';
my $port = 25;
my $debug = 0;
GetOptions ('host|h=s' => \$server,
'port=s' => \$port,
'user|u=s' => \$user,
'password|p=s' => \$passwd,
'debug|d' => \$debug,
);
my $smtp = Net::SMTP->new($server, Port => $port, Debug => $debug? 1 : 0);
# See if Open occured or Not
my $chk = 1;
$chk = 0 unless defined $smtp;
if ( !$chk )
{ print "Failed...\n"; exit; }
$smtp->datasend("AUTH LOGIN\n");
$smtp->response();
$smtp->datasend(encode_base64($user));
$smtp->response();
$smtp->datasend(encode_base64($passwd));
print "$user\n";
print $smtp->getline ();
$smtp->quit;Para poupar um pouco de pesquisa, já que eu não sou programador, muito menos em Perl, resolvi juntar com um pouquinho de BASH, onde eu já tenho mais de familiaridade.
$time for i in `cat lista_usuarios.txt`;\
do ./smtp-auth.pl --user $i@dominio --password senha_padrao ;\
echo "---------" ; \
done > users_com_senha_padrao.txt
e
$time for i in `cat lista_usuarios.txt`;\
do ./smtp-auth.pl --user $i@dominio --password $i ;\
echo "---------" ; \
done > users_com_senha_USER.txt
Depois de um tempinho, basta procurar nos arquivos de resultado, por...
$ grep -B1 235 users_com_senha*.txt
É isso...
sds
Kl0nEz
Ahh sim... dá pra usar ferramentas específicas para bruteforce (hydra, por exemplo) ... mas qual a graça ?
Referencias:
http://perlstalker.amigo.net/courier/sc ... -smtp-auth
http://search.cpan.org/~gbarr/libnet-1.22/Net/Cmd.pm
http://search.cpan.org/~gbarr/libnet-1.22/Net/SMTP.pm
|
|
Thursday, June 30, 2011, 17:45
Posted by Administrator
Caros,Posted by Administrator
Estão vendo o +1 no título dos posts ?
<!-- Place this tag in your head or just before your close body tag -->
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">
{lang: 'pt-BR'}
</script>
<!-- Place this tag where you want the +1 button to render -->
<g:plusone></g:plusone>
Enjoy
sds
Kl0nEz
|

Calendar



