Jump to content

unc4nny

Membros
  • Posts

    29
  • Joined

  • Last visited

  • Country

    Brazil

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

unc4nny's Achievements

11

Reputation

  1. Oi. Estou procurando integrantes (dois) para o CTF da trendmicro. Não precisa ser experiente ou hackudão trevoso, nem eu nem meu colega somos! Queremos participar pela experiência somente 🙂
  2. brabo o artigo, bem completo, explicou mto bem o que eh, por q fazer, e como fazer. Os links q tu colocou sao brabos tamem
  3. Oi. Talvez voce ja tenha se deparado com algumas amostras de Malware em que ele acessa o PEB para depois acessar a export table de alguma Dll e resolver uma funcao em runtime, evitando deixar strings no arquivo compilado para dificultar nossas vidas. Acredito que o nome dessa tecnica seja "Resolucao dinamica da IAT" (@Fernando Mercês se eu tiver falando abobrinha mim disgurpe pfvo D:). Nao pretendo escrever um artigo sobre como funciona isso, ja que eu provavelmente nao sei o suficiente, masss... Eu escrevi um Proof of Concept (PoC) e coloquei ele no meu GitHub. Segue alguns prints que eu tirei durante a execucao dele: A funcao LoadLibraryA sendo carregada e posteriormente chamada: Conteudo no registrador eax: Conteudo na pilha (note o argumento sendo passado) Visao no Ghidra: O codigo fonte esta disponivel no meu repositorio. Se voce tem interesse em dar uma olhada, talvez ajude voce a reconhecer esses padroes mais rapido na proxima vez que voce for analisar um malware. Essa documentacao visual do Corkami tambem eh muito util. Eu ainda estou trabalhando no codigo, eu pretendo deixar ele muito bem documentado e legivel, ja que eu ainda acho que a documentacao sobre esse assunto ainda eh meio escassa. Eventualmente, eu ainda pretendo fazer de um modo que nao deixe uma string sequer no programa. Mas se voce quer algo que funciona logo, mesmo que nao muito bem documentado (na minha opiniao podia ter mais comentarios, mas como dizem... bons codigos falam por si mesmo), existe o lazy_importer. Eu fui obrigado a usar as definicoes de struct do codigo dele, ja que havia se passado uma semana e eu nao fazia idea do porque estava dando Acess Violation 0x000005. Ainda nao descobri o porque, mas nao havia muita diferenca entre as definicoes dele e minha, enfim... (mas aprendi sobre o reinterpret_cast lendo o codigo dele).
  4. Putz vdd eu tinha esquecido completamente do tracing!!! Vlw mano vou usar isso aqui! :P Outra coisa, vc sabe se tem como colocar break points em todas as calls no x64dbg? Acho q eu vou fazer isso tamem
  5. Oi. Estou analisando um malware e consegui realizar o unpack do que eu imagino que seja o payload. Nao sei em quantas etapas o malware eh dividido pois esse foi o primeiro payload que eu conesgui extrair do malware ate agora. O payload eh um shellcode que foi copiado para um endereco de memoria que foi alocado utilizando o VirtualAlloc, depois eh somado 0x42b7 ao endereco base, e antes de retornar, esse endereco eh colocado na stack. Para fins de ilustracao: eax = VirtualAlloc() eax = copy(eax, shellcode) eax=eax+0x42b7 push eax ret Entao o endereco de retorno da funcao atual eh sobreescrito para esse novo offset. Mas oq realmente importa aqui eh o fato que esse shellcode esta extremamente obfuscado: O autor do malware colocou varios codigos inuteis no programa, por exemplo o js, e eu nao sei se tem mais. O que eu gostaria de saber eh se existe algum metodo para otimizar meu tempo e evitar de fazer o stepi de todo o codigo? Pq o shell code ficou bem grande (talvez seja coisa da quantidade de obfuscacao utilizada). Obrigado desde ja!
  6. Oi. Esse dias eu ouvi falar do banker trojan que vai pelo nome de IcedId. Saiu bastante noticias sobre ele na epoca e entao eu peguei uma sample e fui tentar brincar com ela. O malware aparentemente tem 2 stages de unpacking, o primeiro, depois de muito google-fu e leitura, eu consegui passar. Agora o segundo eu to com mais dificuldades. O primeiro estagio do unpacking me devolveu um arquivo PE, entao eu abri ele no PE estudio e um indicators diz o seguinte: 1525,The file contains another file,type: unknown, location: overlay, offset: 0x00019C00,1 Depois, eu fui dar uma olhada nesse offset dentro do arquivo, e nao achei nada, nao soh isso, mas o arquivo nao tem import table. Depois de uma pesquisada eu vi que existe uma parada chamada Dynamic Library Resolution, onde um malware faz a resolucao da import table em tempo de execucao. Talvez seja ate o q esta acontecendo aqui, mas como eu sei eh isso que esta acontecendo e nao eu que fiz cagada? Enfim, o PEBear diz que as secoes do binario estao dispostas dessa forma: Eu nao consegui achar nada dumpando o binario. Em disco o offset indicado pelo pestudio eh o final da .reloc, entao acho que nao eh la que eu preciso olhar. O PEBear tambem diz que em memoria, a secao .data comeca no offset 0x3000, mas tem tamanho 0x18800, entao eu imagino que o arquivo que eu estou procurando deva estar la. O problema eh que a secao nao aparece no binario em disco, ja que a secao nao existe nele, e eu nao to conseguindo achar no binario em memoria. Alguem tem uma ideia boa por onde comecar? Se alguem quiser o hash da sample, avisa, eu nao sei se eu posso postar aqui auiasuiduas
  7. @Fernando Mercês usei a parada do message breakpoint, mto massa mano! Vou ver se acho um crackme em GUI pra tentar usar de novo, junto com o tracing :c. Valeuuuu!
  8. Ahhh po, faz sentido, por isso que o debugger tava caindo na user32.dll do nada mesmo dando step over, talvez ele interprete o callback como uma chamada de funcao no mesmo modulo? Dei uma lida aqui na documentacao das funcoes que estao sendo chamadas no inicio do codigo e acho que entendi o que ta acontecendo. Tambem vou dar uma lida nesse link que vc postou, parece bem interessante! Pior que eu cheguei a tentar fazer isso mas nao dava certo, eu acho que eh porque o codigo fica loopando na WinMain ate receber o input? Ou talvez eu estivesse fazendo errado (o mais provavel asuidasuih). O que funcionou pra mim foi colocar um breakpoint de escrita na secao .data e passar o registro (eu chutei que o buffer onde eles seriam copiados fossem variaveis globais ja q eu n cheguei a ver nenhum buffer sendo inicializado no disass), e funcionou aausdasuihdh Vlw mano!!!
  9. Oi. Estou tentando utilizar um truque que foi mostrado na palestra Debugging Tricks na MBConf v1 (onde o cara mostra como fazer o tracing do programa), no crackme do cruehead utilizado pelo Fernando nas aulas do CERO, porem nao esta dando 100% certo; o que eu estou fazendo: Botao direito -> Trace Record -> Start Run Trace Depois vou em: Trace -> Trace Record -> Trace over into trace record E depois clico em Animate Over. Ele funciona inicialmente, o problema eh quando eu insiro as credenciais que o crackme pede, ao inves de continuar a animar e fazer o tracing, ele simplesmente pula pra mensagem de erro, entao as unicas intrucoes que o x64dbg highlighta sao essas: Que eh basicamente o inicio da main thread ate a parte que eu clico em register, e ele nao mostra o caminho que o codigo toma depois de eu inserir as credenciais. O que eu gostaria que acontecesse eh que ele highlightasse tudo que ocorre depois que eu insiro as credenciais. Voces sabem se eh possivel fazer isso?
  10. Rapaz eu tava pra conseguir um projeto no NERDS com Magnos mas o coronga acabou com o esquema uiahsuiahsduias... Mas ele ta me ajudando bastante, ele eh brabo mesmo, manja muito e parece que ta sempre disposto a ajudar. Cara... isso seria incrivel!!! Esse semestre eu estaria entrando no setimo periodo (com ainda algumas materias de matematica pra tras kkk), nao sei oq vai acontecer pq a UFES suspendeu ensino a distancia, entao eh provavel que esse semestre va pro ralo. TOPPPP. Se for rolar mesmo eu com certeza estarei la!!! Eu tenho um amigo que esta estudando junto comigo InfoSec e a gnt tem se ajudado bastante, ele curte mais a parte de Web, vou arrastar ele pra la tambem, vlw mano, vc eh brabo!!
  11. Maycon, eu estava lendo seu blog, e vi que vc falou que seu TCC foi focado em InfoSec. Eu faco C-Comp na UFES tambem e tambem queria que meu TCC fosse nessa area. Eu curto muito a parte de exploracao de binarios e tava pensando que talvez pudesse ser algo sobre isso, eu espero que eu aprenda mto mais coisa ate o final da facul para que eu possa expandir minhas opcoes kkkkk). Vc teria alguma dica mano?
  12. Cara, muito obrigado mil vezes!!! Depois que eu enviei a pergunta eu achei esse inline assembly e nao tava conseguindo fazer funcionar nem a pau. Ops, eh vdd, my bad. Cara mto obrigado!!
  13. Oi. No livro Practical Reverse Engineering, o autor mostra um trecho de codigo asm. Numa parte do codigo, tem a seguinte sequencia de instrucoes: Pesquisando eu vi que o sidt eh uma instrucao que carrega o Interrupt Descriptor Table no endereco especificado, e ele esta comparando para ver se o base address do IDT esta no range especificado no codigo (8003f400h-80047400h). Isso eh uma tecnica para ver se o programa esta rodando em maquina virtual. A duvida vem aqui: Na hora que o cara vai explicar (decompilar o codigo) ele faz da seguinte maneira: typedef struct _IDTR { DWORD base; SHORT limit; } IDTR, *PIDTR; BOOL __stdcall DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){ IDTR idtr; __sidt(&idtr); if (idtr.base > 0x08003f40 && idtr.base < 0x80047400) return FALSE; } Minha duvida eh justamente no __sidt(&idtr); Fui tentar reproduzir um codigo similar aqui na minha VM, mas da erro de compilacao. Estou usando o Dev-C++ Segue o codigo: #include <windows.h> #include <stdio.h> typedef struct _IDTR{ DWORD base; SHORT limit; } IDTR, *PIDTR; int main(){ IDTR idtr; __sidt(&idtr); printf( "Base: %d\r\nLimit: %d\r\n", idtr.base, idtr.limit ); return 0; } O erro sendo gerado eh: undefined reference to __sidt. To lendo a documentacao do __asm no site da microsoft mas ate agora nao achei nada que me ajudou. Alguem pode me dar uma luz? Eu quero escrever o Interrupt Descriptor Table em alguma variavel que eu consiga ler, ou ate mesmo ler o IDTR em si. Obrigado desde ja! EDIT: Eu esqueci de escrever o #include <intrin.h> que supostamente eh o headerfile onde __sidt esta definido, mas esta incluso!
  14. Cara, acho que entendi tudo o que voce disse (eu espero haha), explicou muito bem. O que realmente me bugou foi o uso do edi como acesso ao indice do vetor, eh isso mesmo que ta acontecendo? Pq eu achava que o acesso nesses segmentos era feito por SEGMENTO:OFFSET, ai esse [ edi * 4 ] me bugou muito, pq que o asm esta usando essa sintaxe? Na minha cabeca seria assim: ds:[0x100011a + edi * 4] <- isso faz sentido? Eh a primeira vez que eu vejo essa sintaxe. Mto obrigado mano vc eh brabissimo
×
×
  • Create New...