如何拦截程序创建的临时文件?

如何拦截程序创建的临时文件?

长话短说:我知道一个程序创建然后删除/tmp.我怎样才能拦截它们进行检查?

语境:

有一个.jar我不信任的特定文件;由于某种原因,它的源代码包含一个 ftm 方法并且具有建立连接的能力,这从输出中与网络相关的系统调用中可以明显看出strace(当我指的是连接时,我不是指 unix 域套接字,而是AF_INET6)。我用 Wireshark 进行了检查,发现在使用过程中没有传出 TCP 或 UDP 连接。

不过,我还是不太相信它。从输出中strace我看到它正在创建临时文件/tmp然后删除它们。有没有办法拦截这些文件以检查其内容?

答案1

更好的是,如果您想对恶意的 Java 二进制文件进行逆向工程,而不是尝试拦截文件,请反编译可疑.jar文件。

为此,您可以使用CFR - 另一个java反编译器

CFR 将反编译现代 Java 功能 - 直至并包括 Java 9 的大部分功能,但完全是用 Java 6 编写的,因此可以在任何地方使用

要使用,只需运行特定版本的 jar 以及要反编译的类名(作为类文件的路径,或作为类路径上的完全限定类名)。 (--帮助列出参数)。

或者,要反编译整个 jar,只需提供 jar 路径,如果您想发出文件(您可能会这样做!)添加 --outputdir /tmp/putithere

不乏替代方案,但 CFR 项目似乎维护得很好,有 2018 年的更新。

免责声明:自 2005 年以来我没有对 Java/JAR 二进制文件进行逆向工程

答案2

笔记改进的解决方案张贴在重复的问题

来自阅读创建后如何直接访问临时文件?我想到了使用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 脚本,并实际使用inotifyPython 模块(这可能是我将来会做的事情)。

至于有问题的文件,它显示为某种形式的二进制数据,具有重复出现 0...sun.rt._sync_Inflations0...sun.rt._sync_Deflations字符串(可能与Java多线程)。但就这个问题而言,这是无关紧要的——我们已经有了。我唯一想要的就是获取文件本身。

相关内容