Ir para conteúdo

Fernando Mercês

Administradores
  • Postagens

    1.507
  • Registro em

  • Última visita

  • Dias Ganhos

    160

Tudo que Fernando Mercês postou

  1. Oi Ana! Parabéns pela decisão em estudar Assembly. 🙂 No teu código falta especificar o destino nas instruções MOV. Por exemplo: mov, 4 tá pedindo para mover/copiar o valor 4, mas para onde? Falta especificar um destino, entende? O que você precisa aí é saber em qual registrador você quer colocar tais valores. O nome do registrador vai antes da vírgula. Você pode ler mais sobre o assunto no nosso livro, por exemplo, ou em centenas de outros livros e artigos na internet. Outra coisa: em Assembly, você não "muda" o conteúdo de um label assim: mov nome, dword 'Jon' ; Mudar o nome Ana para Jon Linhares Para atingir o que você quer, o jeito mais simples é especificar, na seção .data, dois labels, nome1 e nome2, e aí usá-los um em cada bloco de código que imprime um nome. Por fim, a syscall que sai do programa é a SYS_EXIT. Ela recebe um argumento (você pode conferir aqui ou dando um man 2 exit). Sendo assim, você precisa fazer: mov ebx, 0 mov eax, 1 int 0x80 Isso é equivalente à uma chamada exit(0), entende? E sair com o código de retorno zero é o padrão para dizer para o SO que "deu tudo certo". 😉 Valeu!
  2. Oi @Zeka! Dá uma olhada no no nosso guia em https://menteb.in/guia na profissão "Pentester / Red Team". Acho que vai te dar uma luz! 🙂 Abraço!
  3. Fernando Mercês

    Erro estranho.

    Então é mais um indício de que o software está ok e o problema é com a máquina mesmo. É cedo para afirmar, mas é um indício. 🙂 Já experimentou remover os dois pentes de memória e limpar seus contatos com borracha? Ao ligar o PC, é legal ver no POST (aqueles testes que rolam quando o computador liga) se a memória está sendo reconhecida em sua totalidade (8MB no seu caso). É um emulador de MS-DOS pra celular? Abraço!
  4. Fernando Mercês

    Erro estranho.

    Eu dei uma olhada aqui e tudo parece bastante interessante. Não tenho o dispositivo com o qual este programa conversa, mas num emulador aqui ele pelo menos subiu: Aí chega a aparecer esta tela? Eu tô achando que o problema é o seguinte: a memória RAM está se esgotando e o programa não consegue nem memória para alocar uma string de erro "Out of memory" nessa função: void sub_42AEC0() { char var_4[4]; // [esp+20h] [ebp-4h] BYREF __InitExceptBlock(); string::string((string *)var_4, aOutOfMemory); xalloc::xalloc((xalloc *)&__xalloc, (const string *)var_4, 0); string::~string((TStringRef **)var_4, 2); } No caso acima, var_4 é null se o operador new falhar. Veja v5 abaixo: string *__cdecl string::string(string *this, char *s) { size_t v2; // eax TStringRef *v3; // eax TStringRef *v5; // [esp+28h] [ebp-4h] __InitExceptBlock(); v5 = (TStringRef *)operator new(0x12u); if ( v5 ) { if ( s ) v2 = strlen(s); else v2 = 0; TStringRef::TStringRef(v5, s, v2, 0, 0, 0); --*(_DWORD *)_DestructorCountPtr; v3 = v5; } else { v3 = 0; } *(_DWORD *)this = v3; ++*(_DWORD *)_DestructorCountPtr; return this; } Com var_4 sendo NULL, o fluxo entra em xalloc(NULL, 0) e dentro dela tem mais duas chamadas, onde uma chega no mov eax, [eax] problemático em 0x0042C253. Combinando então o seguinte: Você não alterou nada no sistema. O sistema rodou no meu emulador. Minha suspeita de ser um erro de alocação de memória. Meu palpite é que um pente de memória deste computador tenha queimado ou esteja com algum mau contato e ele está com metade da memória que ele deveria ter. Não sei. Você pode tentar ver quanto de memória tem livre com o comando mem /c e dizer aqui pra gente (postar uma foto da saída). Ou tentar desligar, limpar os pentes de memória e ligar novamente o PC. Só ideias por enquanto...
  5. Fernando Mercês

    Erro estranho.

    Opa, deixa eu te pedir mais umas coisas: Uma foto do conteúdo do AUTOEXEC.BAT que mostre tudo (tá cortando um pedaço na que você mandou). Uma foto do conteúdo do INIT.BAT. É só comandar type c:\progs\sr632\v3.10\obj\init.bat Uma foto da saída do comando dir c:\ Uma cópia da pasta inteira (eu sei que você tá buscando os disquetes já, mas só pra não esquecer). Abraço!
  6. Fernando Mercês

    Erro estranho.

    Boa! Ainda não sei. Enquanto você não acha os disquetes, consegue tirar uma foto do conteúdo do AUTOEXEC.BAT e CONFIG.SYS? Os comandos são: cd \ type autoexec.bat type config.sys Seria legal também ter a versão do DOS e uma listagem desse diretório OBJ aí: ver dir c:\progs\sr632\v3.10\obj Valeu!
  7. Fernando Mercês

    Erro estranho.

    Olá! O programa que você executou tentou acessar um endereço de memória inválido e por isso o SO matou o processo. No caso, ele dá um dump dos opcodes das instruções me 0x42C24B e diz que o errou ocorreu na instrução em 0x42C253. Então dá pra inferir o seguinte: # rasm2 -ax86 -d e84cabffff8b450c8b008903 call 0xffffab51 mov eax, dword [ebp + 0xc] mov eax, dword [eax] mov dword [ebx], eax Colocando os endereços, ficaria: 42C24B call 0xffffab51 42C250 mov eax, dword [ebp + 0xc] 42C253 mov eax, dword [eax] 42C255 mov dword [ebx], eax Então o erro seria na instrução mov eax, dword [eax]. Como no momento que essa instrução roda EAX é 0 (tem um dump dos valores dos registradores na imagem), o programa tenta acessar o endereço de memória 0, o que bate com o erro final (The instruction referenced illegal address 00000000). A instrução anterior copia um valor para EAX a partir de EBP + C, que parece ser o segundo argumento da função dona dessa instrução. Não dá pra saber se é a main() do programa, mas você pode tentar passar um argumento pra ver se o erro muda: C:\PROGS\SR632\V3.10\OBJ>NEW.EXE 1 2 Se precisar de mais ajuda, acho que vai ter que copiar a pasta PROGS, compactá-la e enviar aqui pra gente. Assim alguém pode dar uma olhada num disassembler e tentar te ajudar com o erro. Abraço!
  8. Oi Ana, bem vinda à Mente Binária. 🙂 O nasm.us parece estar fora mesmo. No entanto, vejo algumas opções: Se você usa Linux, pode instalar pelo gerenciador de pacotes. Ex.: apt install nasm. Se você usa Windows, pode baixar do Fossies. Se usa macOS, acho pode instalar com o brew.sh: brew install nasm. Você pode estudar Assembly com o fasm alternativamente. Espero que ajude. Bons estudos aí!
  9. Oi @capgaivo! Se liga na linha onde você faz a conta: emed = (qmin + qmax) / 2; Nessa linha, o que está à direita do igual é avaliado primeiro. Neste caso, dois tipos int são somados (qmin e qmax). O resultado, que também é um int, é dividido por um outro int de valor 2. Ou seja, você tem um valor int sendo dividido por outro valor int. O resultado é, naturalmente, um valor do tipo int também. Aí como emed é float, o int resultante é promovido para float. No caso, 25 / 2 = 12 (tudo int) e 12 promovido para float é 12.0. Acredito que a forma mais rápida de resolver isso seja dividindo por 2.0f ou (float)2, ao invés de 2. Então você terá uma conta à direita do igual que dividirá um int por um float e o resultado de int / float é float. 😉 Resumindo, em geral: int / int = int float / int = float int / float = float PS.: Você pode se sentir uma inclinação de dividir por 2.0, mas sem o sufixo f, o 2.0 é um literal do tipo double. Então você teria um resultado do tipo double que depois seria convertido pra float. Eu não lembro das implicações disto. Talvez outra pessoa possa ajudar mais, mas eu recomendaria fazer float com float mesmo. 🙂 Abraço.
  10. Opa, consegue editar esse código-fonte pra ficar melhor de ler? Pode usar o botão "Código (<>)" do editor aqui do site quando for fazê-lo. Exempleo de como fica: int main(void) { printf("oiee\n"); } Se você remover essas linhas em branco, vai ficar muuuito melhor pra galera ajudar. 😉 Abraço!
  11. haha tá vendo? 🙂 Quem nasceu em Irajá também foi o Zeca Pagodinho e o Nei Lopes. 💚
  12. Eu já tive vários blogs, sempre escrevi muito (aliás, acho a arte da escrita é super difícil, mas também super benéfica) e ainda trabalho escrevendo. Ao atuar como pesquisador de ameças para uma empresa japonesa, no fim das contas, a minha entrega é um artigo (que chamaos de paper). E aqui na Mente Binária, também estou sempre escrevendo artigos ou material para treinamentos. Às vezes escrevo código também. Eu tive essa ideia de que os membros da equipe Mente Binária pudessem criar blogs pessoais para falar do que lhes vierem à cabeça porque antes de sermos profissionais de computação, somos pessoas e temos nossos sentimentos né? Mas também deixei livre para quem quiser fazer, no momento em que quiser fazer, caso queira fazer. Eu quero. E esse é a primeira postagem! Então se você chegou até aqui, é porque tem algum nível de interesse em conhecer mais sobre mim. Vamos lá então! Eu nasci no Rio de Janeiro e morei muitos anos em Irajá, no subúrbio do Rio. Acho que conheço todas as ruas daquele bairro e já perambulei por todas elas quando adolescente, sempre a pé, já que nunca consegui aprender a dirigir (como vocês conseguem?!). 😄 Minha vida em Irajá foi normal. Cresci escutando funk, rap, Furacão 2000, equipe Pipo's, montagens e MCs, samba e pagode. Jogava Super Nintendo e futebol na rua (mas era melhor no Super Ninendo) e tentava soltar pipa (mas algum amigo tinha que por no alto pra mim). Fiz muitas amizades lá, que mantenho até hoje, mesmo que nossas opiniões sejam divergentes e nossas vidas tenham tomados rumos diferentes. Vi um computador na minha frente pela primeira vez aos 8 anos, na mesa do diretor da escola. Segundo minha mãe, o diretor falou pra ela que eu parecia que já conhecia o bicho. Bom, eu não lembro se já conhecia, mas lembro que fiquei maravilhado ao ver que o que eu desenhava com o mouse aparecia na tela do Microsoft Paint. Eu recebendo o anel de formatura do ensino primário em 1996 da professora Jaqueline e do diretor Marcos (que me mostrou o tal do computador) Graças à minha mãe, ao meu pai e a um primo do interior de SP, ganhei meu primeiro computador com cerca de 11 anos de idade. Era um AMD K5 de 100 MHz com Windows 95. Na época, para mim, era um foguete! Quando pusemos internet discada com um U.S. Robotics 56k então, virou um portal de acesso a conteúdos do mundo todo, inclusive no mIRC, depois ICQ, depois MSN. Eu achava incrível e queria entender cada detalhe do funcionamento daquela máquina doida. Minha família teve condições de investir em mim: me deram livros, coleções, assinaram jornais que continham matérias sobre informática (lembro de ler o Piropo no jornal O GLOBO e o Gabriel Torres no jornal O DIA). Eu e meu primo Jorge na extinta Fenasoft - uma feira de informática - em São Paulo no ano 2000 Não tinha muito como correr de uma profissão ligada à computação. Fui para um estágio não remunerado no Rio de Janeiro e depois para meu primeiro emprego na área, da qual nunca mais saí. Com acesso a outras coisas, principalmente pela internet e na escola, meus gostos foram mudando... Tentei formar umas bandas de rock, mas eu acabava mesmo ajudando as que já existiam (profissão chamada de roadie) e sendo fã. Ouvi Legião Urbana, até não aguentar mais (mas ainda aguento - é só me chamar pra uma roda de viola que ainda sai um Tempo Perdido), fui muito pra Lapa, antigo Garage e o mundo do rock tomou conta de mim musicalmente! Na jornada em computação, passei por algumas empresas e escolas no Rio. Fiz curso técnico em informática, eletrônica, depois curtei Física e Ciência da Computação, mas não concluí. Casei, me tornei pai de um filho incrível, me mudei pra SP, descasei, voltei pro Rio, voltei pra SP, casei e hoje sigo em SP, feliz, com muitos desafios, mas rodeado fisica e virtualmente de pessoas que amo e me apoiam. 💚 Já tive empresa no Rio, trabalhei para empresa de SP estando no Rio e hoje, trabalho numa multinacional com sede brasileira em São Paulo. Esse é um resumo bem curto da minha vida que, como qualquer outra vida, daria um livro para explicar cada momento e ainda deixaria coisas de fora. Sou muito grato à minha mãe e minha família, que lutaram pela minha educação e investiram em tudo o que eu quis. É um privilégio que infelizmente poucos têm no Brasil. No final de 2007 criei um blog chamado Mente Binária, que veio a se tornar a instituição de ensino e pesquisa sem fins lucrativos que você conhece. Bom, pelo menos espero que conheça. Se não conhecer, é só continuar navegando neste site. Faltou explicar o nome do blog. Vem de um trecho modificado de uma resposta que o Bob Marley deu quando foi perguntando porque cantou no evento "Smile Jamaica" em 1976 dois dias depois de ter sofrido uma tentativa de assassinato, onde um atirador não identificado atirou nele, em sua esposa e em quem mais estava na casa dele no dia. A resposta de Bob foi: As pessoas que tentam fazer desse mundo um lugar pior não tiram um dia de folga. Por que eu deveria? Essa postura sempre mexeu comigo, mexe hoje e continuará mexendo. E é essa a postura que quero pra mim. Não que eu não durma, nem que não tire de férias. Do trabalho eu me desligo sim, mas de me deixar modificar para fazer este mundo melhor, não. 🕊️
  13. Você conhece o pev, nosso kit de ferramentas para análise de binários PE (usados no Windows)? Se conhece, acho que vai se identificar com essa história. Se não conhece, vai conhecê-lo muito bem agora. Nesse artigo vou passear brevemente sobre a inspiração que deu origem ao projeto, o que foi feito desde então e o que vem por aí. De modo cronolagicamente organizado, começamos por um passado de mais de uma década. Partiu embarcar nessa viagem no tempo? ⌛ Passado 💭 Lá em 2010 eu queria fazer um programa que lesse a string de versão “File version” de executáveis PE. Essa que aparece quando você vai nas Propriedades de um executável .exe no Windows: Essa informação só poderia estar no arquivo .exe, mas eu não sabia exatamente onde. Depois de muito estudo, consegui entender que essa informação fica numa estrutura chamada VS_FIXEDFILEINFO que, por sua vez, pertence a uma estrutura chamada VS_VERSIONINFO. Dava para encontrar essa estrutura por nome no binário em uma string UTF-16-LE na seção de recursos .rsrc: $ strings -tx -el putty.exe | grep VS_VERSION_INFO 15a2c6 VS_VERSION_INFO $ hd -s 0x15a2c6 -n64 putty.exe 0015a2c6 56 00 53 00 5f 00 56 00 45 00 52 00 53 00 49 00 |V.S._.V.E.R.S.I.| 0015a2d6 4f 00 4e 00 5f 00 49 00 4e 00 46 00 4f 00 00 00 |O.N._.I.N.F.O...| 0015a2e6 00 00 bd 04 ef fe 00 00 01 00 4d 00 0a 00 00 00 |..........M.....| 0015a2f6 00 00 4d 00 00 00 00 00 00 00 0b 00 00 00 00 00 |..M.............| 0015a306 Mas onde estava o 0.77.0.0 ninguém me contava... Bem, segundo a documentação, a estrutura é definida assim: typedef struct tagVS_FIXEDFILEINFO { DWORD dwSignature; DWORD dwStrucVersion; DWORD dwFileVersionMS; DWORD dwFileVersionLS; DWORD dwProductVersionMS; DWORD dwProductVersionLS; DWORD dwFileFlagsMask; DWORD dwFileFlags; DWORD dwFileOS; DWORD dwFileType; DWORD dwFileSubtype; DWORD dwFileDateMS; DWORD dwFileDateLS; } VS_FIXEDFILEINFO; Para facilitar a visualização dos campos de interesse dessa estrutura no dump hexa, coloquei comentários nela usando o rehex (parte integrante do nosso retoolkit) : De acordo a documentação, o primeiro membro, chamado dwSignature, deve conter o valor 0xfeef04bd. Considerando o ensianness em little-endian, essa assinatura tá no dump hexa em 0x15a2e8, logo após a string VS_VERSION_INFO em UTF-16-LE. A missão então era achar como o número de “File version” era gerado, no exemplo aqui, a string 0.77.0.0. Vamos em frente. Logo depois da dwSignature tem a dwStrucVersion de quatro bytes, seguida da dwFileVersionMS, que também é uma DWORD (Double WORD) de quatro bytes. Nesta última, temos os bytes 4D 00 (destacados em verde) e 00 00 (laranja). Lendo a documentação, descobri que A WORD mais significativa, tomando este número em little-endian, é o nosso primeiro zero da string "0.77.0.0", destacado em laranja. Já a WORD menos significativa é o 77 (0x4D), destacado em verde. O próximo membro é a dwFileVersionLS (amarelo e rosa), que segue a mesma lógica, formando o "0.0" final. Na época, fiz um script em Python para buscar esse número de versão e chamei de pev.py (pev vem de “PE Version”). Não tenho mais o script, mas hoje seria algo nessa linha: import sys if len(sys.argv) < 2: print("Usage: pev.py <pefile>") sys.exit(1) with open(sys.argv[1], "rb") as f: d = f.read() vinfo = "VS_VERSION_INFO".encode("utf-16-le") # Busca a string nos conteúdo do arquivo pos = d.find(vinfo) # Avança para depois da string vinfo + 4 pos += len(vinfo) + 4 sig = int.from_bytes(d[pos:pos+4], "little") if sig != 0xfeef04bd: print(f"Signature not found at {pos:#x}") sys.exit(1) pos += 8 # Avança para o dwFileVersionMS # Lê a word mais significativa major1 = int.from_bytes(d[pos+2:pos+2], "little") # Lê a word menos significativa major2 = int.from_bytes(d[pos:pos+2], "little") # Avança para o dwFileVersionLS pos += 4 # Lê a word mais significativa minor1 = int.from_bytes(d[pos+2:pos+2], "little") # Lê a word menos significativa minor2 = int.from_bytes(d[pos:pos+2], "little") print(f"{major1}.{major2}.{minor1}.{minor2}") Assim como o script da época, este script funciona: $ python pev.py putty.exe 0.77.0.0 Mas sem dúvida, pode ser melhor por vários motivos. O principal, é que ele é lento, especialmente para arquivos grandes pois ele busca a string VS_VERSION_INFO no binário inteiro. É a famosa “marretada” em programação... Era lento, não tinha jeito. Resolvi então estudar a documentação do PE e cheguei num código muito maior, mas que rodava muito mais rápido, porque eu lia todos os cabeçalhos do PE necessários para encontrar a posição no arquivo da estrutura VS_VERSION_INFO e, por consequência, da VS_FIXEDFILEINFO. O código não envolvia busca. Ao contrário, ele ia direto ao ponto. O pev 0.22 implementava esse algoritmo em aproximadamente 300 linhas de código em C. Lançado em 2010 no extinto Google Code, era assinado pelo Coding 40º, um grupo de programação que criei na faculdade com mais três amigos (@Francivan Bezerra, Thiago e Eduardo). No ano seguinte, o Coding 40º teve uma breve vida como hackerspace na Tijuca, no Rio de Janeiro, onde inclusive o @julio neves foi nos visitar. 💚 O projeto andou, mas em algum momento pensei: se eu passo por todos os cabeçalhos do PE, por que não imprimir os valores dos campos também? Isso transformaria o pev num parser de PE completo! E foi o que fizemos. Aí o projeto cresceu mais, ganhou relevância na área de segurança (era o único parser de PE livre e multiplataforma do planeta) e atraiu colaboradores do Brasil e de fora. A ponto do meu empregador na época ficar preocupado de eu estar recebendo dinheiro de outra empresa por conta do pev (como sempre, a p***a do capitalismo na nossa cola). Mas eu estava só aprendendo mesmo. Na versão 0.50 eu segui a dica do @bsdaemon de “quebrar” o pev em programas menores, onde cada um cumpriria uma função. Assim, o pev virou um kit de ferramentas. E tivemos que aprender a lidar com tanto código, depois veio o Git e o GitHub e tivemos até uma sessão presencial onde vários colaboradores do projeto se uniram para estudar Git: (Da esquerda para a direita, Álvaro Justen, Renato Augusto, Álvaro Rios, Thiago Bordini, @Felipe Esposito, Jan Seidl, Igor Rincon, @l0gan, @Gustavo Roberto, Slayer, @Fernando Mercês, Rogy e unk) Dentre as muitas pessoas que colaboraram, teve o @jweyrich que reescreveu a libpe (na qual o pev se baseia) quase toda, corrigiu muito código, adicionou recursos e levou o projeto para outro nível. Junto com várias pessoas que reportaram e corrigiram bugs, implementaram recursos e testaram o pev, lançamos várias versões até chegarmos na atual 0.8x. 🙃 Presente 🎁 Hoje com aproximamente 30.000 linhas de código, o pev está estabelecido. Está presente em vários tutorias sobre análise de malware, e forense e em praticamente todas as distribuições Linux, incluindo Debian, Kali, Ubuntu, etc. Tem builds para Windows também. Veja alguns dos lugares onde você encontra o pev: Pacote no Debian (eu fui o primeiro mantenedor, depois deixei o pacote órfão e o time do Debian assumiu! 💗): Pacote no Ubuntu: Incluso no Kali Linux por padrão: Incluso no REMnux por padrão: Incluso no Tsurugi Linux por padrão: Paper Process Injection Techniques and Detection using the Volatility Framework no vx-underground: Tem também pev no Arch Linux, Void Linux, vários tutoriais em português, inglês, chinês.. Em algum ponto eu até parei de monitorar. 😄 Neste ínterim, tive a oportunidade de aprender com programadores incírveis que puseram código no pev. Só para citar alguns: @jweyrich, @Jan Seidl, Marcelo Fleury, @fredericopissarra e muitos outros que não conseguiria nomear aqui (mas estão todos na lista de colaboradores do projeto no GitHub). Muito obrigado! 💚 Muito tempo passou e muitos projetos livres similares surgiram, sendo o principal deles a pefile, que habilitou programadores e programadoras em Python a "parsear" binários PE facilmente. O mundo mudou, minhas prioridades mudaram, as prioridades dos colaboradores do pev mudaram também. Decidi então passar o bastão para quem tivesse interesse e em 28 de janeiro de 2022 comuniquei a comunidade que o projeto precisava de uma nova pessoa para mantê-lo. Surgiram algumas perguntas, alguns e-mails, até que em dezembro do mesmo ano, uma programadora da Alemanha entrou em contato informando do seu interesse em manter o projeto. Conversa vai, conversa vem e é isso. O pev tem uma nova mantenedora! 🥳 Futuro 🔮 A nova mantenedora usa o apelido GoGoOtaku. Embora eu não a conheça, ela se mostrou bastante confiável e corrigiu vários bugs no pev já. Penso que é quase mágico o fato de alguém, bem longe de mim física e socialmente, tenha encontrado o pev e tenha tido o interesse em mantê-lo. São coisas que só o software livre, aliado a linguagens universais como C, idiomas universais como o inglês, e redes sociais como o GitHub, conseguem realizar. Acho isso muito incrível! 🙌 Em conversas com a nova mantenedora, expressei meu desejo que de o que pev voltasse a ser um programa só, mas com sub-comandos. Sugeri que usássemos o nome readpe, já que este é o programa mais usado do toolkit do pev e sugere um belo contraste com a ferramenta readelf do GNU Binutils. Ela gostou da ideia, afinal, o pev não tem mais nada a ver com “PE Version”. O mantenedor do pacote no Debian nos alertou que mudar de nome é um processo delicado, especialmente porque o pev já é bastante conhecido, mas eu insisti. Minha ideia é que o readpe tenha sub-comandos que implementam a função dos programas separados hoje. Algo nessa linha: Exibir a ajuda: readpe help Imprimir os campos e valores dos cabeçalhos do PE (funcionalidade provida pelo readpe que seria dividida em sub-comandos): readpe headers <pefile> # todos os cabeçalhos readpe headers dos <pefile> # somente o cabeçalho do DOS Exibir strings no PE (funcionalidade provida pelo pestr, que viraria um sub-comando do readpe): readpe strings <pefile> # todas as strings readpe strings ascii -s <pefile> # somente strings ASCII exibindo as seções às quais elas pertencem readpe strings unicode <pefile> # somente strings UNICODE E por aí vai. Por hora, movi o pev para um repositório “embaixo” da Mente Binária, que chamei de readpe e dei todas as permissões para a nova mantenedora nele. Ela que vai decidir sobre o futuro do projeto. Talvez ela aceite minha sugestão de transformar o pev num único programa readpe. Talvez não. A mágica disso é que agora a decisão dela, afinal, filho a gente cria pro mundo e não pra gente né? 😄 Estou muito feliz que o pev tenha encontrado uma nova mantenedora (que já lançou a versão 0.82 com várias correções de bugs!). E que ele tem ajudado pessoas interessadas em "parsear" PEs pelo mundo afora durante seus 13 anos de existência. Vou seguir acompanhando o projeto de perto e, quem sabe, até programando um pouquinho (se a nova mantenedora aceitar meus patches), mas acima de tudo, sou grato a todo mundo que contribuiu, usou e apoiou o pev durante todos esses anos. Ele continua sendo um dos poucos parsers livres de PE de linha de comando, multiplataforma, super versátil (com saídas em XML, JSON, HTML, etc), com recursos únicos (é o único livre que extrai certificados do PE, por exemplo) e claro, com raízes brasileiras. Foi o maior projeto de software livre da minha vida e eu continuo vibrando a cada commit que vejo nele. 😭
  14. Versão 2023.05

    125 downloads

    Nosso kit de ferramentas para engenharia reversa utilizado em nossos treinamentos. 🙂 Mais informações:
  15. Dá um trabalho que você talvez nem imagine, mas a gente insiste. 🙂 Hoje lançamos a versão 2023.05 do retoolkit, nosso kit de ferramentas para engenharia reversa e análise de malware. Foram incluídas novas ferramentas, dentre elas: gftrace, ferramenta do @Leandro Fróes para tracing de chamadas de função da Windows API feitas por binários PE32+ compilados em Go. FakeNet-NG super útil para fazer um malware pensar que ele tá na rede, crente que tá abafando, e para manipular as respostas. de4dot GUI, porque nem sempre é necessário usar a linha de comando para desofuscar .NET. Observer, um "strace para Windows para PE32. Veja o log de mudanças completo aqui. Além disso, as ferramentas existentes foram atualizadas e novos recursos foram adicionados, dentre eles: Opção para desativar o Windows Update, graças ao Windows Update Blocker. Opção para adicionar o Python na %PATH%. Saca só o menu de ferramentas gráficas para PE (ainda tem um monte de linha de comando): O bicho tá grande... cerca 1.5 GB de pura maldade contra malwares. Usar o retoolkit é inifinitamente mais rápido que baixar todas essas ferramentas uma a uma e instalar. Muito mais rápido também que FLARE-VM e coisas do tipo. Baixou o setup, instalou, pronto: você tem um x64dbg com plugins e scripts configurados, Ghidra, Cutter, analisadores de PE, descompiladores para .NET, Java, AutoIT... enfim, dá nem para listar tudo que tem. Baixe e veja você mesmo. 🙂 Download
  16. Oi @Nitczi, bem vindo(a) ao nosso portal! 🙂 Eu não tenho mais o sample exato que utilizei, mas anexei um aqui bem parecido. Importante lembrar, no entanto, que na aula 24 eu falo que não mostrei o código-fonte do binário e nem o disponibilizei para download porque deixei o exercício para quem assistir o treinamento de implementar este binário em C. É bem fácil. Você só vai chamar duas funções. Recomendo que faça o seu depois de analisar este. 😉 Abraço e bons estudos! antidebug.zip
  17. Hahaha tamo aqui pra isso. Honra minha em ajudar num primeiro tópico tão foda. 🙂 Desconheço hehe. No caso de uma C string (um array de chars), o último elemento é um nullbyte mesmo. Só pra deixar claro, no caso aí da SYS_read (mov rax, 0), o que acontece é que como você tá usando um terminal (o usuário digita num terminal), o padrão para encerrar a linha é o newline (0x0a). Então não é que a SYS_read pára ao encontrar o newline, é que o usuário manda um newline através de um terminal interativo. Então, quando você busca um newline pra encontrar o "fim da linha", só vai funcionar assim, quando o usuário digita. Se ele ler da entrada padrão ou encerrar a digitação com outro caractere que não seja o ENTER, seu programa não vai pegar (referência). Mas para os fins do que você está estudando agora, acho que ok. 👌 Que bela história @Samuel Araujo! 9 meses estudando um livro. Poxa, muito foda mesmo. 🙂 E ficamos felizes em saber que fazermos parte da tua jornada de aprendizado. Precisamos, estamos aqui! E se quiser compartilhar programas como esse com a gente, só postar aqui no fórum. Abraço!
  18. Oi Samuel. Bem vindo à Mente Binária! 🙂 O trecho que citei não tá certo. O fim da string de entrada não contém um caractere nulo (0x00) e sim um caractere de nova linha, porque o usuário pressionou ENTER, que é o 0x0a. Ou seja, se você comparar com 0x0a, 10 ou `\n` (que dá tudo no mesmo), resolve este caso. 😉 Abraço.
  19. Opa, fiz um vídeo pra ajudar 🙂 Abraço!
  20. Opa, bem vindo! Só para clarificar, qual das seguintes coisas você quer? Colocar um ícone para aparecer no .exe quando este é listado no Windows Explorer. Colocar um ícone dentro da janela exibida pela MessageBox() (não é na barra de título). Criar uma janela que exiba um ícone na barra de títulos. São coisas diferentes. 🙂 Ah, como você tá compilando e linkando este programa? Quais os comandos? Abraço!
  21. A McAfee divulgou que encontrou nada menos que 38 clones de Minecraft com adware (malware que gera "cliques" em anúncios para os desenvolvedores) na Play Store. Se você baixou um desses recentemente, deveria considerar remover: Block Box Master Diamond Craft Sword Mini Fun Block Box Skyland Sword Craft Monster Crazy Sword Block Pro Forrest Diamond Block Game Skyland Forrest Block Rainbow Sword Dragon Craft Rainbow Mini Builder Block Forrest Tree Crazy Craft Clever Monster Castle Block Monster Diamond Dragon Craft World Fun Robo Block Pixelart Tree Pro Craft Mini Lucky Fun Block Earth Skyland World Block Rainbow Monster Castle Block Fun Rainbow Builder Craft Dragon Diamond Robo Block World Tree Monster Block Diamond Boy Pro Block Lucky Master Earth Craft Forrest Mini Fun Craft Sword City Pro Block Loki Monster Builder Block Boy Earth Mini Block Crazy Builder City Craft Sword Vip Pixelart Block City Fun Diamond Craft City Loki Rainbow Craft Boy Clever Sun Block City Dragon Sun Craft Loki Forrest Monster Lokicraft: Forrest Survival 3D Craft Castle Sun Rain Craft Game Earth World Craft Lucky Castle Builder Craftsman: Building City 2022 Craft Rainbow Pro Rain A lista está em ordem dos mais baixados. O Block Box Master Diamond teve incríveis 10 milhões de downloads no mundo todo, enquanto o menos baixado Craft Rainbow Pro Rain teve 50 mil. O Brasil é o terceiro país com mais dispositivos Android infectados, atrás apenas de EUA e Coréia do Sul. O pior é que o jogo funciona, então é difícil desconfiar, mas lá no fundo tem malware rodando pra gerar requisições em sites de anúncios, o que dá lucros para os criadores do adware. Dá pra questionar e dizer que esta é a maneira com a qual os desenvolvedores ganham dinheiro já que o jogo é de graça. No entanto, é antiético não avisar ao usuário. Por isso, a Google removeu todos esses jogos da loja. 🕵🏽‍♀️
  22. @Erann, @williansp, @Diogo Ramos, as inscrições para a turma 2023.1 foram encerradas já, mas teremos mais oportunidades no futuro. Infelizmente temos um número limitado de vagas para maximizar a atenção que podemos dar aos alunos mediante os recursos que temos disponíveis, mas em breve vamos expandir! 🙂 @Marcio Andre, devido ao grande número de inscrições, estamos fazendo por partes (ordem de chegada, basicamente), por isso não há uma data específcia para todas as inscrições. As conversas finais estão acontecendo esta semana. Quem se inscreveu receberá um contato nos próximos dias. 🙂 Abraços!
  23. Foi lançada na última sexta-feira, dia 7 de Abril de 2023, a versão snapshot_2023-04-07_18-12 do x64dbg. Os commits desde a versão anterior foram: 7 de Abril de 2023 Fixed compilation error caused by generated code 5 de Abril de 2023 Merge pull request #3044 from torusrxxx/patch000000d9 Fix a one-off issue while painting Add the plugin directory to the DLL search path 11 de Março de 2023 Fixed cannot delete a variable using "vardel x" Clean up XMM formatting; Fix build error with QMutex not found 10 Março de 2023 Add support for enumerating a range of symbols Em termos de novos recursos, não veio nenhum novo dessa vez, mas tem correções de bugs importantes na apresentação dos valores dos registradores XMM (existem oito na arquitetura IA-32 da Intel, introduzidos com as extensões SSE). Além disso, o diretório de plugins (release\x32\plugins ou release\x64\plugins) foi adicionado na busca padrão de dependências. Imagino que isso facilite quando um plugin for necessário no processo de boot do x64dbg, mas vamos esperar para ver se esse recurso será utilizado por algum plugin, afinal, os desenvolvedores devem ter um bom motivo para empenharem tempo nisso. Happy Hacking. 🤠
  24. Fernando Mercês

    CERO

    Ah, entendi! Tá certinho, você pegou a lógica. Só faltou o 20. 😉
  25. até
    https://securitybsides.com.br/2023/
×
×
  • Criar Novo...