Java喚醒本地應用的兩種方法詳解

引言

作為一個後端同學,經常被安全的小夥伴盯上,找一找安全漏洞;除瞭常說的註入之外,還有比較嚇人的執行遠程命令,喚醒本地應用程序等;然後有意思的問題就來瞭,寫瞭這麼多年的代碼,好像還真沒有嘗試過用java來喚醒本地應用程序的

比如說一個最簡單的,打開本地的計算器,應該怎麼搞?

接下來本文將介紹一下如何使用java打開本地應用,以及打開mac系統中特殊一點的處理方式(直白來說就是不同操作系統,使用姿勢不一樣)

1. Runtime使用方式

主要是基於Runtime.getRuntime().exec()來執行shell命令,來打開應用

比如打開計算器

// win系統
Runtime.getRuntime().exec("exec");
// mac系統
Runtime.getRuntime().exec("open -n /Applications/Calculator.app")

從上面的傳參也可以看出兩者的區別,為什麼mac會整一個 open -n, 這個其實可以理解為在終端執行命令,打開計算器

註意事項

對於mac系統而言,除瞭上面這種打開方式之外,還有下面這種姿勢

Runtime.getRuntime().exec("/Applications/Calculator.app/Contents/MacOS/Calculator")

在exec中指定計算器的路徑,有個很容易采的坑,直接寫成下面這種

Runtime.getRuntime().exec("/Applications/Calculator.app")

上面這個直接執行之後會提示權限錯誤,其主要原因是mac系統的應用和win中的exe作為啟動方式不太一樣,對於mac而言,可以理解xxx.app為一個目錄,真正執行文件是內部的xxx/Contents/MacOS/xxx

2. ProcessBuilder使用方式

除瞭Runtime喚起之外,使用ProcessBuilder也屬於非常常見的case

// win
new ProcessBuilder("exec").start()
// mac 註意,使用下面這個,則傳參不能是 open -n xxx
new ProcessBuilder("/Applications/Calculator.app/Contents/MacOS/Calculator").start()

使用上面這種姿勢,特別需要註意的是內部傳參不能是open -n

3. 小結

從上面介紹的方式來看,其實打開應用程序的思路主要就是利用java來執行腳本命令;內容比較簡單,隱患卻是比較大的;在自己的項目中,最好不要出現這種調用方式

以上就是Java喚醒本地應用的兩種方法詳解的詳細內容,更多關於Java喚醒本地應用的資料請關註WalkonNet其它相關文章!

推薦閱讀: