unc4nny 9 Posted May 15, 2020 Share Posted May 15, 2020 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? 1 Quote Link to post Share on other sites
Administradores Fernando Mercês 0 Posted May 15, 2020 Administradores Share Posted May 15, 2020 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! Quote Link to post Share on other sites
unc4nny 9 Posted May 16, 2020 Author Share Posted May 16, 2020 (edited) 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!!! Edited May 16, 2020 by unc4nny Quote Link to post Share on other sites
unc4nny 9 Posted May 16, 2020 Author Share Posted May 16, 2020 @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! 1 Quote Link to post Share on other sites
Thiago de Queiroz 8 Posted May 21, 2020 Share Posted May 21, 2020 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! 1 Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.