Jump to content

unc4nny

Membros
  • Content Count

    27
  • Joined

  • Last visited

Everything posted by unc4nny

  1. 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
  2. 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 q
  3. 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
  4. 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
  5. 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 u
  6. @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!
  7. 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).
  8. 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 continua
  9. 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 es
  10. 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?
  11. 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!!
  12. 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 _ID
  13. 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
  14. Oi. Estou lendo o livro practical reverse engineering, e nele, o autor fala sobre otimizacao de switch-case statements usando jump tables. Aqui esta o Assembly e a representacao em Pseudo-C do autor: Eu realmente nao to entendendo muito bem o que esta acontecendo: O que a linha 03 no codigo ASM quer dizer? No sentido em que, eu acho que entendo mais ou menos o que "ds:offset" significa mas nao entendi o motivo/significado desse [edi*4], principalmente comparando com a linha 01. Se nela o codigo compara edi com 5, como que ele esta usando o operador de acesso a me
  15. Faz sentido mano. Deu pra dar uma esclarecida agora, brigadao cara
  16. Opa, foi mal.Minha duvida eh, como que funciona o casting da funcao para uma string? Isso parece meio esoterico, pelo menos na minha cabeca ashduiahsduih
  17. Oi. Me pediram pra formular minha duvida melhor no video que o Fernando fez de CRC. Bixo, eu achava que entendia de C, mas o jeito que esse CRC funciona me bugou um pouquinho. Depois de pensar um pouco eu ate consigo ver oq esta acontecendo, mas eu nao sei se eh isso que esta acontecendo bool checa(char *nome, int serial) { int serial_correto = 0; while (*nome) serial_correto += *nome++; return (serial == serial_correto); } int main(void) { char nome[50]; int serial; uint32_t crc = crc32((unsigned char *)checa, 63); O unico jeito que eu vejo de isso funcionar d
  18. Oi. Estou tentando resolver um desafio de pwn, e o desafio eh basicamente realizar um buffer overflow. Contanto, o binario esta com praticamente todas as opcoes de seguranca ativas: Eles dao o codigo fonte do arquivo para nos estudarmos: Pelo oq eu pude observar do codigo, eu preciso escrever o suficiente na variavel overflowme para que ele sobrescreva o valor do parametro key. Mas o binario esta com a opcao de canary ativada. Lendo por ai eu descobri que existem dois jeitos de lidar com o canary: fazendo leaking e brute forcing. Aparentemente o brute forcing eh para
  19. Oi. Se eu nao me engano eh por regra da linguagem. Primeiro eh bom notar que um ponteiro NAO eh um array, e um array NAO eh um ponteiro. Se nao estou enganado, {1, 2, 3} nao eh exatamente um array de inteiros, mas sim uma lista de inicializadores. Isso pode ser usado para inicializar um array de inteiros, mas nao um ponteiro, por exemplo: int a[] = {1, 2, 3}; Por baixo dos panos, isso esta na verdade: Reservando um espaco de sizeof(int) * 3 na stack Colocando cada valor em a[0]...a[2] indivudualmente. Por ex: a[0]=1; a[1]=2... Para voce fazer algo semelhante ao
  20. Entao, tentei fazer o exercicio que o Fernando deixou pra gente na aula 0 do AMO. Acabou que eu nao cheguei exatamente em um resultado, mas eu acho que cheguei perto. Entao aqui vai minha 'nao-solucao' (O sistema que eu uso eh Manjaro Linux, soh por via das duvidas): A primeira coisa que eu fiz, foi voltar pra VM e abrir o arquivo com o pestudio mais uma vez, soh pra dar mais uma olhada na tabela de strings que o pestudio formou. Nela eu achei algumas coisas interessantes: Uma sequencia de caracteres que representa os caracteres da base64 (A-Z, a-z, 0-9, + e /) e duas "stringonas". Uma delas
  21. Faz tempo que eu vi o CERO, to aproveitando o tempo livre da quarentena pra re-assistir kkkkkk. Mas eu acho que fala sim, se eu nao me engano foi no seu video que aprendi sobre isso pela primeira vez, dai eu fui dar uma pesquisada sobre, mas faz tempo tambem, esses ultimos semestres foram foda, tive que focar quase que 100% na facul e deixei isso de lado, dai to voltando aos poucos. Esse cara aqui da um gas legal nessa parte de linkadores se vc tiver interessado (acho que sao 20 posts): https://www.airs.com/blog/archives/38 Vou dar uma olhada nesse livro tambem, vlw irmao! Eh noissss, ma
  22. Muito boa a explicacao, deu pra dar uma clareada absurda. Soh mais algumas duvidas: Pq a .got.plt precisa da permissao de escrita, alem da leitura? Seria por causa da relocacao em runtime, ou eu to viajando? Bixo, esse arquivo parece mto interessante, vou pesquisar sobre ele, parece o tipo de coisa que eu preciso saber sobre. Tem alguma leitura que vc possa me direcionar sobre ele? mto obg, mano, ajudou bagarai!!
  23. Opa! To atrasado aqui mano, mas eu nao sei se eu to viajando, mas qual a diferenca entre o layout da memoria virtual de um executavel e as secoes ELF? Eles parecem ser 2 coisas diferentes, mas parecem ser muito similares. Eu to viajando?
  24. Ola, eu recentemente comecei a me embananar com certos conceitos. Por exemplo, eu sei (acho que sei pelo menos) que todo processo tem uma memoria virtual, e a o layout dessa memoria virtual eh dividido em nos segmentos data, bss, stack, heap, etc... Mas um arquivo ELF tambem eh divido em secoes. E algumas secoes tem o mesmo nome dos segmentos da memoria virtual (.data, .text, etc). No post tem duas imagens uma com o layout da memoria e outro representando as ELF sections Minhas duvidas: Qual a diferenca entre os segmentos da memoria virtual e as secoes de um arquivo ELF? As
  25. Opa, cara, valeu pela resposta, admiro muito seu trabalho! Eu comentei no video que vc postou sobre o curso de analise de malware, que se tudo der certo esse ano eu comeco um projeto na facul e vou ganhar bolsa, e certamente vou me tornar um apoiador! Acho que ta na hora de eu passar pra analise dinamica entao! Mto obrigado cara, vc eh foda, juro q ate hj nunca achei nenhum conteudo igual a de vcs, vcs tem meu eterno respeito, serio!
×
×
  • Create New...