长话短说:我知道一个程序创建然后删除/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 脚本,并实际使用
inotify
Python 模块(这可能是我将来会做的事情)。
至于有问题的文件,它显示为某种形式的二进制数据,具有重复出现 0...sun.rt._sync_Inflations
和0...sun.rt._sync_Deflations
字符串(可能与Java多线程)。但就这个问题而言,这是无关紧要的——我们已经有了。我唯一想要的就是获取文件本身。