-
Posts
1,645 -
Joined
-
Last visited
-
Days Won
235
Content Type
Forums
Courses
News
Articles
Professions
Studying materials
Research
Downloads
Store
Events
Gallery
Everything posted by Fernando Mercês
-
untilMais informações: https://www.tempest.com.br/tempest_talk/tempest-academy-conference/
-
untilCurso A Arte da Engenharia Reversa ao vivo e online que pode ser adquirido aqui.
-
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!
-
Como colocar if, elseif e else no Assembly?
Fernando Mercês replied to Jorge Luiz_'s topic in Assembly
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! -
Problema para "desreferenciar" Ponteiro de Ponteiro de Ponteiro!
Fernando Mercês replied to LLuciano's topic in C/C++
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. -
Comentários com mais de uma linha no NASM
Fernando Mercês replied to Jorge Luiz_'s topic in Assembly
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. -
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.
-
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!
-
Opa, Sim, por todos os nossos canais. 🙂 Sim, os requisitos estão no fim do texto aqui. Abraço!
-
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!
-
Olá! Por favor, leia esse tópico: Aí você edita o seu e vamos em frente. 🙂 Abraço!
-
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!
-
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
-
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!
- 1 reply
-
- 1
-
Teremos prazer em ajudar, mas você precisa ler isso e adaptar seu tópico: Abraço!
-
Dificuldade em conseguir "patchear" software.
Fernando Mercês replied to Crowtler's topic in General
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! -
untilhttps://securitybsides.com.br/2024/
-
De quebra, acabei lendo o artigo. Parabéns pela pesquisa! 🙂 E nem foi nada. Por um momento achei que fosses spammers se aproveitando do conteúdo da PRIDE, mas tá tudo certo já! 😎
- 1 reply
-
- 2
-
Exercício | Aula1 - Sistemas de Numeração | CERO
Fernando Mercês replied to renatomaldonado's topic in General
Que legal! No exercício 4, a ideia é você dar, de cabeça, a resposta em hexadecimal. 😉 No 5, pensa como seria 0x10 - 4 e aí aplica a regra na operação que ele sugere. Ajudou? Abraço e obrigado por estudar com a gente! ❤️ -
Gostei dos nomes das seções. 🙂 Maneiro seu projeto!
-
@miguelblefari falta um ponto-e-vírgula no fim da definição da classe, ou seja, no fim de tudo. 😉
- 1 reply
-
- 1
-
Eu ajudaria, mas segurança ofensiva não é minha praia. Ouço falar bem da DCPT, mas não conheço a Exin. 😞 Vamos esperar se alguém com conhecimento sobre o assunto ajuda mais. 🙂
-
hahah tranquilo! No GitHub, em geral, binários vão na seção Releases. 😉 Abraço!