Menu

Mostrar postagens

Esta seção permite que você visualize todas as postagens feitas por este membro. Observe que você só pode ver postagens feitas em áreas às quais tem acesso atualmente.

Menu Mostrar postagens

Mensagens - kodo no kami

#1
e ae galera nesse post vamos ver um emulador para arquitetura Motorola 6800. O M6800 foi o primeiro microprocessador de 8 bits da Motorola, o seu set de instruções é bastante semelhante aos processadores 6502 da Rockwell com algumas diferenças (embora as instruções é bastante parecida, o binário das duas arquiteturas são incompatíveis entre si). O emulador que vamos brincar é o SDK6800/6811 da hvrsoftware (nesse tópico não estarei ensinando sobre a arquitetura 6800 ou sobre o assembly dela, apenas apresentando um pouco sobre o emulador ~ talvez em um futuro post quem sabe né ^^ ). Podemos baixar o emulador direto no site oficial

site oficial (hvrsoftware)

depois de baixar e executar. No lado esquerdo dele colocamos o nosso código assembly. No meio podemos visualizar a memoria, o display de saída e uma referencia do assembly. No lado esquerdo fica os registradores. Em baixo fica a aba de erros e os botões para rodar, parar e salvar o código. Na parte superior podemos escolher entre o 6800 e o 6811 (creio que esse 6811 seja um microcontrolador e não um microprocessador)

img grande


agora digitamos o codigo assembly e por fim rodamos ele. Para um exemplo bem basico vou atribuir um valor a um registrador e incrementar esse registrador ate um certo valor

ldaa #$0
kodo inca
cmpa #$10
beq kami
jmp kodo
kami jmp kami


img grande


por fim rodamos o código apertando no run, ou no step para rodar ele passo a passo. Pela logica do meu código ele vai incrementar o registrador A ate o valor 10, depois ficara preso no loop infinito

img grande


bom galera esse é um bom emulador para aprender sobre arquitetura m6800, ele é bastante simples e interessante ^^

by kodo no kami
#2
bom galera nesse tutorial estaremos mexendo com o icarus verilog, sendo ele um sintetizador e simulador da linguagem verilog. A linguagem verilog é uma linguagem de descrição de hardware, por ela podemos descrever o funcionamento interno de um hardware especifico, podemos como exemplo recriar todo o funcionamento de uma arquitetura ou de um processador usando apenas uma determinada linguagem. Existem inclusive chips construídos especificamente para sintetizar internamente toda aquela logica usando esse tipo de linguagem como ocorre nos FPGA, onde podemos recriar uma arquitetura e o seu funcionamento em cima daquele chip e daquela linguagem (ainda não tive a oportunidade de mexer com FPGA T.T ). Bom galera para começar a gente baixa o icarus no site oficial, o icarus é opensource e existem para diversas plataformas como windows e linux (em boa parte das distros linux ele ja tem no repositorio da distro)

site oficial

depois de baixar e instalar via repositório ou via binário (dependendo temos que coloca nas variáveis de ambiente para conseguir executar ele em qualquer diretório), criamos um código basicão que ira exibir uma string na tela do simulador (não vou ensinar a linguagem verilog nesse tutorial apenas o uso do icarus), para isso criamos em um arquivo o nosso codigo verilog (normalmente com extensão .v)

module kodo;
initial begin
   $display("ola mundo by kodo");
end
endmodule


o codigo a cima vai exibir na tela do simulador a mensagem "ola mundo by kodo", para a gente sintetizar e rodar no simulador usamos o comando iverilog, passamos como argumento o nosso código fonte (também podemos ter uma saída com um nome especifico usando o argumento -o seguido do nome do arquivo de saída antes do nome do código fonte)

iverilog -o kodo.out kodo.v

img grande


para simular ele usamos o comando vvp seguido do arquivo de saida

vvp kodo.out

img grande


outro exemplo seria sintetizar um clock, que ira exibir uma mensagem quando tiver uma borda de subida e outra mensagem quando for uma borda de descida

module kodo;
reg clock = 0;

initial begin
end

always #100 clock = ~clock;

always @(posedge clock)
begin
   $display("borda de subida");
end

always @(negedge clock)
begin
   $display("borda de descida");
end
endmodule


img grande


no exemplo anterior ele ficara preso em um loop infinito, se a gente apertar control+c vai dar um break e depois ira cair em um terminal interativo, onde podemos digitar finish para sair, cont para continuar, step para rodar passo a passo, ls para listar os modulos, entre outros comandos

img grande


podemos exportar um vcd e carregar em um programa para exibir toda essa mudança dos estados. Para fazer isso usamos as diretivas $dumpfile e $dumpvars, nesse meu exemplo a baixo sera armazenado no registrador k o estado invertido do clock

module kodo;
reg clock = 0, k = 0;

initial begin
   $dumpfile("kodo.vcd");
   $dumpvars(0,clock);
   $dumpvars(1,k);
end

always #100 clock = ~clock;

always @(clock)
begin
   k = ~clock;
end
endmodule


img grande


depois do dump bastaria carregar o nosso vcd em algum programa que interprete esse formato como o gtkwave, waview ou qualquer outro desse genero.

img grande


bom galera esse é o básico do icarus ^^

by kodo no kami
#3
e ae galera blz? nesse tutorial vamos programar para um computador antigo da decada 70, sendo essa maquina um altair 8800 da mits. Nesse tutorial vamos esta usando um simulador ja que é uma maquina extramente antiga e rara entre colecionadores (nunca tive oportunidade de mexer com um de verdade, queria uma replica de natal para brincar kkk =/ ), no caso para esse tutorial vamos usar o "altair 8800 emulator" embora exista outros emuladores para ele inclusive alguns onlines

site oficial (altair32)

bom galera antes de começar a brincar com o emulador temos que entender algumas coisas, a primeira delas que programar esse tipo de maquina não é tão simples como as atuais onde a gente cria o codigo em C, Pascal ou qualquer outra linguagem usando uma IDE bonitinha e depois joga no disco para dar boot. As maquinas mais antigas as vezes nem tinha o teclado ou monitor, apenas leds para sinalizar o bit daquele barramento, chaves ou botões para mudar os estados deles (no caso do altair são aquelas chaves do tipo alavanca). Outra coisa que temos que citar que a arquitetura do altair 8800 é baseado nos processadores intel 8080 (talvez exista variantes em 8085 ou ate em z80 ja que o proprio simulador tem a opção z80, alem dessas arquiteturas tambem serem compativeis de certa forma, embora creio que precise mudar um pouco o circuito para que isso seja possivel ~ uma coisa interessante que os computadores imsai 8080 é um clone do altair, eles tambem usavam processadores 8080, ate que começaram a ser fabricados usando o 8085 como cpu). Como o computador é baseado em 8080 então a arquitetura e o assembly usado na arquietura atual x86 não é compativel com essa maquina, nem o set de instruções e nem o binario gerado (para isso, temos que programar exatamente para a arquitetura 8080 ou ate mesmo o 8085 e z80, excluindo algumas instruções não compativel com o 8080). bom galera agora que a gente ja falou um pouco sobre esse computador vamos da uma olhada em uma imagem que peguei wikipedia dessa maquina

altair 8800

o que precisamos entender que vamos programar ele manualmente bit a bit formando o codigo binario equivalente aquela instrução do 8080, depois podemos rodar o programa tanto passo a passo quanto de uma vez. primeiro de tudo vamos entender um pouco do painel desse trem.

img grande


O primeiro botão que vamos ver é o que fica no lado esquerdo do canto inferior (escrito off e on ~ coloquei em vermelho), esse botão liga e desliga a maquina (quando empurramos a alavanca para on ele liga para off ele desliga),

img grande


o segundo botão que vamos analisar sera o botão para rodar o programa do computador, sendo esse botão o run (no meu exemplo ele é o verde), para a gente usar esse botão temos que coloca o programa antes ne (esse emulador ja tem um programa padrao nele entao podemos dar um run sem problema), outra coisa que podemos ver que os leds que estiver escrito A e os D vao mudar constantemente sendo os leds A representando os endereços de memorias (normalmente vai mudar sequencialmente menos quando acontecer um jmp) e o D representando a instrução ou os dados (lembrando que isso é binario ~ no exemplo abaixo seria o codigo hexadecimal 8 no barramento de dados e no barramento endereço de memoria o numero 4cff), podemos apertar em stop para parar o programa no trecho atual da memoria (tambem a cor verde porem para cima dessa vez), depois que o programa estiver parado podemos apertar em run novamente para rodar ele novamente

img grande


podemos rodar o programa passo a passo depois de parado usando o botão single step (no meu exemplo ele é o verde claro), o single step tambem serve para passar para o proximo dado na memoria (executando ele é claro)

img grande


para a gente resetar os registradores tambem seria meio para reiniciar o computador sem cortar a sua energia, usamos  o botão reset (no meu exemplo é o roxo)

img grande


para a gente ir para um endereço de memoria especifico temos que setar os bits equivalente a ele no barramento de endereço, para isso usamos os botões do barramento de endereço/dados (no meu exemplo é a cor marrom), supondo que eu quero debugar o meu programa a partir da posição hexadecimal 25 (100101) de memoria, então basta setar o valor 100101 nos botões de barramento e depois usar o botão de leitura ou Examine para pular para aquele trecho (no meu caso é o azul claro o botão), o Examine Next é executado para ler o proximo byte porem não executar como codigo

img grande


para a gente escrever na memoria primeiro vamos para a posição desejada como no exemplo anterior, depois escrevemos no barramento de dados usando os botões de barramento (esse botão serve tanto para memoria quanto para os dados a diferença que os dados sao apenas 8 bits ou seja os oitos primeiros botões ja que é um processador de 8 bits), por fim usamos o botão deposit (no meu exemplo era o azul escuro), o Deposit Next vai pular a instrução e escrever no proximo endereço depois dela, no exemplo abaixo eu escrevo o byte 05 na memoria

img grande


um simples programa que atribui um valor a um registrador depois soma com um outro valor a esse registrador depois joga na memoria no endereço 0b, no caso a instrução hlt vai parar o programa (seria o mesmo que puxar o botão stop porem por software), depois basta a gente da um step para o proximo dado para ter o resultado

mvi a,50h
mvi b,10h
add b
mvi h,0
mvi l,0bh
mov m,a
hlt


depois de compilado vai gerar o codigo binario abaixo (representei ele em hex), voce pode criar seus proprios programas e não se limitar ao meu, bastando usar um compilador para 8080,8085 ou z80 para descobrir os bytes equivalente (ou procurar em manuais dessa arquitetura pelo set de instruções tambem)

3e 50 06 10 80 26 00 2e 0b 77 76 00

depois disso basta voce escrever cada byte desse sequencialmente a partir do endereço de memoria 0 ( vai da um trabalho isso em u.u ), depois executar o programa ele ate ele para no hlt como previsto pelo codigo, para a gente exibir o resultado basta exibir o proximo dado apertando o Examine Next (ele ler o proximo endereço da memoria sem executar), no meu exemplo tem que da o valor 60 (1100000)

img grande


bom galera sei que tem muita coisa para falar sobre esse computador principalmente voltado a parte de programação, porem, esse tutorial foi feito para mostrar o funcionamento basico dessa maquina sem nos aprofundar tanto, então quem sabe em algum futuro tutorial eu entro de cabeça para ensinar asm 8080/8085 ou ate mesmo z80 ^^

by kodo no kami
#4
e ae galera nesse tutorial vamos aprender instalar o simulador z80-mon no linux. para isso baixamos ele no site oficial (a versão mais recente atualmente é 2.4-pre3)

site oficial

depois de baixar o codigo fonte basta extrair usando o comando tar (o terminal deve esta apontando para o mesmo diretorio dele)

tar -xzvf z80-asm-current.tar.gz

img grande


entramos na pasta criada usando o comando cd

cd z80-asm-2.4-pre3/

agora compilamos com o comando make, sera gerado dois executaveis z80-asm e z80-mon

make

img grande


podemos usar make install para mover eles para o diretorio do sistema

make install

para um exemplo basicão vou usar o seguinte codigo asm para z80, esse codigo incrementa o contador 'a' ate o numero 200 e depois termina a execução do programa

org 0
ld a,0
repetir:
cp 200
jp z,fim
inc a
jp repetir
fim:
halt


para compilar usamos z80-asm (não é um dos melhores compiladores, prefiro o z80asm ou tpasm)

z80-asm kodo.asm kodo.bin

img grande


usamos o z80-mon abrimos o simulador

z80-mon

img grande


para carregar o nosso programa usamos "L" (shift+l), depois escrevemos o nome do nosso programa e apertamos enter

img grande


tambem podemos carregar o programa diretamente pelo argumento do z80-mon

z80-mon kodo.bin

para rodar o programa usamos o comando 'r'

img grande


existem outros comados como @ (shift+2) para resetar o codigo, ENTER seguido da instrução para modificar aquela instrução, o 'p' para modificar o registrador pc,  o 's' para modificar o registrador sp,  para sair usamos Q (shift + q), entre outros comandos

by kodo no kami
#5
opa vlw ai galera :cuteeyes:

Citação de: Sora Leon online Setembro 11, 2017, 16:54:14 PM
Parabéns pela a ferramenta! Pena que eu não tenho capacidade pra fazer uma  :chegamais:

que nada mano aposto que tem sim \o, tipo depois que tu começa mexer com programação fica viciado nisso kkk
#6
e ae galera nesse tutorial vamos aprender a utilizar a minha tools krsearch. a ferramenta krsearch nos permite fazer uma busca relativa em um arquivo e retornar as posições daquela sequencia de caracteres naquele arquivo (diferente da busca tradicional que usa uma tabela especifica buscando exatamente aquela determinada sequencia de caracteres daquela tabela no arquivo, a busca relativa consegue encontrar aquela sequencia de caracteres equivalente mesmo em textos usando uma tabela diferente que a gente não conhece. a busca relativa é muito utilizada em romhacking para a tradução de determinada rom, como tambem pode ser utilizada em outras areas como a criptoanalise ~ existe um outro tutorial meu ensinando como quebrar a cifra de cesar por busca relativa, so procurar ^^ ). para começar a gente baixa a source no github (la tambem tem o binario ja compilado tanto para linux quanto para windows)

github

img grande


podemos baixar pelo navegador ou usar o git para baixar via terminal

git clone https://github.com/hackerfts315/krsearch.git

img grande


depois de baixar basta a gente entrar no diretorio dele, vai ter dois subdiretorios bin e source, o diretorio bin tem dois arquivos um é o executavel para o windows e outro para o linux (nesse tutorial vamos compilar a source então larga de ser preguiçoso e deixa os ja compilados la), no diretorio source tem tres arquivos (krs.c, krs.h e Makefile), e a sua compilação é muito simples bastando usar o comando make para gerar o executavel krsearch (necessario ter o compilador gcc e o make instalado)

make

img grande


podemos inclusive usar o make install depois para copiar o arquivo para /usr/bin e executar ele em qualquer diretorio (isso so funciona no linux, para o windows voce pode mover manualmente para o diretorio system32 para ter o mesmo resultado)

sudo make install

depois de compilado podemos usar ele, bastando passar como argumento --search seguido da palavra que vamos buscar e a rom ou o arquivo onde vamos procurar, com isso ele vai nos retornar a posição onde foi encontrado cada ocorrencia e qual byte seria equivalente a letra 'a' de cada uma delas (com base nisso podemos criar uma tabela)

krsearch --search pikachu pokemon.gbc

é possivel usar apenas -s no lugar --search

krsearch -s pikachu pokemon.gbc

ou ate mesmo colocar a rom antes do --search

krsearch pokemon.gbc --search pikachu

img grande


tambem podemos usar o argumento --relative ou -r seguido de uma palavra, com isso sera exibido toda a sequencia relativa daquela palavra

krsearch --relative "kodo no kami kawaii"

img grande


bom galera é isso, futuramente vou adicionar algumas novas funcionalidades, como gerar a propria tabela diretamente por ela e algumas outras coisas tambem ^^

by kodo no kami
#7
Assuntos Diversos / [ebook] eof ebook asm
Agosto 25, 2017, 15:42:48 PM
e ae galera um pequeno ebook meu de asm para x86, é bem basicão tendo apenas 131 paginas (não fiz a revisão ainda ~ nos outros tambem não kkk).

download (eof)
download (mega)

indice:
[spoiler]1.0 – Introdução ao Assembly
1.1 – Baixo e Alto nível
1.2 – Arquitetura CISC e RISC
1.3 – Sintaxe INTEL e AT&T
1.4 – Agrupamento de bits
1.5 – Little endian e Big endian
1.6 – Tipos de dados
1.7 – Compiladores
1.8 – Comentario
2.0 – Familia x86
2.1 – x86: Registradores
2.2 – x86: Flags
2.3 – x86: instrução de movimento
2.4 – x86: instrução aritmetica
2.5 – x86: instrução de pulo
2.6 – x86: Subrotina
2.7 – x86: Acesso a memoria
2.8 – x86: Interrupção
2.9 – x86: IO
3.0 – x86: FPU
3.1 – x86: MMX
3.2 – x86: 3DNow
3.3 – x86: SSE
4.0 – x86: Modo Protegido
4.1 – x86: libc
4.2 – x86: asm web (cgi)
4.3 – x86: asm inline
4.4 – x86: disassembler
5.0 – EOF
[/spoiler]
#8
Citação de: tvtoon online Agosto 19, 2017, 11:18:24 AM
Só um adendo, fio de deos... Como a documentação é escassa, e seu ambiente de linha de comando uma desgraça, é preciso ter suporte para decidificação, codificação e o chamado "demux" (transição) para converter entre formatos.

verdade mano complicado achar conteudo sobre ffmpeg bastante escasso =/
#9
e ae galera o ffmpeg é um conversor de audio e video não grafico que é muito usado no sistema linux muito robusto e extremamente flexivel (embora ele exista para diversas outras plataformas tambem como windows e mac). pelo ffmpeg podemos converter um arquivo em um formato para outro com diversos tipos de codecs diferentes, podemos converter ou ate armazenar stream via rede ou enviar via stream por ele, podemos aplicar filtros especificos por ele ou seja ele tambem pode ser usado para edição de video via comando, podemos capturar tanto o audio quanto o video do computador, podemos manipular tanto o audio quanto o video dos arquivos separadamente. o ffmpeg vem instalado em boa distros linux, caso não venha instalado basta baixar ele direto pelo repositorio da sua distro (no caso das distros baseadas em debian podemos utilizar o apt-get)

apt-get install ffmpeg

para a gente listar todos os formatos de arquivo que podem ser manipulados pelo ffmpeg usamos o argumento -formats

ffmpeg -formats

img maior -> http://i.imgur.com/DHk1qUI.png


para exibir os codecs usamos o parametro -codecs

ffmpeg -codecs

com o argumento -protocols exibimos os protocolos aceito tanto para entrada quanto para saida

ffmpeg -protocols

tambem podemos exibir os filtros aceitos com o argumento -filters

ffmpeg -filters

podemos exibir os dispositivos que podem ser manipulados pelo ffmpeg, para isso usamos o argumento -devices

ffmpeg -devices

para a gente converter um video de um formato para outro usamos o argumento -i indicando o arquivo de entrada que seria o video que vamos converter, seguido do arquivo de saida com a extensão do formato para qual vamos converter aquele video, exemplo um video em rmvb para mp4

ffmpeg -i zero_no_tsukaima.rmvb zero.mp4

img maior -> http://i.imgur.com/rZUjCFF.png


podemos usar o argumento -f para especificar o formato

ffmpeg -i zero_no_tsukaima.rmvb -f mp4 zero.mp4

é possivel converter para varios formatos ao mesmo tempo bastando especificar eles um a um

ffmpeg -i zero_no_tsukaima.rmvb zero.mp4 zero.mkv

lembrando que o mesmo pode ser feito com audio, não necessariamente precisa ser um video

ffmpeg -i "steinsgate op.mp3" s.wmv

podemos converter um arquivo via stream tambem (nesse caso precisaria da url direto do arquivo)

ffmpeg -i "http://192.168.1.2/kodo/repositorio/anime/Spice%20and%20wolf/Spice-and-Wolf-01.mp4" spice.mkv

img maior -> http://i.imgur.com/9wYVsSq.png


é possivel converter o stream do video da webcam no sistema linux bastando ler o arquivo /dev/videoX (o X é equivalente ao numero da webcam)

ffmpeg -i /dev/video0 nudes.mp4

no linux podemos gravar o desktop usando o formato x11grab e na entrada passamos o display da nossa janela atual

ffmpeg -s 1280x1024 -f x11grab -r 20 -i :0.0 desktop.mp4

podemos converter de um formato de video para formato de audio para extrair apenas o audio daquele video

ffmpeg -i another01.rmvb another01.mp3

é possivel desativar o video usando o argumento -vn, com isso vai gerar o formato de video apenas com audio dele

ffmpeg -i another01.rmvb -vn another01.mp4

tambem podemos desativar o audio com o argumento -an

ffmpeg -i another01.rmvb -an another01.mp4

com o argumento -ss a gente inicia apartir daquele ponto, no proximo exemplo ele vai gerar o video mp4 apartir do 5:00

ffmpeg -i another01.rmvb -ss 5:00 another01.mp4

temos que nos atentar a uma coisa dependendo da onde voce coloca o -ss ou qualquer outro argumento voce vai esta manipulando o arquivo de entrada ou o arquivo de saida, se voce colocar o -ss antes do -i no exemplo anterior vai iniciar apartir daquele ponto quase instantaneamente porem se colocar o -ss depois do -i como no exemplo anterior o ffmpeg vai ler todo o video ate aquele determinado momento e apartir dele que vai começar a converter

ffmpeg -ss 5:00 -i another01.rmvb another01.mp4

para especificar o tempo que ele vai parar usamos o argumento --to, no proximo exemplo ele vai gerar  o video ate o 1:00 do video de entrada

ffmpeg -i another01.rmvb -to 1:00 another01.mp4

outro exemplo agora recortando a opening do anime another que começa em 1:31 e termina em 3:01

ffmpeg -i another01.rmvb -ss 1:31 -to 3:01 anotherop.mp4

img maior -> http://i.imgur.com/CJzZffk.png


tambem existe o parametro -t que seria a duração para parar, como eu sei que a opening do anime another tem 1:30 e começa em 1:31, posso recortar ela especificando 1:30 no -t e 1:31 no -ss, com isso vai comçear em 1:31 e ter como duração 1:30 de video/audio

ffmpeg -i another01.rmvb -ss 1:31 -t 1:30 anothermusica.mp3

outra forma de parar o video é por frames convertido, a cada segundo de video existe uma quantidade de frames (os famosos fps), para a gente parar o video em uma quantidade de frames especifica, usamos o argumentos -frames seguido da quantidade frames maxima que ffmpeg ira converter

ffmpeg -i another01.rmvb -frames 3000 another.mp4

podemos inserir uma legenda em um video usando o -i tambem

ffmpeg -i yosuga.mp4 -i kodo.srt kodo.mp4

img maior -> http://i.imgur.com/gd3HBQj.png


pelo ffmpeg tambem podemos converter legendas srt para ass

ffmpeg -i kodo.srt kodo.ass

para inserir legendas ass temos que fazer via filtro de video usando o argumento -vf ass (a vantagem das legendas ass que podemos customizar fonte, tamanho, cor, posição e ate efeito)

ffmpeg -i yosuga.mp4 -vf ass=kodo.ass yosuga.mp4

podemos especificar a dimensão da tela com o argumento -s seguido da dimesão da tela para qual vamos converter, o bom que isso diminui o tamanho final do arquivo o problema que isso vai diminuir tambem a qualidade do video ja que a quantidade de pixeis para ser manipulado sera menor (outro problema que não é possivel fazer o oposto aumentando a tela para melhorar a qualidade ja que é impossivel recuperar os dados originais perdido tendo como resultado final um video mais pixelado)

ffmpeg -i toaru.mp4 -s 300x200 toaru300x200.mp4

combinando a dimensão da tela junto com o frame e com o tempo inicial, podemos pegar uma imagem do video que pode ser usado para criar aqueles thumbnail (podemos tambem colocar outro numero no frames para pegar varias imagens em sequencia de video)

ffmpeg -ss 07:21 -i toaru.mp4 -s 400x300 -frames 1 mini.png

img maior -> http://i.imgur.com/t6C8mes.png


podemos juntar um arquivo de video com um arquivo de audio usado o argumento -i nos dois, para que funcione corretamente temos que especificar a saida com o video e o audio usando o argumento -map, sendo que no argumento map a gente passa a ordem que entramos com os arquivos pelo -i, seguido de dois pontos e a letra "a" para indicar que a saida sera o audio daquele arquivo ou "v" caso seja o video daquele arquivo

ffmpeg -i video.mp4 -i "Trip-Innocent Of D.mp3" -map 0:v -map 1:a amv.mp4

se no exemplo anterior a ordem do arquivo fosse a musica antes do video a ordem no map seria invertida sendo o 0 para o audio e o 1 para o video

ffmpeg -i "Trip-Innocent Of D.mp3" -i video.mp4 -map 1:v -map 0:a amv.mp4

tambem podemos junta um video com o audio de outro video

ffmpeg -i video1.mp4 -i video2.mp4 -map 0:v -map 1:a saida.mp4

podemos aplicar alguns filtros com o ffmpeg tanto em audio quanto em video, para aplicar um filtro no video usamos o argumento -vf, para aplicar um filtro no audio usamos o argumento -af, um filtro que podemos aplicar no audio é o areverse que inverte o som

ffmpeg -i xuxa.mp3 -af areverse dilma.mp3

podemos aplicar esse filtro direto no video tambem para inverter o audio do video

ffmpeg -i deathnote.mp4 -af areverse saida.mp4

um filtro para o video é o negate que mostra o video todo em negativo

ffmpeg -i toradora.mp4 -vf negate tigresa.mp4

img maior -> http://i.imgur.com/Kt7lda9.png


com o filtro rotate a gente rotaciona a tela

ffmpeg -i toradora.mp4 -vf rotate=0.6 tigresa.mp4

se a gente passar um numero negativo para o rotate sera rotacionado para outro lado

ffmpeg -i toradora.mp4 -vf rotate=-1.2 tigresa.mp4

outro filtro para video é o scale que permite a gente redimensionar o video

ffmpeg -i toradora.mp4 -vf scale=400:300 tigresa.mp4

podemos escrever um texto com o filtro drawtext, alguns dos argumentos dele são text para especificar o texto, x e y para a posição, box seria uma caixa, boxcolor a cor da caixa, font seria o nome da fonte, fontcolor seria a cor da fonte, fontsize o tamanho da fonte, enable='between' seria o tempo que vai aparecer e desaparecer

ffmpeg -i "no game no life.mp4" -vf drawtext="text=by kodo no kami: x=5: y=10: box=1: boxcolor=white: font=arial: fontcolor=black: fontsize=18: enable='between(t,10,1200)'" nogame.mp4

img maior -> http://i.imgur.com/7SAljKa.png


podemos inclusive juntar dois ou mais videos rodando ao mesmo tempo dividindo a mesma tela, para fazer isso temos que usar um filtro complexo, pegamos o primeiro video redimensionamos ele com scale, depois juntamos ele com o segundo usando o overlay

ffmpeg -i "no game no life.mp4" -i Seto.mp4 --filter_complex "[0] scale=300:200[kodo];[1][kodo]overlay=50:50" saida.mp4

img maior -> http://i.imgur.com/EpwQXYc.png


bom galera como podemos ver que o ffmpeg é uma excelente ferramenta que alem de permitir a conversão do video tambem permite a edição dele, tudo direto pelo terminal. como são comandos podemos imprementar eles em qualquer linguagen seja bash script ou ate mesmo linguagens que permite o uso do terminal como a função system em C, Perl ou ate PHP (embora tambem exista bibliotecas e libs proprias do ffmpeg).  bom galera esse tutorial mostra apenas o basico do uso dessa ferramenta sendo que tem muito mais coisas que poderia ser feito por ela que não daria para citar nesse tutorial, tambem existe o ffplay que é um player que vem junto com o ffmpeg que permite aplicar filtros, o ffserver que é um servidor que permite enviar stream de videos e audios aplicando filtro e encodando ele, ffprobe exibe que informações de determinado video ou audio entre outros ^^

by kodo no kami
#10
e ae galera eu tinha codado essa source a uns meses, é um codigo bem simples que gera executavel de um batch script do windows ou do bash script do linux (não necessariamente o bash pode ser outro terminal linux tambem), para começar a gente baixa ele no github (podemos baixar o binario la em bin/b2x.zip ou source em src e compilar, no caso da compilação precisamos do compilador gcc e do nasm)

github b2x

http://i63.tinypic.com/25fn9mh.png

no meu caso como estou no linux e vou clonar tudo com o comando git

git clone https://github.com/hackerfts315/b2x.git

http://i63.tinypic.com/dqnes.jpg

depois de baixar temos o diretorio bin onde tem dois arquivos zip, o primeiro é o b2x.zip que tem dentro 4 arquivos sendo eles b2x.exe que seria o executavel do windows ja compilado, b2x.out seria o executavel do linux ja compilado, pe.dat seria o binario base que vai ser gerado do script e por fim elf.dat que é o binario base que vai gerar o executavel para o script do linux, no outro zip o dat.zip tem 2 arquivos o elf.dat e o pe.dat para não precisar compilar eles caso queira compilar apenas o executavel

http://i66.tinypic.com/2h8a2ib.jpg

no diretorio src temos todo codigo fonte do programa b2x.c e b2x.h gera o nosso executavel b2x (b2x.exe ou b2x.out dependendo da plataforma que voce compilar), elf.asm e pe.asm gera o elf.dat e  pe.dat, por fim temos o arquivo Makefile que facilita na compilação

http://i63.tinypic.com/akd535.jpg

para a gente compilar apenas usamos o comando make que sera gerado o executavel da nossa plataforma (necessario o gcc e ele deve esta nas variaveis de ambiente)

make

para a gente gerar o arquivo elf.dat é necessario que a gente tenha o nasm e que a gente esteja no sistema linux (nao é gerado o elf.dat no windows), para compilar e gerar ele usamos o comando make linux

make linux

para a gente gerar o pe.dat usamos o comando make windows, tambem é necessario que tenha o nasm e que a gente esteja no windows

make windows

podemos gerar elf.dat no windows ou pe.dat no linux porem precisamos do gcc compilando para a outra plataforma (cross compile), outra alternativa é instalar o gcc do windows no wine e compilar por ele ( caso não queira ter o trabalho de compilar voce pode baixar o dat.zip que tem os dois)

http://i66.tinypic.com/2mgma6b.jpg

com o nosso executavel e o dat da nossa plataforma basta executar o programa b2x pelo terminal, passar como argumento a plataforma que vamos gerar o script (windows ou linux ~ necessario que tenha .dat dela), o script que vamos criar o executavel e por fim o arquivo de saida, para testar vou gerar o executavel do seguinte script

#!/bin/sh
#isso e um comentario
echo testando 123
echo sei la
mkdir eof
cd eof
echo koneko kawaii > waifu.txt
cat waifu.txt


./b2x linux kodo.sh saida.out

http://i66.tinypic.com/2cdzyvc.jpg

no windows seria mesma coisa mudando apenas o comando "linux" para "windows" (nao cheguei a testar de fato em um windows e sim no wine então nao sei se tem algum bug)

b2x.exe windows kodo.bat kami.exe

outra coisa que tenho que citar que o executavel gerado é bem estatico chega a ser quase uma gambiarra, nao foi gerado toda a estrutura do executavel em runtime como deveria ser em uma compilação e sim usa um executavel como base (ta eu sou preguiçoso eu ja sei disso kkk), mesmo assim ta valendo eu acho ^^

by kodo no kami
#11
e ae galera blz? nesse tutorial vou ensinar como instalar o tpasm no linux que é um compilador assembly opensource de diversas arquiteturas, entre essas arquiteturas ele compila para rockwell, motorola, zilog, sunplus, infineon, core technologies, avr, pic e intel


rockwell: 6502 65c02

motorola: 6805 68hc05 68705 68hc08 68hc11 6809

zilog: z80 z180

sunplus: spc08a spc21a spc21a1 spc41a spc41b spc41b1 spc41c spc81a spc121a spc251a spc512a spc500a1 spc1000a spc2000a

infineon: c166

core technologies: ctxp1

atmel avr: avr attiny10 attiny11 attiny12 attiny15 attiny22 attiny28 at90s1200 at90s2313 at90s2323 at90s2333 at90s2343 at90s4414 at90s4433 at90s4434 at90s8515 at90c8534 at90s8535 atmega8 atmega103 atmega161

microchip pic: 12c508 12c508a 12c509 12c509a 12ce518 12ce519 12c671 12c672 16c505 16c52 16c54 16c55 16c56 16c57 16c58 14000 16c554 16c556 16c558 16c61 16c62 16c62a 16c62b 16c620 16c620a 16c621 16c621a 16c622 16c622a 16c63 16c63a 16c64 16c64a 16c642 16c65 16c65a 16c65b 16c66 16c662 16c67 16c71 16c71a 16c710 16c711 16c715 16c72 16c72a 16c73 16c73a 16c73b 16c74 16c74a 16c74b 16c76 16c77 16f627 16f627a 16f628 16f628a 16f648 16f648a 16f818 16f819 16f83 16c84 16f84 16f84a 16f873 16f874 16f876 16f877 16c923 16c924 12f629 12f675 12f683 17c42 17c43 17c44 17c52 17c56

intel: 8031 8032 8051 8052 80c390


para começar a gente baixa o compilador no site oficial

sqrt (site official)

depois que a gente baixar o codigo fonte compactado (tpasm.tgz), temos que extrair para isso usamos o comando tar no arquivo

tar -xzvf tpasm.tgz

http://i67.tinypic.com/2rzao0y.jpg

agora basta a gente entrar na pasta gerada com o comando cd

cd tpasm1.8

e usar o comando make para compilar o codigo fonte dele gerando o executavel tpasm

make

http://i63.tinypic.com/15nrgif.jpg

podemos mover esse executavel para o /usr/local/bin ou usar o comando make install para fazer isso automaticamente (essa ação é necessario esta como root)

sudo make install

http://i68.tinypic.com/9r4v8h.jpg

pronto com isso ja temos ele instalado bastando criar um codigo para alguma arquitetura citada e compilar por ele, para testar vou esta gerando um codigo para o z80 bem simples que soma dois registradores

org 0x0
ld a,0x50
ld b,0x10
add a,b

fim:
jp fim


para compilar usamos o argumento -P seguido do processador nesse caso z80 (pode usar o argumento -show_procs para exibir todos), -o seguido do tipo de saida meu caso foi intel (os famosos .hex usado em pic) seguido do nome do arquivo de saida (pode usar o argumento -show_types para exibir todos os tipos), por fim o nome do nosso arquivo fonte (não é necessario seguir essa ordem voce pode colocar o codigo fonte primeiro depois os outros ou vice versa respeitando apenas os valores dos argumento por exemplo o tipo de processador depois do -P)

tpasm -P z80 -o intel kodo.hex kodo.asm

http://i65.tinypic.com/vzh1de.jpg

dependendo a onde voce for jogar esse binario é necessario que esteja em binario puro e não em formato intel, nesse caso voce pode usar o objcopy para recortar apenas os bytes do binario

objcopy -I ihex kodo.hex -O binary kodo.bin

para testa usei o simulador da oshonsoft, como resultado o registrador A deve ficar com o valor 0x60 naquele meu programa

http://i64.tinypic.com/hululy.jpg

bom galera é isso tem muitas arquiteturas para qual podemos compilar com o tpasm ^^

by kodo no kami
#12
Citação de: tvtoon online Abril 28, 2017, 11:13:54 AM
Tutorial pra comer mulé com Arduino, Hobby Master, Samba, OpenVPN, Scheme e interface em Delphi comofas/

Snort é peba, raquo de verdade usa arp e nerdstat! :toligado:

Isso me deu uma idéia, só falta as mulé e o país certo... :parabens:

ta ai uma coisa que eu tambem gostaria de aprender kkkk, talvez ligar um dispositivo com arduino em um lado e outro arduino no outro lado sicronizar os dois via rede daria para fazer altas tretas :huh:

tipo tenho um tutorial do samba e openvpn depois posto eles \o
#13
então galera quase todo mundo uma vez ou outra acaba ficando preocupado com a segurança do computador seja por causa de um virus qualquer ou ate de um hacker invadir o computador e roubar os dados (ahh meus nudes kkk), embora a maioria dos ataques hoje seja voltados a engenharia social e não é atoa ja que o lado mais fraco do sistema é o ser humano que o controla ou seja se a gente nao baixar o malware o computador nao sera infectado por um (tirando alguns tipos especificos é claro como o worms e auto-infect), mesmo usando nosso antivirus preferido que consideramos como o melhor não estamos seguros isso por que ate mesmo o antivirus é possivel burlar bastando usar um crypter para deixar o malware indetectável e isso vale para qualquer antivirus independente se é pago ou nao (ou aqueles que instala automaticamente e magicamente do nada, saporra de antivirus é o proprio virus kkk), com isso a gente nao pode deixar toda a segurança baseada em um antivirus isso é se ele é possivel burlar o que vai te proteger entao contra uma invasão? no caso um bom firewall bem configurado pode deixar seu sistema mais seguro contra alguns tipos especificos de malwares principalmente os de acesso remoto (trojan, backdoor, rat), uma boa sandbox pode proteger seu sistema contra modificação de alguns virus, outra ferramenta sendo ela que vamos ver nesse tutorial são os detectores de intrusos tambem chamado de IDS, os detectores de intruso detecta padroes específicos de ataque especificos e com base neles é possivel detectar um ataque em tempo real e com isso tomar determinadas medidas durante um ataque, o IDS que vamos ver nesse tutorial é o snort que é uma ferramenta com base em comandos e pode ser baixado no site oficial ela tem tanto para windows quanto para linux

site oficial

o snort funciona como um sniffer ou seja ele é um IDS passivo que fica capturando os pacotes passados pela rede ou pela maquina dependendo da topologia ou do que os conecta, ele tambem permite armazenar os pacotes que podem ser lidos por outros programas como tcpdump e wireshark, alem de ser possivel filtrar pacotes especificos e ignorar os outros ou seja se voce fosse detectar ataques de DNS nao precisaria mexer com pacotes TCP ja que o DNS usa UDP ou ate melhor filtra apenas a porta de DNS, o snort trabalha com regras especificas e é por essas regras que detectamos padroes de ataque ou seja voce pode criar regras especificas para ataques especificos (descubra como um ataque funciona com isso voce vai descobrir como atacar da mesma forma e ao mesmo tempo vai aprender a se proteger desse ataque), com o snort voce sabendo como o ataque funciona voce pode criar uma regra que detecta esse ataque e é isso que vamos aprender mais para frente criar regras e usar ferramenta a snort, antes disso vou dizer uma coisa bem legal uma forma de usar uma maquina para proteger a rede toda vamos ver a melhor topologia para o uso dele no caso, como ja sabemos o snort é passivo ou seja fica apenas capturando entao ou trafego da rede precisa passar pela maquina que é snort antes das outras ou usar um hub (no caso o hub ele envia o pacote para todas as portas dele ou seja independente se o pacote e para a maquina ou nao ela vai receber o pacote, diferente do que acontece com um switch ou roteador), outra coisa que precisamos é usar a maquina snort conectada diretamente ao modem como ponte (bridge) isso por que alguns modens tambem atua como roteador e eles mesmo fazem a conexao com o provedor e ao mesmo tempo NAT com a rede interna ou seja toda a maquina ligada ao modem seja por um hub estaria conectada a internet diferente do modo bridge que cada maquina teria que fazer a conexao com provedor para esta ligada a internet (esse modo é menos usado por que os provedores limita a quantidade de conexao ja que cada conexao de cada maquina sua recebe um IP valido do provedor ou seja muitas maquinas dos clientes acabaria esgotando o range de IP do provedor diferente do modo roteador ou ate usar um roteador mesmo para conectar no modem ja que so receberia um IP), entao kodo se é limitado por que usar esse modo? pelo simples fato que o modo bridge nao precisa abrir porta ja que todas as portas referente ao modem e aquele IP vai esta liberada para aquela maquina especifica por outro lado se usar o modo roteador e a pessoa de fora tentar invadir seu servidor http que esta na sua maquina se nao estiver liberado a porta nem vai chegar na sua maquina com isso o snort nao vai detectar a tentativa de invasao, uma forma de contonar as conexões do modo bridge é transformar sua maquina em um servidor de proxy ou seja todas as maquina na rede interna usa a sua maquina para conectar a internet outra forma seria tranforma sua maquina em um roteador que é mais facil no linux ja que é so setar um numero em arquivo

http://i65.tinypic.com/1212zc0.jpg

com essa topologia a maquina que tem o snort pode tanto capturar os pacotes que vem da internet quanto os ataques que parte de dentro da rede (temos que considerar tambem que nao é topologia mais segura ja que se a maquina snort for comprometida ja era voce vai ter grandes problemas kkk), bom esquecendo um pouco a parte teorica se nao isso aqui vai ficar um pouquinho grande vamos aprender usar o snort no caso nao vou abordar a instalação dele ja que nao é muito complicada porem se tiver duvida eu faço um tutorial apenas da instalação dele \o, o primeiro comando que a gente pode ver no snort é apenas ele sem nenhum argumento isso faz ele capturar os pacote como sniffer

snort

http://i64.tinypic.com/jhra11.jpg

o comando anterior vai fazer ele capturar os pacotes conforme a gente for navegando na internet ele vai mostrar um cabeçalhos simples do pacote sendo a hora, o IP e a porta da fonte seguido do IP do destino, entre outras informaçoes como tamanho pacote e flags do protocolo, para a gente parar a captura basta apartar control+c e com isso no final mostra os tipos e estatisticas dos pacotes capturados

http://i67.tinypic.com/1406ls.jpg

a gente pode usar o argumento -e para mostra um pouco mais de informações como MAC e outros referente a camada de enlace

snort -e

http://i63.tinypic.com/2unwlte.jpg

com o argumento -d mostra os bytes do pacote

snort -d

http://i68.tinypic.com/bi1csg.jpg

podemos usar o argumento -C para mostrar os caracteres sem o codigo hexadecimal sendo bom para capturar cookies e strings alem de outras headers, no caso esse comando deve ser usado em conjunto com anterior podendo ser usado separadamente dessa forma

snort -d -C

ou junto dessa forma (podendo inverter tambem e o mesmo vale para outros argumentos)

snort -dC

http://i64.tinypic.com/dpzf4z.jpg

o -l permite a gente escolhe o diretorio onde sera armazenado os logs do pacote, quando a gente usa esse argumento  nao é mostrado os pacotes capturados apenas armazenados em um arquivo no diretorio escolhido

snort -l /home/kodo/Desktop

http://i66.tinypic.com/231wm1.jpg

podemos usar o -K para escolher o tipo de log que sera salvo sendo eles pcap (padrao) e ascii que gera diretorios para cada IP e dentro deles arquivos com texto logs

snort -l /home/kodo/Desktop -K ascii

para ler o log podemos usar o proprio snort com o argument -r seguido do arquivo (tambem é possivel usar os argumentos anteriores nele como -de)

snort -r snort.log.1453120877

ou abrir o arquivo em algum outro programa que aceite logs pcap como por exemplo o wireshark

http://i66.tinypic.com/350uqno.jpg

para especificar uma interface de rede usamos -i

snort -i eth0

para capturar um numero maximo de pacotes usamos -n seguido da quantidade

snort -n 1000

podemos usar o -q para nao exibir o banner e nem as estatisticas no final

snort -q

para filtrar pacotes especificos usamos o -f seguido do filtro, para filtrar uma porta especifica usamos port seguido da porta (como existe espaço no filtro deve ser colocado entre aspas)

snort -f "port 80"

para filtrar apenas portas de destino especificas usamos o filtro "dst port" seguido da porta

snort -f "dst port 80"

para filtrar portas da fonte usamos "src port" seguido da porta

snort -f "src port 80"

com a logica or podemos especificar dois ou mais argumentos para o filtro (assim podemos capturar tanto o pacote que vai para o servidor quanto o que vem dele embora o mesmo possa ser feito apenas usando o port)

snort -f "dst port 80 or src port 80"

podemos usar o or para especificar varias portas ao mesmo tempo

snort -f "port 80 or port 21 or port 443 or port 22"

tambem é possivel especificar protolocos como tcp, udp, icmp, arp, sctp, entre outros

snort -f "tcp"

pode ser combinado com a logica or tambem

snort -f "tcp or udp"

com a logica and apenas se todos os argumentos forem satisfeito o sera filtrado com isso podemos especificar filtros mais preciso

snort -f "udp and port 53"

com a logica not ele inverte a logica por exemplo "not udp" ele mostra qualquer pacote que nao seja udp

snort -f "not udp"

tambem podemos especificar um ip da fonte sendo ele src seguido do ip

snort -f "src 192.168.1.1"

ou do destino sendo dst seguido do ip

snort -f "dst 192.168.1.1"

agora a gente ja pode fazer uma combinação de comandos no snort

snort -qdeCf "port 53 and udp"

http://i64.tinypic.com/119ozd0.jpg

bom galera ate agora a gente apenas viu o funcionamento do snort como sniffer vamos ver o funcionamento dele como IDS e criar regras na segunda parte do tutorial entao ate la \o

======================
2 parte
======================

e ae galera continuando o tutorial anterior de snort nesse vamos criar regras especificas para ele detectar algum ataque especificos, lembrado o snort é um ids passivo que detectar padrões de ataques sobre regras pre-definidas ou seja se voce conhece o ataque voce consegue detectar ele, as regras que ja vem por default no snort fica no diretorio /etc/snort/rules onde tem diversas regras onde podemos abrir em um editor de texto e estuda-las

http://i63.tinypic.com/wgyp3m.jpg

por padrao o snort nao carrega essas regras direto daquela diretorio e sim de um arquivo snort.conf que fica em

/etc/snort/snort.conf

sendo essas regras incluídas atraves da diretiva include seguido do local da regra no arquivo snort.conf

http://i68.tinypic.com/wsw7ex.jpg

no caso a gente pode criar nosso arquivo com a nossa regra colocar la nos diretorios rules e depois incluir dentro do arquivo snort.conf ou entao podemos criar um novo snort.conf podendo ser outro nome tambem nao necessariamente snort.conf, porem criar um arquivo snort.conf novo pode gerar varios problemas principalmente se a gente usar uma regra ja existente que use variaveis que foram definidas no arquivo snort.conf original, para a gente chamar o arquivo de configuração com as regras basta usar o argumento -c seguido do local do arquivo, tambem precisamos definir o local onde sera armazenado os logs com o argumento -l seguido do diretorio

snort -c /etc/snort/snort.conf -l /home/kodo/Desktop

http://i67.tinypic.com/6nyv53.jpg

sera gerado dois arquivos o arquivo normal de dump dos pacotes e o arquivo alert onde sera armazenado logs de invasão que vamos ver mais para frente, como dito antes a gente pode criar o nosso arquivo de configuração novo tambem (no caso vamos usar um arquivo novo e nao o snort.conf)

snort -c /home/kodo/Desktop/kodosnort.conf -l /home/kodo/Desktop

agora que a gente ja sabe como carregar arquivos de configuração vamos entender como as regras funciona, as regras se dividem em varias partes a primeira define o tipo de regra existe varios tipos porem vamos nos focar nesse tutorial no tipo alert que gera um alerta quando uma regra é detectada no pacote e com isso armazenado no arquivo alert, depois do tipo de regra temos o tipo protocolo que pode ser tcp ou udp, depois temos o IP da fonte no pacote seguido da porta da fonte, logo em seguida IP de destino seguido da porta destino, e por fim entre parenteses as opções

[Tipo] [Protocolo] [IP SRC] [Porta SRC] -> [IP DST] [Porta DST] (Opçao)

um exemplo basico seria isso, onde ele detecta apenas se o pacote estiver setado com o IP da fonte 192.168.1.1 e a porta da fonte for 10000 sendo enviado para o IP de destino 192.168.1.2 para porta 80 usando protocolo tcp

alert tcp 192.168.1.1 10000 -> 192.168.1.2 80 (sid: 1000001)

quando a gente precisa definir qualquer porta ou qualquer IP onde nao conhecemos podemos usar a palavra any, diferente do exemplo anterior que para detectar ele deveria detectar tudo no exemplo abaixo ele detecta qualquer pacote que tenha como destino o IP 192.168.1.1 na porta 80

alert tcp any any -> 192.168.1.1 80 (sid: 1000001)

o mesmo vale para o oposto que detecta o pacote que saiu daquela maquina

alert tcp 192.168.1.1 80 -> any any (sid: 1000001)

podemos criar varias regras uma em baixo da outra

alert tcp 192.168.1.1 80 -> any any (sid: 1000001)
alert tcp any any -> 192.168.1.1 80 (sid: 1000002)


o exemplo anterior tambem poderia ser feito dessa forma que indica que comunicação pode ser de ambos os lados

alert tcp 192.168.1.1 80 <> any any (sid: 1000001)

a gente pode definir uma rede ao inves de um IP bastando colocar o IP da rede e mascara de rede

alert tcp 192.168.1.0/24 any -> any any (sid: 1000001)

podemos definir varios IPs colocando entre colchetes e separados por virgula (o mesmo pode ser feito com portas)

alert tcp [192.168.1.1,192.168.1.2] any -> any any (sid: 1000001)

é possivel usar negação com o exclamação para inverter a logica, por exemplo para definir qualquer pacote que sera enviado para fora da rede (que nao seja aquela rede)

alert tcp 192.168.1.0/24 any -> !192.168.1.0/24 any (sid: 1000001)

agora vamos da uma analisada no log alert para entender ele, para isso vou usar a seguinte regra aqui qualquer pacote que for para o IP 192.168.1.1 que é essa maquina na porta 21 ou seja quero detectar ftp

alert tcp any any -> 192.168.1.1 21 (sid: 1000001)

http://i68.tinypic.com/350t1j9.jpg

na maquina ubuntu (192.168.1.2) eu vou fazer a conexao ftp na maquina debian (192.168.1.1)

http://i64.tinypic.com/ie0c9h.jpg

com isso gero nosso alert porem gero varios alertas isso por que ouve varios pacotes de comunicação entre as duas maquinas, no arquivo existe na primeira linha [**] Snort Alert! [**] que é nada mais nada menos mensagem (podemos customizar a mensagem na opção da regra),  o segundo é prioridade que por padrao é 0 tambem é possivel mudar ela na opção da regra, depois temos o tempo 02/15-07:28:56.632123 que é data e a hora que foi gerado o alerta, seguido do IP e porta da fonte e o IP e porta de destino 192.168.1.2:48950 -> 192.168.1.1:21, na linha de baixo temos o procotolo que nesse caso é o TCP, o TTL que é o tempo de vida do pacote em uma rede para evitar loops infinito, e algumas outras informações que nao é importante por enquanto como tamanho do pacote entre outras coisa, na linha de baixo temos as flags que sao extremamente importantes ja que por elas a gente pode detectar se um pacote esta iniciando uma comunicação ou a finalizando nesse caso a flag do primeiro pacote é S (syn) entao a comunicação esta sendo iniciada ******S*, depois disso temos mais algumas informações referente ao pacote (caso tenha duvida ou interesse em se aprofundar recomendo estudar rede para ser mais especifico a pilha de protocolo tcp/ip)

http://i64.tinypic.com/2ntjnnl.jpg

a opção que temos que setar para criar um alerta que nao pode faltar é o sid (Snort ID), essa é unica opção que nao pode faltar em nenhum alerte se nao o snort nem roda e cada novo alerta a sid deve ser diferente da outra, é recomendado colocar sid acima de 1000000 ja que sid baixa pode ser que esteja em alguma regra especifica, para usar a sid basta digitar ela dentro da opção seguido de dois pontos e o numero

alert tcp 192.168.1.1 21 -> any any (sid: 1000001)
alert tcp any any -> 192.168.1.1 21 (sid: 1000002)
alert udp any any -> any 53 (sid: 1000003)


as vezes voce faz revisão da sua regra e com isso voce pode usar a opção rev seguido do numero da revisao (quando existe duas ou mais opções deve ser separado por ponto e virgula e tambem nao importa a ordem)

alert tcp any any -> any 3306 (sid: 1000001 ; rev: 10)

com a opção msg podemos definir a mensagem

alert tcp any any -> 192.168.1.1 21 (msg: conexao ftp ; sid: 1000001)
alert tcp any any -> 192.168.1.1 22 (msg: conexao ssh ; sid: 1000002)
alert tcp any any -> 192.168.1.1 80 (msg: conexao http ; sid: 1000003)


http://i66.tinypic.com/3149kro.jpg

para especificar uma flag usamos a opção flags seguido das letras que representa ela, o bom da flag é que podemos diminuir a quantidade de pacotes capturados principalmente quando queremos apenas detectar a conexao e nao todo pacote referente a conexao

alert tcp any any -> 192.168.1.1 80 (msg: conexao http; flags: S; sid: 1000001)

tambem podemos especificar a prioridade com priority seguido do numero

alert tcp any any -> 192.168.1.1 80 (msg: conexao http; priority: 3; sid: 1000001)

podemos checar o conteudo dentro do pacote com content, veja um exemplo de uma falha LFI

alert tcp any any -> 192.168.1.1 80 (msg: ataque LFI; content: "../../../"; sid: 1000001)

http://i67.tinypic.com/9zyav6.jpg

no log foi detectado a tentativa de invasao pela falha LFI

http://i67.tinypic.com/pw3d0.jpg

podemos usar bytes especifico no lugar de carecteres usando duas vezes o pipe e o codigo dos bytes no meio em hexadecimal, por exemplo a exploração de uma falha SQL Injection (sqli) onde se coloca aspas no final para ver se retornar erro do banco de dados sendo esse aspas convertido para urlencode %27 pelo proprio navegador e passado como o metodo

alert tcp any any -> 192.168.1.1 80 (msg: ataque SQLI; content: "|253237|" ; sid: 1000001)

http://i66.tinypic.com/2sbtr36.jpg

no log foi detectado a tentativa de invasão por SQL Injection

http://i68.tinypic.com/2uszblz.jpg

entao galera eu ate pensei em construir um sisteminha vuneravel para esse exemplo (so que a preguiça nao deixo kkk ). e mesmo assim o intuito aqui nao é mostrar as falhas em si mais sim que a ferramenta pode detectar a tentativa de exploração dela, no caso do snort basta conhecer o padrao da falha que voce consegue criar uma regra para ele detectar ela, bom galera esse tutorial esta fincando um pouco grande entao vou continuar em uma 3º parte ja que esse assunto é bem extenso e ainda tem muita coisa para falar \o

by kodo no kami
#14
Assuntos Diversos / [tutorial] API shodan python
Abril 28, 2017, 00:55:53 AM
bom galera eu ja escrevi um artigo sobre o motor de busca shodan, ja ensinei como usar um auxiliary do shodan no metasploit, agora vamos ver como usar uma API do shodan em python, como ja citei o shodan é um motor de busca parecido com o google porem diferente do google que retorna apenas links de sites o shodan retorna informações de servidores como os cabeçalhos daquele servidor, o shodan é usado constantemente para levantamento de informação sobre tal servidor ou ate mesmo busca de servidores especifico como as versões do mesmo, voce pode usar o shodan para diversos fins como criar um sistema de estatisticas ou ate mesmo para fins maliciosos como ataques em grande escala (que não é o nosso caso ~ por outro lado se estiver procurando pessoal para trampo em segurança e programação quem sabe \o), para começar temos que baixar esse modulo então podemos usar o pip (bom galera to com uma baita preguiça de reiniciar para o linux entao vou esta usando o windows nesse tutorial como tambem funciona no linux e esse modulo funciona tanto no python2 quanto no python3)

pip install shodan

ou direto no python

python3 -m pip install shodan

https://i.imgur.com/pAje8Er.jpg

depois de instalado basta a gente logar no shodan e pegar nossa APIKey

https://i.imgur.com/5xJ0n5G.jpg

com a APIKey em mãos criamos o nosso script, pra começar importamos o modulo do shodan

#!/usr/bin/python3

import shodan


agora instanciamos o shodan.Shodan passamos como argumento para ele nossa APIKey

#!/usr/bin/python3

import shodan

kodo = shodan.Shodan("MINHA_APIKEY")


agora podemos usar alguns metodos entre eles o search que nos permite retornar determinada pesquisa, para usar o search passamos como argumento a pesquisa e atribuimos o retorno para uma variavel

#!/usr/bin/python3

import shodan

kodo = shodan.Shodan("MINHA_APIKEY")
kami = kodo.search("apache 2.2")


o retorno para a variavel sera uma matriz onde a primeira posição dela chamado "matches" tera toda busca, e a segunda posição sera "total" com a quantidade total encontrado, entao um exemplo que exibe apenas a quantidade total de busca encontradas seria isso

#!/usr/bin/python3

import shodan

kodo = shodan.Shodan("MINHA_APIKEY")
kami = kodo.search("apache 2.2")

print("total de pesquisa: ", kami["total"])


https://i.imgur.com/LkMqHmo.jpg

o matches tambem é uma matriz onde cada posição é um busca um servidor diferente

#!/usr/bin/python3

import shodan

kodo = shodan.Shodan("MINHA_APIKEY")
kami = kodo.search("apache 2.2")

print(kami["matches"][0])


https://i.imgur.com/DQH0KmR.jpg

para  ir alternando os servidores basta mudar a posição

#!/usr/bin/python3

import shodan

kodo = shodan.Shodan("MINHA_APIKEY")
kami = kodo.search("apache 2.2")

print(kami["matches"][30])


https://i.imgur.com/dfAGKhu.jpg

tambem podemos acessar essas informações como se fosse a propria posição na matriz

#!/usr/bin/python3

import shodan

kodo = shodan.Shodan("MINHA_APIKEY")
kami = kodo.search("apache 2.2")

print("ip: ", kami["matches"][12]["ip_str"])
print("info: ", kami["matches"][12]["info"])
print("produto: ", kami["matches"][12]["product"])
print("versao: ", kami["matches"][12]["version"])
print("porta: ", kami["matches"][12]["port"])


https://i.imgur.com/6xI9a2O.jpg

bom galera existem outros metodos alem do search nesse modulo sem dizer que a versão free do shodan é bem limitada permitindo retornar apenas uma certa quantidade de buscas

by kodo no kami
#15
Assuntos Diversos / [tutorial] container docker
Abril 27, 2017, 15:09:07 PM
e ae galera nesse tutorial vamos aprender mexer com docker, no caso o docker é um conteiner e seu funcionamento é parecido com as maquinas virtuais porem de uma forma totalmente diferente, em uma maquina virtual voce tem uma emulação do proprio sistema a nivel do kernel dele em cima de um sistema real quem faz essa emulação é a maquina virtual, em um conteiner voce tem apenas a execução dos proprios arquivos e diretorios do novo sistema em cima do kernel do sistema real de uma forma isolada, com isso voce vai ter um ganho alto em processamento e memoria ja que não necessita carregar todo o sistema operacional apenas os programas e bibliotecas necessario para rodar o mesmo, é possivel rodar distro diferentes do sistema real como um centos dentro do ubuntu real (porem sistemas em arquiteturas diferente nao funciona entao rodar um 64bits em um 32 nao vai funcionar), tambem é possivel abrir varios sistemas ao mesmo tempo, para começar a gente baixa o docker caso nao tenha ele, nas distros ubuntu e debian pode ser baixado pelo proprio repositorio da distro

sudo apt-get install docker

para testar apenas digitamos docker para mostrar as opções (necessario esta como root para usar o docker)

sudo docker

http://i65.tinypic.com/2n8to1s.jpg

com o docker instalado precisamos de uma image do sistema operacional, para conseguir uma procuramos no proprio repositorio do docker (tambem é possivel criar uma), para procurar usamos o comando docker search seguido de uma palavra no meu caso vou procruar por um fedora 32bits (alem de distros normais tambem existem distros com programas especificos ja instalado para facilitar)

sudo docker search fedora32

http://i65.tinypic.com/2d10g46.jpg

no caso eu quero o "hugodby/fedora32", podemos simplesmente executar ele caso nao exista localmente o proprio docker vai puxar ele do repositorio, para fazer isso usamos o comando docker run depois -t (tty) e -i (interativo), depois o nome do arquivo "hugodby/fedora32", por fim o que vamos executar nele nesse caso o bash do sistema "/bin/bash", como eu não tinha ele aqui então ele baixo aquele sistema fedora (132mb)

sudo docker run -t -i hugodby/fedora32 /bin/bash

http://i63.tinypic.com/2z7o2vr.jpg

depois de baixar voce vai cair no terminal do novo sistema

http://i65.tinypic.com/2rmnwjq.jpg

tudo que for executado ali é o mesmo que esta executando em um fedora, exemplo o repositorio yum que é do federa (red hat, centos) diferente do debian que é o apt

yum search netcat

http://i64.tinypic.com/33112q9.jpg

voce pode abrir quantos sistemas quiser bastando digitar aquele mesmo comando run, cada um sera uma instancia nova daquele que voce baixo e não o mesmo, veja 5 fedoras rodando ao mesmo tempo no mesmo sistema

sudo docker run -t -i hugodby/fedora32 /bin/bash

http://i64.tinypic.com/35a8z0m.jpg

para voltar para o terminal do sistema real sem fechar o virtual, seguramos o control depois apertamos "p" depois "q"

http://i63.tinypic.com/2wgf78h.jpg

para a gente listar todas as images dos sistemas usamos o comando docker images no sistema real

sudo docker images

http://i64.tinypic.com/o6mzpw.jpg

para listar todos os conteiner rodando usamos o comando docker ps

sudo docker ps

http://i64.tinypic.com/wheeqo.jpg

para a gente voltar para aquele container novamente usamos o comando docker attach seguido do id dele

sudo docker attach 997ee6d61487

http://i66.tinypic.com/24o9ds2.jpg

se a gente fechar esse container e abrir em uma nova instancia tudo que a gente fez sera perdido para salvar todas as alteração do container em um nova image usamos o comando docker commit seguido do id do container e depois o novo nome da image

sudo docker commit 997ee6d61487 kodofedora

http://i68.tinypic.com/1zecprb.jpg

como tambem podemos remover uma image com o comando docker rmi seguido do id da image

sudo docker rmi 2edbbfc9012d

http://i63.tinypic.com/fw81zd.jpg

bom galera existem muitos outros comando alem desses citados \o

by kodo no kami