Pergunta

Eu tenho um aplicativo MFC que me foi dada (sem código fonte), que abre uma janela com um botão de 'Update', que, em seguida, executa um tempo muito longo atualização após ser clicado.

Eu gostaria de modificar o programa para que, quando a janela é criada (ou em outro lugar, como DoModal), uma mensagem é enviada para o programa para torná-lo pensar que o botão foi pressionado.

Eu tenho brincado ao redor com isso por um tempo em Ida Pro e OllyDbg sem sucesso. Olhei para possivelmente usando PumpMessage, mas isso não trouxe qualquer sucesso.

Qualquer conselho?

Foi útil?

Solução

Se você não gosta da idéia de usar um programa secundário "macro", você poderia corrigir binário do programa original para chamar manipulador BM_CLICK do botão. Se você puder encontrar algum espaço para a chamada (mínimo 5 bytes sem argumentos), você pode fazer isso com OllyDbg sozinho (após a edição do código, selecione-a e selecione "Copiar para o executável" -> "Seleção" do botão direito do mouse cardápio). Caso contrário, você precisa criar uma nova seção de código com um editor de PE (por exemplo LordPE ou PE Tools) e adicionar seu código lá (normalmente você vai querer mudar uma chamada no programa para um salto para sua seção, onde você realizar a chamada original mais a chamada para manipulador de clique do botão, e depois saltar de volta para a antiga posição após seu salto remendado).

Outras dicas

Existem algumas maneiras de fazer isso usando técnicas de automação de teste, mas a mais simples é simplesmente obter o identificador janela para o botão que você quer e enviá-lo a mensagem BM_CLICK . Isso pressupõe que você tenha um conhecimento de trabalho de C / C ++ no Windows. Se não, existem outros meios que utilizam .NET ou outras tecnologias. Eu não estou familiarizado com ida-pro ou OllyDbg.

Veja este perl módulo win32 :: guitest que poderia ajudá-lo a fazer this.you pode escrever com ele um script Perl e incorporá-lo em seu programa. ou você pode usar o Win32 API que envolva suas necessidades exigidas e usá-lo.

Apenas criar um segundo programa que vai almoço-lo e irá enviar um clique do mouse usando SendInput (...)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top