Jump to content

Fernando Mercês

Administrators
  • Posts

    1,611
  • Joined

  • Last visited

  • Days Won

    209

Everything posted by Fernando Mercês

  1. 0 downloads

    Projeto de tradução do livro "Manual da Linguagem GNU C" da Free Software Foundation. Nossa tradução (em andamento): https://menteb.in/gnuc Série de vídeos sobre cada capítulo: https://www.youtube.com/playlist?list=PLIfZMtpPYFP6Lwvd5M53806wMDd307DoU Livro original (em inglês): https://www.gnu.org/software/c-intro-and-ref/
  2. Ontem, 11 de Novembro de 2024 às 13h18, Darshit Shah anunciou na lista info-gnu: Estamos felizes em anunciar o lançamento do wget 1.25.0, a mais nova versão estável deste utilitário essencial para transferências de arquivos via HTTP, HTTPS e FTP, os protocolos mais utilizados na Internet. O GNU wget é um software livre de linha de comando, amplamente usado por sua capacidade de ser facilmente integrado em scripts, agendado em cron jobs e operado em terminais sem suporte ao X Window System. Mudanças Disruptivas Essa nova versão traz duas mudanças significativas: 1. Remoção do Formato Abreviado de URLs HTTP e FTP: O formato abreviado, anteriormente desaconselhado, foi removido permanentemente. Isso significa que invocações como: $ wget usuário:senha@servidor agora resultarão em erro de URL. Usuários devem utilizar o formato completo: $ wget http://usuário:senha@servidor 2. Leitura non-blocking de arquivos de entrada: Em invocações como: $ print_urls | wget -i- o wget agora lê continuamente da entrada padrão (stdin) até que a outra extremidade do pipe seja fechada. Antes, o wget tentava ler tudo no início, fechava a entrada padrão e processava as URLs. Esse recurso não está disponível no Windows. Além dessas mudanças, a versão 1.25.0 inclui várias melhorias de estabilidade e pequenas correções, com um total de 46 commits realizados por 3 desenvolvedores nas 35 semanas desde a versão 1.24.5. Como Atualizar o wget no Linux Para atualizar sua versão do wget no Linux, utilize o gerenciador de pacotes de sua distribuição. Por exemplo: - Em distribuições baseadas no Debian/Ubuntu sudo apt update && sudo apt install wget - Em distribuições baseadas no Red Hat/Fedora: sudo dnf update wget Para compilar a versão mais recente a partir do código-fonte, acesse o site oficial do GNU wget e baixe o pacote tarball, depois siga as instruções de compilação. Como Instalar o wget no Windows O wget também está disponível no Windows através do gerenciador de pacotes Scoop (mas não tá na última versão). Siga as instruções abaixo para instalá-lo: 1. Primeiro, instale o Scoop, caso ainda não o tenha, executando o seguinte comando no PowerShell: irm get.scoop.sh | iex 2. Em seguida, instale o wget usando o Scoop: scoop install wget Após a instalação, o wget estará disponível para uso diretamente no terminal. Quem usa Chocolatey ou winget (conheça-o no artigo Windows 10 para hackers), o wget tá neles também. Agradecimentos Agradecemos aos colaboradores que contribuíram para essa versão: Darshit Shah (13 commits) Sam James (2 commits) Tim Rühsen (31 commits) Confira o arquivo NEWS para um resumo completo das novidades (em inglês). Tem também o wget2, que segue em desenvolvimento paralelo ao wget 1.x. Um dia vou testar e conto aqui pra vocês como usar. 🙂
  3. until
    Mais informações: https://www.bhack.com.br
  4. until
    Mais informações: https://www.h2hc.com.br
  5. Olá! Recomendo remover suas informações de contato.. principalmente telefone e e-mail, para evitar receber spam. 😉 Quanto ao problema, de fato o API monitor só monitora chamadas externas. Se as funções que lêem os parâmetros do INI estiverem em uma DLL, você pode adicioná-la no API Monitor para ele monitorar, mas se as funções estiverem no próprio EXE alvo, aí não dá com ele. Penso que você pode usar breakpoints de hardware no acesso aos dados. Localize-os no dump do x64dbg e aí põe breakpoint de leitura no primeiro byte da string traduzida que você quer. Isso vai fazer o debugger parar quando algum código ler tal string. Aí deve ficar mais fácil encontrar o código defeituoso, que não põe a string na tela por algum motivo. Abraço!
  6. Oi @mateus.mota, Apesar do infeliz ocorrido, o tópico é muito interessante, valeu por compartilhar com a gente! A comunidade gamer é bastante talentosa, então eu não descartaria ameaças mais avançadas (rootkits), movimentações laterais e coisas do tipo. Eu não sei nos Windows atuais se uma reinstalação de fato formata ou só zera as configurações e restaura arquivos a partir de alguma partição. Se o malware infectou tal partição, ele pode estar persistente ainda. Você tem outros dispositivos na sua rede? Desconfiando de movimentação lateral, poderia ser possível que o atacante infectou outro dispositivo mantém persistência lá? Roteadores, câmeras de segurança, etc, qualquer coisa que tenha uma shell na real. Eu resetaria tudo para as configurações de fábrica. Sobre as contas em si, além de mudar a senha, recomendo: Verificar se o 2FA está habilitado. Se não, habilitar por app (não por SMS). É legal desabilitar e reabilitar também para mudar a chave. Verificar as sessões ativas e desconectar todas elas (inclusive a sua). Se você sincroniza dados de browser, apagar tudo (cookies, arquivos temporários, extensões, etc). Tem a possibilidade de você estar reinstalando o malware de algum lugar.. OneDrive, Dropbox, etc? Sobre AV, eu compraria um se fosse possível. Uma vez um vídeo sobre o assunto. Vamos falando aí. Tem muita gente boa aqui na comunidade que pode dar várias ideias legais! Abraço!
  7. Olá! Eu sou da opinião de que quanto mais base, melhor, mas a escolha, ao meu ver, precisa levar em consideração outros fatores como qualidade da instituição de ensino, preço, proximidade da sua residência, segurança do caminho, etc. Em geral, penso que Ciência da Computação é a opção que daria a maior base (quatro anos). Junto a este há o de Engenharia da Computação (foco maior em hardware) e Sistemas de Informação (foco maior em sistema). Se não me engano, todos são de quatro anos. Como segunda opção, vem os tecnólogos (um pouco menos de base, de dois a três anos) que compreendem ADS e Redes. Dá pra perceber que não existe uma resposta que funciona como uma bala de prata né? Um bom curso de ADS é provavelmente melhor que um curso de CC meia-bomba. Assim como um curso de Redes perto pode ser melhor pra você que um curso de SI do outro lado da cidade (não queremos perrengue né?). O importante é estudar bastante e na melhor instituição possível dentro das suas possibilidades geográficas e financeiras, penso. Para pentest e forense, se eu tivesse que escolher um entre ADS e Redes do mesmo nível, ficaria com o primeiro. Posso estar enganado, mas os cursos de Redes focam em profissionais de administração de redes? Adoraria ler outras opiniões. 🙂 Grande abraço!
  8. until
    Mais informações: https://www.tempest.com.br/tempest_talk/tempest-academy-conference/
  9. until
    Curso A Arte da Engenharia Reversa ao vivo e online que pode ser adquirido aqui.
  10. Olá! Se o código malicioso dela tá na DllMain(), você precisa parar lá. Tem duas alternativas simples: por um breakpoint na LoadLibrary() ao debugar o rundll32.exe (passando sua DLL como argumento) ou setando o EIP na mão para a DllMain() ao abrir a DLL direto no x64dbg. Também acho importante ver como o processo chama a DLL. Aï você pode imitar e fazer igual para ver o comportamento malicioso. 🙂 Vê se a aula 21 do AMO te ajuda. 😉 Abraço e boa sorte!
  11. Oi @Jorge Luiz_, Construções como if, else, for, while, etc são de alto nível. Em Assembly, elas são implementadas utilizando saltos (em x86, são as instruções começando com "J", de "jump"). Por exemplo, analise o código abaixo: cmp eax, 0 jne exit ; código se EAX é zero exit: ; resto do código No exemplo, há uma comparação de EAX com zero. Se não for zero, o programa vai saltar (JNE - Jump If Not Equals) para o rótulo (label) exit. Mas se EAX for zero, o código logo abaixo do salto (JNE) será executado (e depois o que está sob o rótulo exit também). O que acontece é que alguns compiladores de Assembly possuem macroinstruções que facilitam este trabalho e funcionam de forma similar às instruções de alto nível. Por exemplo, no fasm você pode fazer: .if eax = 0 ; código se EAX é zero .endif ; resto do código Mas no binário compilado, você verá os saltos de qualquer maneira, pois estas são instruções "reais" que o processador entende (enquanto .if só o compilador Assembly entende). Além disso, os rótulos somem pois os destinos da maioria dos saltos são deslocamentos (X bytes para frente ou para trás), o que na prática vira endereços de memória. Veja: Dá uma olhada: http://flatassembler.net/docs.php?article=win32#2.2 Abraço!
  12. A explicação é complicada (para os meus parâmetros hehe), mas vou tentar. 🙂 *argv[] na main() já é um ponteiro para um array de chars. Mas é uma variável, e tem um endereço de memória (supomos, 0x200). Para a sum(), ao fazer &argv você passa o endereço de argv, ou seja, 0x200. Na sum() você recebe esse endereço como um ponteiro para ponteiro para um array de chars: **args[]. O que está certo. Na sum(), args contém um único elemento (o ponteiro para um array chars e não o array de chars em si). Com *args[i], sabendo que a precedência de [] é maior que a de *, então vamos analisar o loop: args[0] é o primeiro (e único) elemento de args. *args[0] o acessa. args[1] falha, pois args só contém um elemento. Segfault aqui. Agora, com (*args)[i]: (*args) é resolvido primeiro em todas as iterações do loop. O resultado é um ponteiro para um array de chars. (*args)[0] funciona, assim como (*args)[1], (*args)[2], até argc-1. Um desenho certamente explicaria melhor, ou talvez com o uso do GDB. Se não entender, avisa aí que eu tento de outra forma. Ou talvez outra pessoa explique melhor. 🙂 Em tempo, você complicou mais do que precisa. O que eu faria é: sum(int n, char *args[]) { // código strtol(args[i], ...); } main(int argc, char *argv[]) { // código sum(argc, argv); } Dessa forma você passa o argv, que já é um ponteiro para um array de char (C strings, neste caso) para sum() e ela acessa por args, que é do mesmo tipo. Outras ideias, só por curiosidade: Economizando a variável i ao somar do último para o primeiro elemento (ou seja, na ordem reversa): int sum(int n, char *args[]) { int result = 0; n--; while (n > 0) { result += strtol(args[n], NULL, 10); n--; } return result; } Economizando o uso de argc, já que o último elemento de argv é sempre nulo - ou seja, argv[argc] == NULL: int sum(char *args[]) { int result = 0; while (*args) { result += strtol(*args, NULL, 10); args++; } return result; } Ou uma versão menorzinha, aproveitando que ++ é um operador de pós-incremento (primeiro o valor é lido e depois é incrementado): int sum(char *args[]) { int result = 0; while (*args) result += strtol(*args++, NULL, 10); return result; } Mas aí já entram mais conceitos.. por exemplo *args é o mesmo que fazer *args != NULL. E args++ é aritmética de ponteiros. Não é "mais um" e sim "mais X bytes", onde X é o tamanho do tipo. Versão "olha mãe, sem as mãos": int sum(char *args[]) { return *args ? strtol(*args, NULL, 10) + sum(args + 1) : 0; } Aqui já entra recursividade (pode esgotar a pilha) e o ternário. Fiz essas coisas só para despertar a curiosidade mesmo e provar que C é a linguagem na qual o universo foi escrito. 😄 Abraço.
  13. Não existe um suporte nativo, mas tem gambiarras possíveis: ; Opção 1 - Simplesmente um ponto-e-vírgula no início de cada linha (mas essa você já sabe) ; linha1 ; linha2 ; linha3 ; Opção 2 - Começa com ponto-e-vírtugla e protege o caractere de fim de linha com a contra-barra ; linha1\ linha2\ linha3 Opção 3 - Testar se uma macro inexistente existe %ifdef COMENTARIO ; pode ser qualquer coisa, contanto que não exista - ou seja, não esteja definida linha1 linha2 linha3 %endif Opção 4 - Avaliar uma expressão numérica que retorne falso sempre %if 0 linha1 linha2 linha3 %endif Abraço.
  14. Acho que se você postar o código - e o programa alvo se puder, ajuda mais. 🙂 Pensando aqui que pode ser alguma proteção no programa alvo, para evitar isso, mas pode não ser também. hehe Abraço.
  15. Oi @SERGIO A BERGAMIN, tudo certo? Seria o caso de o executável ser de 32-bits e a máquina do seu cliente de 64-bits? Que versão do Windows tá no cliente? Já tentou o modo de compatibilidade? Abraço!
  16. Opa, Sim, por todos os nossos canais. 🙂 Sim, os requisitos estão no fim do texto aqui. Abraço!
  17. Oi @Guilherme23, tudo em paz e contigo? Estamos planejando uma turma do curso A Arte da Engenharia Reversa (pago, online e ao vivo). Em relação aos cursos gratuitos, não lançaremos outros sobre estes tópicos este ano. Segue um resumo do que temos sobre ER e 😄 A Arte da Engenharia Reversa Pago, online, ao vivo. Duração de 16h (normalmente sábado e domingo das 9h às 18h). Não decidimos data ainda, mas vamos divulgar quando abrirmos inscrições. Sempre atualizado e permite tirar as dúvidas ao vivo com o instrutor ou instrutora. Curso de Engenharia Reversa Online (CERO) Gratuito, em vídeo no YouTube. Não temos como atualizar os vídeos, mas o conhecimento ainda é útil. 🙂 Livro: Fundamentos de Engenharia Reversa Gratuito. Para quem prefere ler no seu tempo. Livro: Aprendendo Assembly Gratuito. Para um estudo detalhado da linguagem (com base em Linux). Sobre C, temos: Programação Moderna em C Gratuito, em vídeo no YouTube. Não temos como atualizar os vídeos, mas C demora bastante a mudar, então super vale! Livro: Manual da Linguagem GNU C Gratuito. Para quem prefere ler no seu tempo. Tradução do livro do Stallman sobre GNU C. Esta tradução está em andamento. Liberamos novos capítulos a cada 15 dias, seguidos de um vídeo na playlist Manual da Linguagem GNU C. Há ainda um livro muito legal de dicas de C e Assembly que o autor nos permitiu disponibilizar para download aqui. Chama-se Dicas - C e Assembly para arquitetura x86-64. Por hora, isto é tudo. 🙂 Grande abraço e bons estudos. Qualquer outra dúvida é só falar. Abraço!
  18. Olá! Por favor, leia esse tópico: Aí você edita o seu e vamos em frente. 🙂 Abraço!
  19. Opa, tudo bem? Obrigado por terminar o curso! No momento não emitidos certificados para os cursos livres pois não temos nenhuma maneira automatizada de fazê-lo. Um abraço!
  20. Olá! Se alguém tiver tempo, pode ser que consiga te ajudar sim, mas se você quiser aprender e fazer você mesmo, ou se unir com alguém da comunidade e fazer junto, recomendo que comece pelos nossos treinamentos gratuitos aqui. Dependendo do quanto você já conhece, pode ser interessante fazer o de C primeiro e depois o CERO. Aí você pode estudar também pelo livro Fundamentos de Engenharia Reversa e o de Assembly, ambos gratuitos. Tá tudo no menu Ensino aqui mesmo no nosso site. 🙂 Abraço, Fernando
  21. Eu nunca usei essas funções da GDI, mas pelo que vi na documentação da LineTo(), ela usa a “caneta” padrão: The line is drawn by using the current pen and, if the pen is a geometric pen, the current brush. Meus conhecimentos de Paint me dizem que o caminho é alterar a caneta antes de chamar a LineTo(). Pelo que vi, tem que criar a caneta no seu código com a CreatePen(): HPEN caneta = CreatePen(PS_SOLID, 2, RGB(0, 0, 0)); No exemplo acima usei uma caneta sólida, de espessura 2 e cor preta. Depois precisa atribuir a caneta à sua tela: SelectObject(tela, caneta); Se tudo der certo a LineTo vai usar essa caneta ao invés da padrão, mas não testei viu? Tô no celular. hehe Abraço!
  22. Teremos prazer em ajudar, mas você precisa ler isso e adaptar seu tópico: Abraço!
  23. Salve, tudo bem e você? Quando parar na MessageBoxW, olha na Call stack para ver quem a chamou (tô assumindo que você tá no x64dbg). Abraço!
  24. https://www.nullbyte-con.org/
  25. https://bsides.vix.br/
×
×
  • Create New...