unc4nny Posted June 4, 2020 at 02:47 PM Share Posted June 4, 2020 at 02:47 PM 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! Link to comment Share on other sites More sharing options...
Fernando Mercês Posted June 4, 2020 at 07:27 PM Share Posted June 4, 2020 at 07:27 PM A partir daí, eu acho que eu deixaria o payload rodar e monitoraria as chamadas (API Monitor, drltrace, etc) pra ver que funções do Windows o payload chama. Depois você pode voltar ao x64dbg e por breakpoint nelas para analisá-las. Acho mais importante/fácil que debugar todo o código. Outra opção é usar o trace do x64dbg pra você ver o caminho de códigos (saltos) que o payload executa e não perder tempo analisando junk code. O @Thiago de Queiroz mostrou como usa o trace na palestra dele na primeira MBConf. ? Abraço! Link to comment Share on other sites More sharing options...
unc4nny Posted June 4, 2020 at 10:36 PM Author Share Posted June 4, 2020 at 10:36 PM 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 Link to comment Share on other sites More sharing options...
Fernando Mercês Posted June 5, 2020 at 01:21 PM Share Posted June 5, 2020 at 01:21 PM Show! 14 horas atrás, unc4nny disse: tem como colocar break points em todas as calls no x64dbg? Tudo é possível. rs Mas pelo que entendi você quer parar em todas as chamadas à funções externas, certo? Bem, nunca tentei para em todas. Daria pra fazeer pela aba "Symbols", mas como é payload, pode ser que esteja vazia. Parece um pouco de exagero, mas uma ideia é no Trace -> Trace into você colocar uma condição (Break Condition) onde o registrador EIP esteja fora da faixa das seções do binário. Por exemplo, num binário assim (Memory Map): Como as seções dele estão na casa dos 0x400000, a condição eip > 0x500000 vai fazer o x64dbg parar quando uma função externa for chamada. Você tem a faixa de endereços do teu payload, então é só adaptar. Mas eu ainda acho que monitorando as chamadas, seja com trace, logando ou com API Monitor ou outro e depois breakando em cada uma delas é mais negócio. Sabendo em qual chamada você quer parar, é só ir na Command Bar do x64dbg (lá embaixo) e digitar "BP CreateFileA" por exemplo. ? Abraço! Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.