2010-09-07 74 views
0

我想檢測一個給定的程序是否可以執行惡意操作,如分叉,進程間管道,輸入/輸出重定向,文件處理等。 其實我正在開發一個程序來檢查java代碼,並且不希望編碼器損害我的代碼檢查系統以任何方式。
我應該在代碼中查找哪些軟件包以確保這一點?
在此先感謝...!在java中包含操作系統級別命令的包是什麼?

回答

0

許多OS交互功能都在java.lang.Runtimejava.lang.System中提供。請注意,這些不需要導入,因爲它們位於java.lang包中。

但是,如果你只是分析代碼,你爲什麼會在乎它包含什麼調用?也許你應該看看Java Security而不是調用哪些類。

0

您應該考慮檢查標記爲「本機」的所有方法。

1

您的檢查是在編譯時還是在運行時?

  • 如果您在運行時檢查,可以使用具有權限的安全管理器。看看Security Manager Tutorial。有一個廣泛的權限列表。您可以禁止文件訪問,甚至打開框架。

  • 至於基礎類,你必須要小心java.lang.Runtimejava.lang.System,java.lang.ProcessBuilder。這些創建java.lang.Process。還有java.io.File,java.io.FileDescriptor,甚至可能是Sockets和java.nio.*在OS /文件系統上運行。

  • 我也不允許反射,java.lang.reflect.*java.lang.Class的一些方法也是反射性的。按名稱加載班級可能會解決您的檢查問題。 java.beans.*中的某些類也在使用反射。

  • 根據您的需要,您甚至可能希望用戶代碼在sandbox中運行。但是這對你來說可能太過分了。檢查類的使用情況(常量池)可能是一種簡單的方法。

  • 正如Colin HEBERT之前指出的那樣,native也是危險的。但其中一些肯定是需要的,如Object的方法。

+0

+1提及反思。你可以使用反射來調用你在其他類中提到的方法。還有其他一些類,例如'java.beans',它允許間接地相對自由地使用反射。 – 2010-09-07 17:09:18

0

簡短回答:java.lang。我相信這是唯一「開箱即用」的軟件包,其中包含可讓您訪問操作系統功能的類。那麼,我假設你沒有將I/O作爲「OS相關」的東西。如果你這樣做,那麼你還必須包含java.io,javax.swing和其他一些包。

較長的答案:程序員可以編寫自己的JNI函數,與操作系統進行交互並將其放入任何他喜歡的包中。試圖找出這可能是相當棘手。那麼,我想你可以說任何「本地」功能都是自動懷疑的。