
Quero interceptar uma execução de executável arbitrário. Suponha que exista um binário /usr/bin/binary
. Sempre que alguém inicia esse binário, quero iniciar meu próprio executável. A partir daí eu quero decidir se o binário original deve ser iniciado ou não. Por fim, quero inserir meu calço entre o binário original e o usuário.
Pergunta semelhante do Windows foi feita:Quero interceptar um determinado programa antes de ele ser executado e executar meu próprio programa primeiro
Tenho direitos de administrador no sistema. Não consigo realocar os binários originais para outros lugares.
Atualizaçãoconforme perguntado por @dirkt:
- haverá uma lista codificada de binários que gostaria de interceptar.
Responder1
ISENÇÃO DE RESPONSABILIDADE: sou totalmente ignorante no mundo MacOS, mas gostaria de lhe dar uma maneira de fazer isso no GNU/Linux... pode ser que ajude.
Hmmm... eu teria respondido exatamente como @dirkt (também conhecido como wrapper chamado binary
que apontaria para binary.real
), mas:
- Se o usuário estiver ciente do seu mecanismo, ele poderá iniciar
binary.real
diretamente. - Você deve duplicar esse mecanismo para cada programa que deseja "monitorar".
Então, vamos cavar um pouco em outro lugar...
O módulo do kernel
No mundo GNU/Linux, eu teria escrito um módulo do kernel para conectar a chamada do sistema exec e implementar a ACL como você deseja... mas isso é um pouco exagerado. Parece que é possível desenvolver módulos de kernel para Mac OS... Mas não sei se a Apple permite esse tipo de hack.
O hack LD_PRELOAD
Usando o mecanismo bem conhecido LD_PRELOAD
(que parece serDYLD_INSERT_LIBRARIES
no seu mundo), você pode reescrever qualquer função C de qualquer biblioteca do seu sistema. Então você simplesmente precisa:
- Escreva uma biblioteca dinâmica que implemente exec*().
- Implemente sua ACL.
- Certifique-se de que todas as sessões de usuário (gráficas, terminal) sejam iniciadas com sua biblioteca pré-carregada graças ao
DYLD_INSERT_LIBRARIES
)
Et voilá!