unc4nny Postado Maio 15, 2020 em 12:52 Compartilhar Postado Maio 15, 2020 em 12:52 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? Link para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Maio 15, 2020 em 19:47 Compartilhar Postado Maio 15, 2020 em 19:47 Opa, que legal que tá pondo isso em prática! O @Thiago de Queiroz certamente pode explicar melhor, mas acredito que a forma como esteja fazendo não seja muito efetiva porque estás usando trace over (ou seja, não entra nas funções) e a função que é chamada quando qualquer evento na janela do programa ocorre (tipo o clique de um botão) não está na WinMain (que é essa que você postou o disassembly). Esse código de 4010F1 até 40111B é um loop clássico de uma janela usando a Win32 API. Antes de ele ser executado, é definida uma estrutura do tipo WNDCLASSA, que vai ser registrada com a RegisterClassA(). No teu código, a inicialização dessa estrutura começa em 40101D. Conforme a documentação, o segundo elemento dela é o seguinte: lpfnWndProc Type: WNDPROC A pointer to the window procedure. You must use the CallWindowProc function to call the window procedure. For more information, see WindowProc. "Window procedure" que dizer: a função que vai tratar os eventos da janela. No caso do teu programa, o valor deste elemento é colocado com esse MOV em 401027. Como o x64dbg já o reconhece como WndProc, você pode ddar um Ctrl+G e digitar "WndProc" pra cair nela. Recomendo fazer um trace over no mínimo a partir dela, mas ainda podem haver mais calls que vão fazer o trace parar. É que a abordagem de "traçar tudo" que você tá tentando fazer é muito custosa. Tracing é incrível mas na minha opinião é pra ser usado a partir de algum ponto. Não sei o que os demais pensam sobre, nem uso muito tracing também. Mas enfim, belo tópico! ? EDIT: Outra coisa que lembrei é que você pode usar Message Breakpoints como neste tutorial. Ao parar na USER32.DLL, ao invés de fazer o esquema de breakpoint on execution na .text, pode simplesmente ver a call stack (Ctrl+K) e ir no último endereço do módulo principal. Vai parar direto no código do clique do botão OK da janela "Register". Aí é só tracear de lá. ? Abraços! Link para o comentário Compartilhar em outros sites More sharing options...
unc4nny Postado Maio 16, 2020 em 15:28 Autor Compartilhar Postado Maio 16, 2020 em 15:28 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! 19 hours ago, Fernando Mercês said: ao invés de fazer o esquema de breakpoint on execution na .text 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!!! Link para o comentário Compartilhar em outros sites More sharing options...
unc4nny Postado Maio 16, 2020 em 15:55 Autor Compartilhar Postado Maio 16, 2020 em 15:55 @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! Link para o comentário Compartilhar em outros sites More sharing options...
Thiago de Queiroz Postado Maio 21, 2020 em 17:38 Compartilhar Postado Maio 21, 2020 em 17:38 Isso mesmo, o Mercês tem razão. Você precisa de fazer esse trace próximo da rotina onde quer verificar e não no loop do dialogo ? Parabe´ns por colocar em prática! Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Arquivado
Este tópico foi arquivado e está fechado para novas respostas.