Ir para conteúdo

teuzero

Membros
  • Postagens

    12
  • Registro em

  • Última visita

  • Dias Ganhos

    3

Posts postados por teuzero

  1. Em 08/02/2024 em 09:46, fredericopissarra disse:

    Coisas como:

      section .bss
    var: resd 1
    
      section .text
    ...
      mov eax,[var]

    Aqui var é um offset no endereço efetivo [var]. Como o NASM está usando um endereçamento não relativo a RIP o linker precisará colocar um fixup, uma entrada de relocação. Um jeito de evitar isso no modo x86-64 é usando mov eax,[rel val], dizendo ao NASM que o offset é relativo a RIP. Mas é melhor dizer a ele que TODOS os endereços desse tipo são relativos a RIP via diretiva default rel.

    A vantagem do modo x86-64 e os endereços relativos a RIP é que bem menos entradas na tabela de relocação são necessárias no executável final...

    Note que endereços relativos a RIP têm apenas o offset, nunca outro registrador... Algo como [rax+4] ou [rbx+4*rax+4] não são relativos a RIP.

    Com relação ao mov ebx,[eax], note que no modo x86-64 os endereços têm sempre 64 bits de tamanho. Ao usar [eax] você está, explicitamente, extirpando os 32 bits superiores de um endereço. Endereços devem usar registradores R??, assim, o correto ali seria mov ebx,[rax]. Note que, aqui, RBX será inicializado e os 32 bits superiores serão, automaticamente, zerados, tornando o xor rbx,rbx anterior desnecessário.

    Além disso, ao usar EAX num endereço efetivo o NASM é obrigado e acrescentar um prefixo 0x67 na sua instrução. Evite usar endereços de 32 bits num código de 64. Mesmo que não seja para endereços... Por exemplo, suponha que eu queira multiplicar EAX (de 32 bits) por 5. Isso pode ser facilmente feito com lea eax,[rax+4*rax]. Note que o destino é EAX, mas o endereço efetivo é RAX+4*RAX. O endereço efetivo é calculado em 64 bits (como deve ser), mas a atribuição final estirpará os 32 bits superiores (e os zerará).

    PS: Yep... multiplicar EAX por 10 é tão simples quanto:

      lea eax,[rax+4*rax]    ; ou '5*rax', o NASM entende que isso é 'rax+4*rax'
      add eax,eax

    Desde que estejamos trabalhando com valores sem sinal.

    é eu vi que a realocação tem muitas coisas desnecessária, eu vi que virtualprotectex não esta vindo o tamanho da seção certa nem as permisssões... de certo é só fazer o va dos endereços e copiar os códigos para o endereço e dar permissão.

  2. Montei um crypter x64 pequeno basico dos basicos usando nasm, eu gosto de estudar assembly, C/C++.

    É um "Process hollowing" na gambiarra, mais é só para estudo mesmo.

    Está no github: https://github.com/TeuZero/BasicCrypterX64-NASM

    Eu tenho um blog onde posto algumas coisas, https://c0d3r3d.blogspot.com/

    Gosto muito de aprender com outras pessoas.

    Quem quiser dar uma olhada no código, comentar, sugestões, criticas, fiquem avontade, estou aqui para aprender.

    Muito Obrigado.

    • Curtir 2
  3. Então um cara me mandou um arquivo compilado .net feito em c#, mais ele afirma com toda certeza que não tem nada malicioso, ele só disse que tem um anti-decompiler e um form, usei jetBrains e tem um monte de lixo lá e como achar agulha no palheiro, porque eu nunca fiz analise de arquivo .net, cheguei abrir o xdbg e vi que ele usa CreateNamePipe, recebe dados de conexão com função recv, vi comparando todas teclas do teclado.No jetBrains vi uma parte usando socket mais só achei o ip 127.0.0.1. Se for possivel dar uma ajuda de como analisar um binario desse eu agradeço:

    WareProject.exe

×
×
  • Criar Novo...