TL;DR : Eu sei que um programa cria e exclui arquivos em /tmp
. Como posso interceptá-los para exame?
Contexto :
Há um .jar
arquivo específico, no qual não confio; por algum motivo, seu código-fonte contém um método ftm e tem capacidade para fazer conexões, o que é evidente em syscalls relacionadas à rede na saída de strace
(e quando quero dizer conexão, não quero dizer soquetes de domínio unix, é AF_INET6
). Eu examinei com o Wireshark e não vi conexões TCP ou UDP de saída durante o uso.
No entanto, ainda não confio muito nele. A partir da saída de strace
eu vi que está criando arquivos temporários /tmp
e depois os exclui. Existe uma maneira de interceptar esses arquivos para examinar seu conteúdo?
Melhor ainda, se você quiser fazer engenharia reversa de um binário Java nefasto, em vez de tentar interceptar arquivos, descompile o
.jar
arquivo suspeito.Para isso, você pode usar o CFR - outro descompilador java
Não faltam alternativas, porém o projeto CFR parece estar bem conservado, tendo uma atualização de 2018.
Isenção de responsabilidade: eu não fiz engenharia reversa para binários Java/JAR desde 2005
Nota : solução aprimorada postada na pergunta duplicada
Da leitura Como acessar o arquivo temporário logo após a criação? Eu tive a ideia de usar
inotify
e criar um link físico para o próprio arquivo. Obviamente, isso é uma condição de corrida, pois o arquivo pode ser desvinculado antes que o link físico seja criado, no entanto, consegui recuperar os dados no arquivo temporário que o aplicativo está criando. Aqui está um pequeno pipeline reunido na guia do terminal A, com a guia do terminal B executando o comando real:As 3 desvantagens são:
awk
muito rapidamente para um arquivo específico; mas um comando mais geral e flexívelawk
que analisainotifywatch
a saída e une nomes de caminho$1
com nomes de arquivos$3
teria que levar um pouco de tempo para analisar as linhas,sprintf()
tudo para variável e passar parasystem()
, o que pode voltar ao ponto de marcador anterior - no momento da análise é feito, não há nenhum arquivo para vincular.inotify
módulos Python (o que talvez seja algo que farei no futuro).Quanto ao arquivo em questão, ele aparece como alguma forma de dados binários, com recorrentes
0...sun.rt._sync_Inflations
e0...sun.rt._sync_Deflations
strings (que podem estar relacionadas ao Java multithreading ). Mas para o propósito desta pergunta, é irrelevante - já temos. A única coisa que eu queria era obter o próprio arquivo.