Jump to content

Fernando Mercês

Administradores
  • Content Count

    692
  • Joined

  • Last visited

Everything posted by Fernando Mercês

  1. Pra mim tá show. Parabéns mesmo!
  2. Pois é, apaguei aquela seção (que era pra falar dos projetos nossos mesmo), mas toquem aí!
  3. Opa, e aí brother beleza? Valeu pelas sugestões. Vamos lá: Deixo essa justamente para o @Ygor Da Rocha Parreira e cia. Sou zero à esquerda nisso. Se eu criar você promete popular? rs É que fica estranho uma área sem nenhum ou com poucos tópicos. Por isso fiz a de Bate-papo, onde se tópicos de um determinado assunto crescerem, eu crio uma área de movo. Mas se você tiver um post pra estrear, eu crio já! Abraço e não suma!
  4. Cara, isso foi engraçado. rsrs São bem feitos mesmo. Eu não tenho tempo pra dedicar infelizmente, mas cheguei a baixar o 1 e fiz o 2 também. O problema é que não lembro como fiz e teria que fazer tudo de novo para escrever sobre. Ou fazer um vídeo. Verei se consigo tempo. Acha que vale? Será que teve? Eu nunca ouvi falar não. Grande abraço, brother!
  5. Sim, uma pena que esta versão não tenha sido acabada e por isso algumas opções que havia na v1 simplesmente não existem na v2, como este caso da exclusão. Como o Olly tem a opção de incluir apenas um range de EIP específico, o cara aí no StackExchange fez duas faixas, excluindo as instruções que ele não queria, o que de fato não é nada prático. Outra opção é usar o Olly v1 mesmo. Abraço!
  6. Segue um "Hello, world" em MASM no Windows para os interessados. A graça do MASM é que, mesmo programando em Assembly, é possível chamar as funções da API do Windows (e de outras bibliotecas) usando o comando invoke. 1. Baixar e instalar o MASM32 SDK do site oficial (já vem o compilador, linker e também um editor). 2. Depois de instalado, abra o MASM32 Editor. Copie e cole o seguinte código: ; fonte: https://stackoverflow.com/questions/4568306/outputting-hello-world-in-masm-using-win32-functions .386 .model flat, stdcall option casemap: none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data szCaption db 'Hello', 0 szText db 'Hello, World!', 0 .code start: invoke MessageBox, NULL, offset szText, offset szCaption, MB_OK invoke ExitProcess, NULL end start 3. Salve o arquivo como hello.asm, clique em Project -> Assemble & Link. Um hello.exe será gerado. Explicando: .386 define o conjunto de instruções suportados pelo teu programa. O mínimo pra um EXE de 32-bits é .386, mas o MASM tem suporte à vários outros conjuntos de instruções (.386, .486, .586, .686, .mmx, etc). .model flat, stdcall flat diz respeito ao modelo de endereçamento de memória linear e vai fazer o compilador gerar EXE de 32-bits. Já stdcall, diz respeito à calling convention (como o Assembler vai gerar o código para chamadas de função, limpeza da pilha, passagem de argumentos, etc). Da documentação do MASM: option casemap:none Ativa o case sensitive, necessário para chamar as funções da API do Windows já que seus nomes são sensíveis ao caso. include Inclui as os headers (como se fossem os .h do C) já prontos do MASM para usar as bibliotecas do Windows. inbludelib Inclui o código compilado necessário para chamar tais bibliotecas da maneira que o MASM chama. É que quem desenvolve o MASM já escreveu e deixou tudo isso pronto para uso. .data Cria uma nova seção de dados no arquivo. O db define um ou mais bytes. À esquerda dele é o nome (como se fosse o nome de uma variável) que você escolhe e à direita os dados em si, no caso, uma sequência de bytes representando uma string terminada em NULL (byte 0x00). Há também o dw (para dword), dd (para double word), etc. .code Inicia uma seção de código. O label .start marca o início dela (o MASM requer o end start no fim). invoke Sendo parte da linguagem de alto nível do MASM, permite chamar as funções de acordo com a calling convention definida sem se preocupar em como os parâmetros serão passados, quem vai limpar a pilha, etc. Basicamente te permite programar em Assembly no estilo do C (o compilador trata das convenções). Os parâmetros são passados para a função depois do nome delas, separados por vírgula. O código fica lindo ó: Seria bem trabalhoso fazer tudo isso com outro assembler. Sei que o fasm tem umas facilidades também mas em nasm por exemplo seria loko. Só para colocar mais lenha na fogueira (de quem não gosta de HLA - High Level Assembly), o MASM tem umas macros maneiras pra ajudar quando criando loops, condicionais... Por exemplo, a macro .if/.endif substitui os loops com instruções CMP e Jcc: start: mov eax, 0deadbeefh .if eax == 2017 invoke MessageBox, NULL, offset szText, offset szCaption, MB_OK .endif invoke ExitProcess, NULL end start O resultado é: Claro que para quem está estudando Assembly é legal também trabalhar sem as macros e para isso o MASM funciona normalmente - basta usar as instruções direto. Você tem o poder da escolha se vai querer seus fontes raiz ou Nutella. :D
  7. Coisa rara hein galera. Aproveita! :-)
  8. Assisti um vídeo hoje maneiro sobre como um cara usando ER e o IDA corrigiu um bug no Guitar Hero: O cara além de manjar de ER pelo visto manja muito de edição de vídeo também! Fico imaginando quanto tempo ele levou pra fazer isso tudo! hehe Mas enfim, bem maneiro. Mostra o uso do IDA e uns conceitos bem legais de orientação à objetos (na visão do Assembly), uso de SecuROM (um protetor contra pirataria usado em jogos), etc. Vale assistir.
  9. Eu demorei para acreditar mas alguém dedicou tempo pra escrever um batch file (.BAT) ofuscado. Vou copiar aqui caso essa belezinha suma da Internet. :-D @echo off mode 200 echo »6356»4540»2951»6129»4086 »3178»7037»4994»4086»7718»6583»3405 »4086»7718»6129»4767»5448»4994»5902 »7718»2724»2724»4540»5675 >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »7037»2724 »4540»6810 »7718»5221»7037»2951 »5221»6129»7718»3632 »4540»4086»6129»5448»3405 »4540 »2270»7718»6583»6129'»2724 »6356»6129»5448»6583»6810»7718»5675. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »3405»2270»7037»2724 »6356»6129»5448»6583»6810»7718»5675 »2270»4540»2724 »4086»7718»6129»4767»5448»4994»5902 »5902»7037»3178»2270»3405 »2724»7718»7264»7718»6583»4540»4994 »2497»7037»5902»5902»7718»6583»7718»6810»3405 »3632»6129»6810»2724»3405»7718»6583»2724. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »4086»4540»3405»3405»4994»7718»2724 »4767»7037»3405»2270 »3178»6583»7718»6810»2497»7718»4994, »3178»6583»7718»6810»2497»7718»4994'»2724 »3632»6129»3632 »4540»6810»2497 »3405»2270»7718 »2497»6583»4540»3178»6129»6810, >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4540»6810»2497 »3405»2270»7718»5675 »4540»4994»4994 »2270»4540»7264»7718 »2497»7037»5902»5902»7718»6583»7718»6810»3405 »7037»3632»5221»4540»2951»3405»2724 »6129»6810 »2270»7037»2724 »6356»6129»5448»6583»6810»7718»5675 »4540»2724 »4540 »2270»7718»6583»6129. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »7037»6810 »4086»7718»6129»4767»5448»4994»5902'»2724 »5902»7037»6583»2724»3405 »4086»4540»3405»3405»4994»7718 »2270»7718 »5902»7037»3178»2270»3405»2724 »3178»6583»7718»6810»2497»7718»4994. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »4767»4540»6810»3405»7718»2497 »3405»6129 »2724»4540»7264»7718 »3405»2270»7718 »2497»4540»6810»7718»2724 »5902»6583»6129»3632 »3405»2270»7718 12 »5675»7718»4540»6583»2724 »6129»5902 »3178»6583»7718»6810»2497»7718»4994'»2724 »3405»7718»6583»6583»6129»6583. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »2270»7718 »4540»5221»5221»6583»4540»2951»2270»7718»2497 »3178»6583»7718»6810»2497»7718»4994 »4767»2270»7037»4994»7718 »2270»7718 »4767»4540»2724 »4540»2724»4994»7718»7718»5221. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »5448»4994»3405»7037»3632»4540»3405»7718»4994»5675, »3178»6583»7718»6810»2497»7718»4994'»2724 »4540»6583»3632 »4767»4540»2724 »6583»7037»5221»5221»7718»2497 »6129»5902»5902 »4540»6810»2497 »2270»7718 »6583»4540»6810 »4540»4767»4540»5675 »3405»6129 »4086»4994»7718»7718»2497 »3405»6129 »2497»7718»4540»3405»2270. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »4313»7718»5221»3405 »3178»6583»7718»6810»2497»7718»4994'»2724 »4540»6583»3632 »3405»6129 »2724»2270»6129»4767 »3405»2270»7718 »2497»4540»6810»7718»2724 »2270»7037»2724 »7264»7037»2951»3405»6129»6583»5675. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »3405»2270»7718»5675 »7264»7037»7718»4767»7718»2497 »2270»7037»3632 »4540»2724 »4540 »2270»7718»6583»6129 »4086»7718»2951»4540»5448»2724»7718 »6129»5902 »2270»7037»2724 »4540»2951»3405»7037»6129»6810»2724. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »3405»2270»7718 »2497»4540»6810»7718»2724 »5902»7718»4994»3405 »6810»6129 »2724»7718»6810»2724»7718 »6129»5902 »2724»6129»6583»6583»6129»4767 »3405»6129»4767»4540»6583»2497»2724 »3178»6583»7718»6810»2497»7718»4994'»2724 »2724»5448»5902»5902»7718»6583»7037»6810»3178. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »2270»6129»4767»7718»7264»7718»6583, »3405»2270»7037»2724 »4767»6129»5448»4994»2497 »6810»6129»3405 »4086»7718 »4086»7718»6129»4767»5448»4994»5902'»2724 »5902»7037»6810»4540»4994 »4086»4540»3405»3405»4994»7718. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »7037»6810 »4086»7718»6129»4767»5448»4994»5902'»2724 »2724»7718»2951»6129»6810»2497 »4086»4540»3405»5675»3405»4994»7718 »2270»7718 »5902»7037»3178»2270»3405»2724 »3178»6583»7718»6810»2497»7718»4994'»2724 »3632»6129»3405»2270»7718»6583. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4540»5902»3405»7718»6583 »3178»6583»7718»6810»2497»7718»4994'»2724 »2497»7718»5902»7718»4540»3405, »3178»6583»7718»6810»2497»7718»4994'»2724 »3632»6129»3405»2270»7718»6583 »3178»6129»7718»2724 »3405»6129 »2270»7718»6583»6129»3405 »3405»6129 »6583»7718»3405»6583»7037»7718»7264»7718 »2270»7718»6583 »2724»6129»6810'»2724 >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4540»6583»3632 »5902»6583»6129»3632 »4767»2270»7718»6583»7718 »4086»7718»6129»4767»5448»4994»5902 »2270»4540»2497 »2270»5448»6810»3178 »7037»3405. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »2724»2270»7718 »4313»7037»4994»4994»2724 »2270»6583»6129»3405»2270»3178»4540»6583'»2724 »2951»4994»6129»2724»7718»2724»3405 »5902»6583»7037»7718»6810»2497. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »2724»2270»7718 »4767»4540»6810»3405»7718»2497 »3405»6129 »3178»7718»3405 »6583»7718»7264»7718»6810»3178»7718 »6129»6810 »4086»7718»6129»4767»5448»4994»5902 »5902»6129»6583 »4313»7037»4994»4994»7037»6810»3178 »2270»7718»6583 »2724»6129»6810. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »5221»5448»6583»2724»5448»7718»2724 »3178»6583»7718»6810»2497»7718»4994'»2724 »3632»6129»3405»2270»7718»6583 »4540»5902»3405»7718»6583 »2270»7718»4540»6583»7037»6810»3178 »4540»4086»6129»5448»3405 »2270»7718»6583»6129»3405, »4086»7718»6129»4767»5448»4994»5902 »2497»7037»2724»2951»6129»7264»7718»6583»7718»2497 »3405»2270»4540»3405 >> btpfjjgtlkjvug.nsltcmaipoinmt echo »6810»6129 »2724»4767»6129»6583»2497 »2951»6129»5448»4994»2497 »2951»5448»3405 »2270»7718»6583, »2270»7718 »5902»7037»6810»2497»2724 »4540 »3632»4540»3178»7037»2951»4540»4994 »3178»7037»4540»6810»3405 »2724»4767»6129»6583»2497 »5221»6129»4767»7718»6583»5902»5448»4994 »7718»6810»6129»5448»3178»2270 »3405»6129 »5221»7718»7037»6583»2951»7718 »2270»7718»6583 »3405»2270»7037»2951»4313 »2724»4313»7037»6810. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »2951»5448»3405»2724 »6129»5902»5902 »3405»2270»7718 »2270»7718»4540»2497 »6129»5902 »3178»6583»7718»6810»2497»7718»4994 »5902»6583»6129»3632 »3405»2270»7718 »4994»4540»7037»6583 »3405»2270»4540»3405 »2270»7718 »2270»4540»2497 »6583»4540»6810 »3405»6129, >> btpfjjgtlkjvug.nsltcmaipoinmt echo »3405»2270»7718 »2270»4540»4994»4994 »4767»4540»2724 »5902»5448»4994»4994 »6129»5902 »3405»6583»7718»4540»2724»5448»6583»7718 »4086»5448»3405 »4540»4994»4994 »2270»7718 »3405»6129»6129»4313 »4767»4540»2724 »3178»6583»7718»6810»2497»7718»4994»2724 »2270»7718»4540»2497. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »4994»7718»4540»7264»7718»2724 »3405»2270»7718 »4994»4540»7037»6583 »4767»7037»3405»2270 »3405»2270»7718 »2497»4540»6810»7718»2724 »4540»6810»2497 »2270»6583»6129»3405»2270»3178»4540»6583, »4540»4767»4540»4313»7718»6810»7037»6810»3178 »3405»2270»7718 »2497»6583»4540»3178»6129»6810 »3405»2270»4540»3405 »2724»4994»7718»7718»5221»3405 »3405»2270»7718»6583»7718. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4540»4994»4994 »6129»5902 »3178»7718»4540»3405»4994»4540»6810»2497 »4313»6810»7718»4767 »3405»2270»7718 »2497»6583»4540»3178»6129»6810»2724 »4540»6810»3178»7718»6583. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »7037»6810 »4086»7718»6129»4767»5448»4994»5902»2724 »3405»2270»7037»6583»2497 »4086»4540»3405»3405»4994»7718 »2270»7718 »5902»7037»3178»2270»3405»2724 »3405»2270»7718 »2497»6583»4540»3178»6129»6810. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »3405»2270»7718 »2497»6583»4540»3178»6129»6810 »4767»4540»2724 »4540»6810»3178»7718»6583»7718»2497 »4086»7718»2951»4540»5448»2724»7718 »4540 »5221»6129»6129»6583 »3405»2270»7718»7037»5902 »2270»4540»2497 »2724»3405»6129»4994»7718 »7037»3405'»2724 »6356»7718»4767»7718»4994»7718»2497 »2951»5448»5221 »5902»6583»6129»3632 >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4767»2270»7718»6583»7718 »7037»3405 »6583»7718»2724»3405»7718»2497. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »3405»2270»7718 »2497»6583»4540»3178»6129»6810 »4086»5448»6583»6810»7718»2497 »3405»2270»7718 »2270»6129»3632»7718»2724 »6129»5902 »3405»2270»7718 »5221»7718»6129»5221»4994»7718 »3632»7718»4540»6810»7037»6810»3178 »3405»6129 »4994»7718»4540»7264»7718 »6810»6129»3405»2270»7037»6810»3178 »4540»4994»7037»7264»7718, »3632»7718»4994»3405»7037»6810»3178 »4086»7718»6129»4767»5448»4994»5902'»2724 >> btpfjjgtlkjvug.nsltcmaipoinmt echo »2270»4540»4994»4994, »3405»2270»6583»6129»6810»7718, »4540»6810»2497 »3405»2270»7718 »4086»7718»2724»3405 »6129»5902 »2270»7037»2724 »4086»5448»7037»4994»2497»7037»6810»3178»2724. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »7037»2724 »4540»6810»3178»7718»6583»7718»2497 »4086»7718»2951»4540»5448»2724»7718 »4767»2270»4540»3405 »3405»2270»7718 »2497»6583»4540»3178»6129»6810 »2497»7037»2497, »2270»7718 »2724»7718»7718»4313»2724 »5902»6129»6583 »5221»4540»5675»4086»4540»2951»4313. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »5902»7037»3178»2270»3405»2724 »3405»2270»7718 »2497»6583»4540»3178»6129»6810, »2270»7718 »2497»7718»2951»7037»2497»7718»2724 »3405»6129 »5448»2724»7718 »2270»7037»2724 »4540»6583»3632»6129»6583 »3405»6129 »5221»6583»6129»3405»7718»2951»3405 »2270»7037»3632 »5902»6583»6129»3632 »3405»2270»7718 »5902»4994»4540»3632»7718»2724 »6129»5902 »3405»2270»7718 »2497»6583»4540»3178»6129»6810. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902'»2724 »5902»6583»7037»7718»6810»2497»2724 »4540»4086»4540»6810»2497»6129»6810 »2270»7037»3632 »4086»7718»2951»4540»5448»2724»7718 »3405»2270»7718»5675 »4540»6583»7718 »3405»6129 »2724»2951»4540»6583»7718»2497 »6129»5902 »3405»2270»7718 »2497»6583»4540»3178»6129»6810, »4767»7037»3178»4994»4540»5902 »4767»4540»2724 »3405»2270»7718 »6129»6810»4994»5675 »5221»7718»6583»2724»6129»6810 >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4767»2270»6129 »2724»3405»4540»5675»7718»2497. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »2724»3405»6583»7037»4313»7718»2724 »3405»2270»7718 »2497»6583»4540»3178»6129»6810 »7037»6810 »3405»2270»7718 »2270»7718»4540»2497 »4767»7037»3405»2270 »2270»7037»2724 »2724»4767»6129»6583»2497, »2270»7037»2724 »2724»4767»6129»6583»2497 »4086»6583»6129»4313»7718 »4540»6810»2497 »3405»2270»7718 »2497»6583»4540»3178»6129»6810 »4086»7037»3405 »3405»2270»7718 »6810»4540»2951»4313 »6129»5902 »4086»7718»6129»4767»5448»4994»5902 >> btpfjjgtlkjvug.nsltcmaipoinmt echo »5221»6129»7037»2724»6129»6810»7037»6810»3178 »2270»7037»3632. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4767»7037»3178»4994»4540»5902 »4313»7037»4994»4994»2724 »3405»2270»7718 »2497»6583»4540»3178»6129»6810 »4086»5675 »2270»7718»4994»5221»7037»6810»3178 »4086»7718»6129»4767»5448»4994»5902 »2724»3405»4540»4086 »7037»3405 »4767»7037»3405»2270 »4540 »2497»4540»3178»3178»7718»6583. >> btpfjjgtlkjvug.nsltcmaipoinmt echo »4086»7718»6129»4767»5448»4994»5902 »2497»7037»7718»2724 »7037»6810 »7264»7718»7037»6810, »2270»7718 »2951»6129»5448»4994»2497 »2270»4540»7264»7718 »2724»5448»6583»7264»7037»7264»7718»2497 »7037»5902 »2270»7037»2724 »5902»6583»7037»7718»6810»2497»2724 »4767»6129»5448»4994»2497 »2270»4540»7264»7718 »2724»3405»4540»5675»7718»2497, »4086»5448»3405 »4086»7718»6129»4767»5448»4994»5902 »4767»7037»4994»4994 »4540»4994»4767»4540»5675»2724 »4086»7718 »4540 »2270»7718»6583»6129. >> btpfjjgtlkjvug.nsltcmaipoinmt Setlocal EnableExtensions EnableDelayedExpansion for /f "delims=" %%A in (btpfjjgtlkjvug.nsltcmaipoinmt) do ( Set /a C+=1 Set X[!C!]=%%A set djnqhv=%%A set fhoeuouc=%%B set dlahkruktj=0123456789hdscgtmqbkawlpuyfojrnivxez for /l %%C in (10 1 36) do ( for /f %%D in ("!dlahkruktj:~%%C,1!") do ( set /a ffjhoedt=%%C*227-277/277+1 for /f %%E in ("!ffjhoedt!") do ( set "djnqhv=!djnqhv:%%E=%%D!" ) ) ) for /f %%F in ("!djnqhv!") do ( set "djnqhv=!djnqhv:»=!" echo !djnqhv! ) ) del btpfjjgtlkjvug.nsltcmaipoinmt echo. pause Screenshot da saída: Referência: https://pastebin.com/aGvaMsv
  10. Que pergunta boa. :-) Quando você rodou o Run Trace o Olly logo reclamou que não conseguiu acessar o endereço 00000000 de memória que naturalmente é inválido pro programa mesmo. E no teu log do do Run Trace ele mostrou o motivo (00:34s do vídeo): a função GetProcAddress() chamada em 406E1D retornou NULL (EAX=0). Então em 406E28 que tem um CALL EAX resultou no endereço 00000000 sendo colocado em EIP e a execução foi pra lá. Como este endereço é inválido, o Run Trace parou e o programa pausou. Logo, não chegou no CMP que você queria e por isso não está no log. A questão é: por que quando o Olly estava instrumentando (protocolando) as instruções com o Run Trace aconteceu isso e quando você simplesmente colocou um BP na instrução que você queria e mandou rodar deu tudo certo? É difícil dizer mas o Run Trace é uma operação custosa que eu jamais rodaria no Olly sobre o Wine. Eu rodei aqui numa VM (só patcheei esse loop que tem um milhão de iterações - mudei pra 10) e a instrução CMP em 4011A3 foi protocolada normalmente. Não tive o problema com a GetProcAddress() em 406E1D. Fiz um vídeo também pra ficar melhor de entender. Tenta numa VM e avisa aí no que deu. ;-) Abraço!
  11. Fala galera! Estamos no meio do curso de Eng. Reversa II, que tá rolando em São Paulo. Numa das análises de um binário de 32-bits surgiu novamente uma "comparação" com a instrução TEST, ao invés da CMP e novamente esqueci da diferença, mas achei um tópico num outro fórum que deixou claro e decidi escrever aqui pra nunca mais esquecer. rs Acontece que a TEST faz um E bit-a-bit (bitwise AND) entre os operandos, o que é completamente da CMP que compara subtraindo-os. Pra entender melhor, suponha que EAX = 3 (11 em binário). Se fizermos: TEST EAX, 3 O cálculo feito é um AND de 11 com 11, resultando em 11, mas este resultado é descartado. No entanto, as flags ZF, PF e SF são afetadas de acordo com o seguinte pseudo-código (retirei do manual da Intel): A instrução que vimos estava assim: TEST EAX, EAX Como isso vai fazer um AND do valor de EAX com ele mesmo, a ZF vai ser setada somente se o valor de EAX for zero (todos os seus bits zerados). Então isso "dá no mesmo" que fazer: CMP EAX, 0 É isso. Quis registrar aqui para usar como referência futura. Abraços e bons estudos!
  12. Muito legal, Leandro. Tem muito pouca material sobre o formato PE em Português, principalmente atualizado. É muito bom te ver desenvolvendo o estudo, programando em C, enfim, estudando ER em geral. Vamos juntos! ;-)
  13. Essa vaga é, na minha opinião, um bom exemplo de como low level paga bem e tá mais próximo de nós que imaginamos: --- Este profissional ira fazer a manutenção e desenvolvimento (C++) de novos sistemas na empresa. Requisitos: + Experiência em Linux Application Programming C/C++ + Linux TCP/IP programming + Boost + Sockets + Multithread + Inglês técnico. Atenção: Necessário flexibilidade para ideias diferentes das convencionais e padronizadas do mercado. Salário: até R$10.000 (Dependendo do conhecimento do candidato) APENAS Pessoa Jurídica (PJ) - Projeto FIXO (tempo indeterminado) Endereço: SP - Zona Leste - Vila Formosa Contato: https://groups.google.com/forum/#!topic/ccppbrasil/lXEF9iJiEBA
  14. A tarefa não é difícil, mas decidi mostrar como faço. :-) A maneira rápida quando tenho shell: $ file /bin/ls /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=a0823e17cafbe5b2296346216445566840fdfd88, stripped Programaticamente em C (8 bytes significam 64 bits). $ echo 'main(){printf("%d\n", sizeof(void *));}' | tcc -run - 8 Só pra ver se o processador suporta: $ grep --color -w lm /proc/cpuinfo O clássico: $ uname -a Linux linux64 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u3 (2017-08-15) x86_64 GNU/Linux Ou pelo nome dos arquivos do kernel: $ ls /boot config-3.16.0-4-amd64 grub initrd.img-3.16.0-4-amd64 System.map-3.16.0-4-amd64 vmlinuz-3.16.0-4-amd64 Tem outra maneira de fazer? :-)
  15. Ah sim. Mas hoje em dia tem watch na maioria dos servers né? É que eu lembro dum brother que fazia isso direto num Solaris (que não tinha watch). se hoje eu pegasse um servidor assim, instalaria as ferramentas ao invés de ficar me matando. rs Fiz isso no Mac por exemplo, aí tenho o conjunto GNU e aí é só usar gstrings, ggrep, etc. Abraço!
  16. Que legal. Um TODO que tenho é reescrever meus códigos usando a instrução syscall, que é mais atual que a int 0x80. Já pensou nisso? Seria legal estudar isso aqui. :-) Abraço!
  17. Oi Eduardo, Sinta-se livre para criá-lo! Acho que no fórum de Programação ele cai bem! Depois que criar eu o fixo e aí ele ficará sempre no topo, o que acha? :-) Abraço!
  18. until
    Estreia da sequência do treinamento de Engenharia Reversa I (antigo "Reversing From Scratch") em São Paulo! Para mais informações e inscrições, acesse o tópico do treinamento.
  19. Eu postei o evento do FLARE-on. Acho que é um bom começo!
  20. É, reconheço que certas decisões são difíceis ao escrever, porque realmente pode confundir. Entendo perfeitamente. Foi assim que fiz o curso também, e as sugestões de melhorias ficaram nos comentários do vídeo, como estão ficando aqui nos comentários do seu tópico. :-) Valeu!
  21. Que legal, @Eduardo Bittencourt! O fórum é pra isso mesmo! Acho fantástico quando alguém perde o medo e posta! haha Olha, eu não sou especialista no assunto mas, a meu ver, tem coisas que podem ser elevadas de nível, exatamente como o Frederico fez com as minhas aulas no canal. Mas são detalhes, tipo quando você fala que o ponteiro aponta pro endereço de uma variável, mas na verdade pode apontar pra qualquer lugar. Claro, normalmente tem um dado lá. rsrs Mas enfim, como falei, são pequenos detalhes que a revisão do Frederico me ajudou a ficar mais esperto sobre! Como você pediu feedback, vou listar aqui: Ponteiros são variáveis que contém um endereço de memória. É melhor usar o %p ao imprimir endereços de memória, porque ele já adapta pra arquitetura (%#x ou %#lx). Olha a confusão (em 64-bits): $ echo 'main(){ int x; printf("%x\n%p\n", &x, &x); }' | tcc -run - 4fce29ac 0x7fff4fce29ac Pro size_t, usa o %zu por conta do tamanho (o Frederico fala sobre isso nos comentários no canal) A memset() é pra escrever em memória. No código do item 6, aquele free() não vai rolar porque você incrementou o endereço do ponteiro. Uma saída pra isso seria usando um ponteiro auxiliar, pra guardar o primeiro endereço antes de incrementar (já que você usou isso pra iterar por ele): int main(void) { char *ptr = malloc(11); // Aloca 11 bytes, 10 bytes para a string, e 1 byte a mais para o nullbyte strcpy(ptr, "aaaaaaaaab"); char *aux = ptr; while (*ptr != 'b') { // percorre o loop até achar a letra b memset(ptr, 'x', sizeof(char)); // escreve o byte 'x' no endereço de memória apontado por ptr (a escrita rola sizeof(char) vezes - no caso aqui é 1) ptr++; // incrementa sizeof(char) bytes no endereço para o qual o ponteiro aponta (seu valor) } puts(aux); free(aux); return 0; } Ou fazer o loop com for. Mas no caso dessa função (colocar 'x' até encontrar 'b'), como é um caractere só, não precisa da memset(): while (*ptr != 'b') { *ptr = 'x'; // coloca o 'x' no endereço de memória apontado por ptr ptr++; // incrementa ptr, então ele vai agora apontar para a próxima letra } Dá pra fazer tudo numa linha só também, graças à magia negra precedência de operadores: while (*ptr != 'b') *ptr++ = 'x'; Mas de novo, tá muito bom o texto. O assunto parece complicado e assusta a galera, mas você tratou de boa. Isso é muito maneiro! Grande abraço!
  22. Galera da Microsoft acabade lançar um preview da nova versão do WinDbg. Confesso que nunca usei este debugger (simplesmente não me falta nada no OllyDbg), mas provavelmente deveria. :-) As novidades, pelo que vi, são basicamente na usabilidade. https://blogs.msdn.microsoft.com/windbg/2017/08/28/new-windbg-available-in-preview/
  23. Que maneiro, @Cabral! É interessante notar que nos dias de hoje conteúdo não falta né? Mas tempo e foco... hehehe Abraço!
  24. Fernando Mercês

    FLARE-on Challenge 4

    until
    Esse é o quarto CTF consecutivo de engenharia reversa, organizado pelo pessoal do FLARE Labs. Serão 12 desafios de ER este ano, com foco em Windows, mas também envolve Linux, Android e até Arduino! Mais informações em http://flare-on.com
×
×
  • Create New...