Vejo essa instrução no início de vários programas do Windows. Ela está copiando um registro para si mesmo, então basicamente, isso funciona como um nop
. Qual é o propósito desta instrução?
Vejo essa instrução no início de vários programas do Windows. Ela está copiando um registro para si mesmo, então basicamente, isso funciona como um nop
. Qual é o propósito desta instrução?
Raymond Chen (Microsoft) tem uma postagem no blog discutindo isso em detalhes:
https://devblogs.microsoft.com/oldnewthing/20110921-00/?p=9583> / p>
A intenção é pular para um local específico , 5 bytes antes da instrução mov. A partir daí, você tem 5 bytes que devem ser modificados para um salto longo para algum outro lugar no espaço de memória de 32 bits. Observe que durante o hot-patching, esse salto de 5 bytes deve ser colocado primeiro e, em seguida, o mov pode ser substituído. Indo no sentido contrário, você corre o risco de o mov-jmp substituído rodar primeiro e pular para os 5 bytes de qualquer coisa que esteja lá (é tudo nops por padrão, mas você nunca sabe).
[adição a seguir ]
Em relação a escrever o salto de 5 bytes - há também o problema de haver apenas uma instrução que permitirá que você escreva mais de 4 bytes atomicamente - cmpxchg8b, e essa não é uma instrução ideal para o propósito. Se você escrever 0xe9 primeiro e depois um dword, terá uma condição de corrida se 0xe9 for executado antes de colocar o dword. Mais uma razão para escrever primeiro o salto em distância.
courtsey Hotpatching and the Rise ofThird-Party Patches no BlackHat USA 2006 por Alexander Sotirov
O que é Hotpatching? Hotpatching é um método para modificar o comportamento de um aplicativo, modificando seu código binário em tempo de execução. É uma técnica comum com muitos usos:
• depuração (pontos de interrupção de software)
• instrumentação em tempo de execução
• enganchando funções da API do Windows
• modificar a execução ou adicionar nova funcionalidade a aplicativos de código-fonte bloqueado
• implementar atualizações de software sem reinicializar
• corrigir vulnerabilidades de segurança
Hotpatches são gerados por uma ferramenta automatizada que compara os binários originais e os corrigidos. As funções que foram alteradas são incluídas em um arquivo com extensão .hp.dll. Quando a DLL de hotpatch é carregada em um processo em execução, a primeira instrução da função vulnerável é substituída por um salto para o hotpatch.
O A opção do compilador / hotpatch garante que a primeira instrução de cada função seja uma instrução mov edi, edi que pode ser sobrescrita com segurança pelo hotpatch. Versões mais antigas do Windows não são compiladas com esta opção e não podem ser hotpatched.