Как перехватить временные файлы, созданные программой? [дубликат]

Я смог подтвердить (благодаря irc-каналу #toybox), что проблема действительно была ошибкой в toybox sed, которая должна была быть решена, но Android M по-прежнему поставляется с устаревшей версией toybox. Вот ссылки на список рассылки toybox (который, увы, я пропустил), где обсуждались эти проблемы:

http://lists.landley.net/pipermail/toybox-landley.net/2016-January/007897.html

http://lists.landley.net/pipermail/toybox-landley.net/2015-September/004415.html

Жаль, но мне придется ждать актуальную версию toybox с будущим обновлением Android.

3
10.09.2018, 23:45
2 ответа

Еще лучше, если вы хотите реконструировать опасный двоичный файл Java, а не пытаться перехватывать файлы, декомпилируйте подозрительный .jarфайл.

Для этого можно использовать CFR -другой декомпилятор Java

CFR will decompile modern Java features - up to and including much of Java 9, but is written entirely in Java 6, so will work anywhere

To use, simply run the specific version jar, with the class name(s) you want to decompile (either as a path to a class file, or as a fully qualified classname on your classpath). (--help to list arguments).

Alternately, to decompile an entire jar, simply provide the jar path, and if you want to emit files (which you probably do!) add --outputdir /tmp/putithere

В альтернативах нет недостатка, однако проект CFR, похоже, поддерживается в хорошем состоянии, имея обновление 2018 года.

Заявление об ограничении ответственности :Я не выполнял обратное проектирование двоичных файлов Java/JAR с 2005 г.

6
27.01.2020, 21:12

Примечание:улучшенное решение опубликовано в дублирующем вопросе

Из прочитанного Как получить доступ к временному файлу сразу после его создания? Мне пришла в голову идея использовать inotifyи создать жесткую -ссылку на сам файл. Это, конечно, состояние гонки, так как файл может быть отключен до создания жесткой ссылки, однако мне удалось восстановить данные во временном файле, который создает приложение. Вот короткий конвейер, собранный на вкладке терминала A, с вкладкой терминала B, выполняющей реальную команду:

inotifywait -m -r /tmp/hsperfdata_xie/ 2>&1 | 
while IFS= read -r line; do 

    awk '$2 == "CREATE"{system("ln /tmp/hsperfdata_xie/"$3" /tmp/BACKUP")}' <<< "$line"
    echo "$line" # unnecessary, only if you want to know what's inotify is writing
done

3 недостатка::

  • состояние гонки (объяснено выше)
  • Я очень быстро собрал awkдля одного конкретного файла; но более общая и гибкая awkкоманда, которая анализирует inotifywatchвывод и объединяет пути $1с именами файлов в $3, потребовала бы немного времени, чтобы проанализировать строки, sprintf()все в переменную и передать к system(), который может вернуться к предыдущему пункту маркера -к моменту завершения синтаксического анализа, нет файла для ссылки.
  • Для
  • требуются две вкладки терминала, хотя можно перевести весь конвейер в фоновый режим. Разумнее было бы иметь полный сценарий Python с разветвленными подпроцессами и фактически использовать inotifyмодули Python (, что, возможно, я и сделаю в будущем ).

Что касается рассматриваемого файла, то он выглядит как некоторая форма двоичных данных с повторяющимися 0...sun.rt._sync_Inflationsи 0...sun.rt._sync_Deflationsстроками (, которые могут быть связаны с многопоточностью Java). Но для целей этого вопроса это не имеет значения, -что мы уже имеем. Единственное, что я хотел, это получить сам файл.

1
27.01.2020, 21:12

Теги

Похожие вопросы