Estou tentando fazer um ofuscador
Pergunta
Esta é uma questão de duas partes. Mas ambos se relacionam com a mesma coisa.
Quero trabalhar com o código IL de um aplicativo para aplicar patches. Estou me perguntando qual seria a abordagem certa. Obviamente, eu poderia descompilar e ler e editar o arquivo de código IL e depois recompilar. Mas existe alguma maneira de lê -lo como código MSIL diretamente no arquivo. E talvez edite -o em tempo real.
Eu estava tentando editar o código decompilado de um executável. Mas cada vez que eu o recompia, eu tinha um problema com a execução. Como se não pudesse mais encontrar seu ponto de entrada. Como faço para calcular isso? Estou supondo que preciso saber o comprimento dos comandos e seus parâmetros, ou para tornar o ponto de entrada um rótulo ou algo assim. Eu seria bom se houvesse um modelo de Visual Studio para algo assim.
Solução
Como alguém que já leu o ECMA-335 especificação várias vezes e Implementou um carregador de imagem da CLI em dois idiomas diferentes (com uma análise completa da IL em um), eu diria que essa ainda seria uma tarefa desafiadora para mim. Eu digo isso porque parece que ambos 1) você não fez isso e 2) está procurando uma resposta fácil. A especificação deve definitivamente ser o seu ponto de partida.
o mínimo procedimento seria:
- Carregue a imagem PE (exe ou DLL)
- Analisar o código de byte de todos os métodos e resolver símbolos
- Aplicar transformações de código (mínimo do curso seria uma única transformação, como renomear métodos privados)
- Salve o resultado como uma nova imagem de PE
EDIT: Isso não impedirá que você precise aprender sobre a estrutura detalhada dos conjuntos .NET, mas pode economizar algum tempo na implementação real e ajudar a manter sua lógica ofuscadora separada de forma limpa do carregador.
- Mono Cecil é uma biblioteca escrita por JB Evain Para gerar e inspecionar programas e bibliotecas no formato CIL da ECMA.
- Infraestrutura comum do compilador
- Cecil e o CCI Postagem do blog por JB Evain
Outras dicas
Para ler o MSIL, com certeza há, em este tópico:
ildasm.exe - Desmontador de linguagem intermediária. Você pode visualizar seu código compilado no nível MSIL com esta ferramenta.
Isso é encontrado no Microsoft SDK.