Dividindo o assembly para conquistar

2024-08-23 computer blog

"Cada problema que eu resolvo se torna uma regra que serve mais tarde para resolver outros problemas." Rene Descartes.

Hoje usei uma técnica que é bem intuitiva durante o debugging, mas que pode servir para outros cenários de engenharia reversa.

Cansado de tentar entender onde estava a chamada de uma função que fazia um certo app ser ativado por um link peguei o executável responsável para depurar seu assembly.

O programa tem o funcionamento bem simples: ele recebe um argumento de alguma forma ativa uma instância do aplicativo principal em execução para abrir o link passado como parâmetro.

Para encontrar a chamada da Windows API que faz a coisa acontecer eu poderia passar horas depurando passo a passo até entender a lógica por trás do assembly. No entanto, e aí que está o pulo do gato, eu posso também executar dezenas de vezes e ir “cercando” o ponto onde o app faz a ativação.

Para isso basta ir depurando cada execução até ocorrer a ativação. Quando descobrir que após uma chamada o app é ativado basta salvar este ponto e executar novamente o mesmo comando com este novo ponto em breakpoint. Repita até chegar em uma função API ou alguma thread ou algum comando para uma worker thread (algo muito comum hoje em Windows Apps).

Dependendo da forma com que é implementado isso pode levar de alguns minutos a talvez uma hora ou duas. Mas com certeza será mais rápido que ir todo o código passo a passo.

[comment] [Programming]