Ir para conteúdo
  • Cadastre-se

gzn

Membros
  • Total de itens

    114
  • Registro em

  • Última visita

Reputação

34 Excellent

Dados pessoais

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

  1. gzn

    Ajuda com indentação

    Tem ferramentas que ajudam nessas coisas, uma delas é o astyle. Se você estiver usando uma distribuição como Ubuntu basta digitar no terminal: sudo apt -y install astyle Aí é só você ter um arquivo de configuração pessoal, ex.: > $ cat ~/.astylerc --style=java --indent=spaces=4 --indent-preprocessor --pad-oper --pad-header --max-instatement-indent=40 --align-pointer=name --align-reference=name --keep-one-line-statements --convert-tabs --max-code-length=79 --pad-method-colon=none Original: // main.c int teste(int a, int b) { return a+b; } int main(void) { int a=1; char b = 'a'; } Modificado: astyle main.c // main.c int teste(int a, int b) { return a + b; } int main(void) { int a = 1; char b = 'a'; } O arquivo original por padrão é renomeado para main.c.orig. Eu particularmente gosto do estilo Java porque foi a primeira linguagem de programação que realmente aprendi (e estou aprendendo!) a programar. Acostumei muito a colocar as chaves desse jeito aí acima como ficou formatado e outras coisas. Se você quiser mudar é só alterar o parâmetro --style ou usar as opções disponíveis e personalizar seu estilo particular.
  2. gzn

    Procurar Keys no registro

    Parece que você está começando a programar... Conhece o stackoverflow? Try it: https://stackoverflow.com/search?q=Checking+if+a+registry+key+exists+[c]
  3. Como procurar por instruções? vagrant@ubuntu-bionic:/vagrant$ r2 /bin/ls -- This is just an existentialist experiment. [0x00005850]> /a push 0 Searching 2 bytes in [0x0-0x1e6e8] hits: 10 Searching 2 bytes in [0x21eff0-0x221560] hits: 2 0x000010b8 hit0_0 6a00 0x00001b79 hit0_1 6a00 0x00001cf9 hit0_2 6a00 0x0000365c hit0_3 6a00 0x00003e27 hit0_4 6a00 0x0000442b hit0_5 6a00 0x000082db hit0_6 6a00 0x00012d15 hit0_7 6a00 0x0001d0dc hit0_8 6a00 0x0001e2c4 hit0_9 6a00 0x0021f089 hit0_10 6a00 0x0021f129 hit0_11 6a00 Veja que foi gerado uma lista com algumas informações: o endereço onde foi encontrado a instrução, uma flag associada ao endereço, os bytes da instrução. Com isso nós podemos por exemplo, imprimir o disassembly da instrução em cada um desses endereços: [0x00005850]> pd 1 @@ hit0* ;-- hit0_0: 0x000010b8 6a00 push 0 ;-- hit0_1: 0x00001b79 6a00 push 0 ;-- hit0_2: 0x00001cf9 6a00 push 0 ;-- hit0_3: 0x0000365c 6a00 push 0 ;-- hit0_4: 0x00003e27 6a00 push 0 ;-- hit0_5: 0x0000442b 6a00 push 0 ;-- hit0_6: 0x000082db 6a00 push 0 ;-- hit0_7: 0x00012d15 6a00 push 0 ;-- hit0_8: 0x0001d0dc 6a00 push 0 ;-- hit0_9: 0x0001e2c4 6a00 push 0 ;-- hit0_10: 0x0021f089 6a00 push 0 ;-- hit0_11: 0x0021f129 6a00 push 0 [0x00005850]> O padrão hit0* expande para todos as flags que começam com hit0. O comando pd 1 imprime o disassembly de uma instrução no endereço atual. Veja, essa técnica é útil também para casos em que você quer aplicar um simples patch em vários endereços que tenham uma dada instrução (talvez uma chamada de função, um salto condicional, etc.). Dá também para procurar pelo tipo de instrução: [0x00005850]> /A push 0x000002b0 5 push 0xd0 0x00000f48 5 push 0x2202 0x000010b8 2 push 0 0x00001211 5 push 0x72747300 0x00001236 5 push 0x61657200 0x0000126e 5 push 0x6c6e755f 0x000014c6 5 push 0x6b6e75 0x0000174d 5 push 0x6569645f 0x00001b08 5 push 0x21f0 0x00001b79 2 push 0 0x00001c28 4 enter 0x21f0, 0 0x00001da8 5 push 0x21f1 0x00001ec8 4 enter 0x21f1, 0 0x000020f0 4 enter 0x21f2, 0 0x00002130 2 push 0xffffffffffffff80 0x00002990 5 push 0x2200 0x00002a98 5 push 0x2201 0x00003338 5 push 0x21fe 0x00003638 5 push 0x21ff 0x00003786 5 push 0 0x00003796 5 push 1 0x000037a6 5 push 2 0x000037b6 5 push 3 0x000037c6 5 push 4 0x000037d6 5 push 5 0x000037e6 5 push 6 0x000037f6 5 push 7 0x00003806 5 push 8 0x00003816 5 push 9 ... Se for a primeira vez que você faz esse tipo de pesquisa as flags começarão com hit0, se for a segunda, hit1, e assim por diante: [0x00005850]> pd 1 @@ hit0* ;-- hit0_0: 0x000002b0 68d0000000 push 0xd0 ;-- hit0_1: 0x00000f48 6802220000 push 0x2202 ;-- hit0_2: 0x000010b8 6a00 push 0 ;-- hit0_3: 0x00001211 6800737472 push 0x72747300 ;-- hit0_4: 0x00001236 6800726561 push 0x61657200 ;-- hit0_5: 0x0000126e 685f756e6c push 0x6c6e755f ;-- hit0_6: 0x000014c6 68756e6b00 push 0x6b6e75 ;-- hit0_7: 0x0000174d 685f646965 push 0x6569645f ;-- hit0_8: 0x00001b08 68f0210000 push 0x21f0 ;-- hit0_9: 0x00001b79 6a00 push 0 ;-- hit0_10: 0x00001c28 c8f02100 enter 0x21f0, 0 ... Quais são os tipos suportados para passar para /A? [0x00005850]> /A?|sort|column -c80 acmp cmp io mod not ret shl switch unk add cpl jmp mov null rol shr sync upush and crypto lea mul or ror store trap xchg call div leave new pop sal sub ucall xor case ill load nop push sar swi ujmp
  4. Como usar um decompilador com radare2? Um dos melhores decompiladores que já testei até o momento foi o retdec, segue abaixo um simples script que pode ser adaptado para você instalar o retdec na sua máquina. # retdec [ -d retdec ] || git clone https://github.com/avast-tl/retdec.git pushd retdec sudo apt-get install build-essential cmake git perl python3 bash bison flex autoconf automake libtool pkg-config m4 coreutils zlib1g-dev libtinfo-dev wget bc upx doxygen graphviz nodejs npm cd retdec mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/opt/retdec make sudo make install for f in /opt/retdec/bin/* do sudo ln -s $f /bin/$(basename $f) done echo /opt/retdec/bin/retdec-decompiler.sh | tee ~/.r2retdec r2pm init r2pm -i r2retdec popd https://asciinema.org/a/QbyBxxgTKy9oL6uw3aP0lDVhD
  5. Gerando assinaturas de funções Já teve casos em que você queria analisar um binário ligado estaticamente cujos símbolos foram removidos? Vamos a um exemplo de caso: // main.c int main(int argc, char *argv[]){ puts("Olá"); return 0; } Vamos gerar um executável dele com os símbolos e um sem. $ gcc -static -o main main.c $ cp main{,2} $ strip -s main2 Vamos abrir o main (que tem os símbolos) e gerar assinaturas com base nas funções encontradas nele: $ r2 -qc 'aaf;zg;z* > main.r2' main $ head main.r2 zs * za fcn.0047f498 b e8........4883c4084889c34889df5b5de9........ za fcn.0047f498 g cc=2 nbbs=1 edges=1 ebbs=0 za fcn.0047f498 o 0x0047f498 za fcn.0047f498 r sym._dl_allocate_tls_storage sym._dl_allocate_tls_storage sym._dl_allocate_tls_init zs * za fcn.0041f650 b 4883c41831d24889d05b5dc3 za fcn.0041f650 g cc=1 nbbs=1 edges=0 ebbs=1 za fcn.0041f650 o 0x0041f650 zs * aaf: tenta encontrar todas as funções zg: gera as assinaturas z*: mostra na tela (stdout) as assinaturas com a sintaxe do radare, redirecionamos para o arquivo main.r2 Agora vamos abrir o binário que está sem símbolos (main2) mas que sabemos usar a mesma bibliotecas que usamos no que está com símbolos (main): r2 -qc '. main.r2;z/;aaa;pdf @ `axt @ sign.bytes.sym.puts_0 ~[1]`' main2 ;-- main: ┌ (fcn) sign.bytes.sym.main_0 34 │ sign.bytes.sym.main_0 (); │ ; var int local_10h @ rbp-0x10 │ ; var int local_4h @ rbp-0x4 │ ; DATA XREF from 0x00400a4d (entry0) │ 0x00400b4d 55 push rbp │ 0x00400b4e 4889e5 mov rbp, rsp │ 0x00400b51 4883ec10 sub rsp, 0x10 │ 0x00400b55 897dfc mov dword [local_4h], edi │ 0x00400b58 488975f0 mov qword [local_10h], rsi │ 0x00400b5c 488d3da11509. lea rdi, [0x00492104] ; "Ol\u00e1" │ 0x00400b63 e8a8f60000 call sign.bytes.sym.puts_0 │ 0x00400b68 b800000000 mov eax, 0 │ 0x00400b6d c9 leave └ 0x00400b6e c3 ret . main.r2: carrega as assinaturas z/: analisa a memória a procura das assinaturas aaa: encontra funções e nomeia elas automaticamente pdf @ `axt @ sign.bytes.sym.puts_0 ~[1]`': mostra o disassembly da função que tiver o endereço sign.bytes.sym.puts_0 Para ver as assinaturas e fazer um grep, faça o seguinte: fs sign f ~puts 0x00410210 407 sign.bytes.sym.puts_0 0x0046f6d0 311 sign.bytes.sym._IO_fputs_0
  6. gzn

    CTF da FACOM na Techweek

    @Leandro Fróes, sim, só presencial. Infelizmente eu também não vou poder participar, pois me convidaram muito em cima da hora e quanto fui me inscrever, descobri que já tinha esgotado as vagas dias atrás... É meu amigo, fica para uma próxima ocasião! 😐 Mas, quem sabe eles disponibilizam os desafios no https://ctf-br.org/, porque são eles é que tão organizando isso parece...
  7. gzn

    CTF da FACOM na Techweek

    Olá meus amigos, meu prof. divulgou hoje para os alunos da minha classe que teremos um evento bacana em Uberlândia/MG sobre várias áreas ligadas a TI, mas principalmente programação. Olhei a programação dos eventos e vi que terá um CTF, semana que vem, dia 23/05 as 21:00 no Campus Santa Mônica! Se quiser participar, acesse o site da inscrição para maiores informações: http://www.techweek.facom.ufu.br/inscricoes-2018 Não sei ainda como vai ser esse CTF, mas fiquei curioso para saber o nível de dificuldade que seriam os desafios e se seria acessível para quem está começando (eu!) Não posso dizer que estarei presente nesse dia, no entanto, recomendo a participação! Abraço galera, valeu! 😃
  8. gzn

    Editar/criar conteúdo do livro

    @Lucas Rodrigues muito interessante esse seu comentário amigo. Segue um trecho da conversa que tive com @Fernando Mercês no discord sobre edição colaborativa: gzn - Ontem às 16:24 permite la uns PR que a galera quando ver algo envia a correção:grinning: :ok_hand: fernandom - Ontem às 18:42 tenho pensado nisso mas ainda não achei um jeito muito simples vou integrar com o github em breve... to indo devagar, até porque tem todo um estilo de escrita que não quero quebrar. Nunca escrevi um livro à várias mãos, então não sei como seria.
  9. gzn

    Problemas com um bug no for!

    Só o >= que deveria ser <= mesmo. Testa aí meu amigo, clica nesse link aqui (testei no site que o @Felipe.Silva falou). Aperte Run lá que você verá que funciona normalmente. Outra coisa... Melhora o nome das suas variáveis amigo: renomeie reprovados para nota ou nota_aluno (use reprovados para contar o número de reprovados, veja abaixo) como na string de apresentação dos dados você usou a terminologia total ao invés de quantidade total, renomeie essa variável qntd_alunos para total e incremente reprovados ao invés de j Lembre-se de que quanto melhor ficar o seu código, quanto mais inteligível, melhor. A primeira coisa é inteligibilidade, depois vem a otimização e outros ajustes. Sempre que você usar nas tuas mensagens um termo, tenta usar esse mesmo termo para dar nome as variáveis, esse é um bom início. 😀 Ex. de como ficaria seu printf no final com essas mudanças: printf("A quantidade de alunos reprovados foi de(reprovados/total): %d/%d",reprovados,total);
  10. gzn

    Conversor de bases

    Ficou bom o código, obrigado por compartilhar! No trecho: case 'A' : num = 10; break; case 'a' : num = 10; break; Será que daria para usar só um break? case 'A' : num = 10; case 'a' : num = 10; break; Ou então talvez usar a função tolower/toupper (ctype.h) . Talvez ficaria mais elegante, não sei rsrs Ah, também poderia ter usado funções como strlen: size_t tam = strlen(array);
  11. Como fazer um simples patch com radare? Asciinema: https://asciinema.org/a/180843. Como exemplo foi usado o seguinte desafio: https://shellterlabs.com/pt/questions/quals-2009/access-pass/. Comandos novos utilizados: wa[?] push ebp write opcode, separated by ';' (use '"' around the command) Comandos que poderiam ser utilizados: Para saber quantos bytes o opcode jmp 0x62d e seu argumento ocuparia: !rasm2 jmp 0x62d|egrep -o '.{2}'|wc -l Para saber quantos bytes tem uma instrução faça um seek em algum endereço onde há a instrução que você quer e digite: ? $l
  12. gzn

    Curso de Engenharia Reversa Online (CERO)

    Muito bom o curso, não tem igual em PT-BR meu amigo! rs Eu particularmente gosto muito quando você explica como resolver crackmes ou desafios de CTF, se puder incluir mais explicações com esses desafios seria muito bom. Bom, sou apoiador do projeto e recomendo a todos que sejam! Obrigado!
  13. gzn

    Programação Moderna em C

    Uma boa introdução para quem está começando a programar nessa linguagem! Parabéns! Futuros cursos em vídeo sobre C? Bom, minha sugestão talvez seria falar um pouco mais sobre como evitar que o software escrito em C fique inseguro, pois já vi algumas pessoas dizendo que isso é bem difícil de se fazer com C.
  14. gzn

    NoREpls

    Ei, muito bacana vocês publicarem os desafios aqui! ☺️ Só uma coisa! Por favor, quando forem colocar um binário em sites de upload comprimam o arquivo executável e coloquem uma senha nele (para não termos que desabilitar a proteção de nossos sistemas antes de passar para VM que faremos análise). Eu por exemplo tenho uma VM só com console para análise. Geralmente baixo o binário pelo host (porque nele eu tenho um navegador que suporta javascript) e passo o binário para analisar na VM. rs, aproveitei pra testar e ver se o olly 32bit roda no reactos https://prnt.sc/jf36yl @sombrakey se você resolveu depois escreve um write up aí para galera 😆
  15. gzn

    Como reportar falhas

    É, esse negócio é complicado, já vai fazer uns dois meses que reportei um problema de segurança no site da minha faculdade e até agora não foi mudado nada... E é uma coisa tão simples que eu penso: onde está a dificuldade em mudar isso? É difícil entender...
×