請問我在公司的檔案 (公司電腦是 Win7),
用 google 雲端硬碟備份後,
在家裡要從雲端硬碟下載 (家裡電腦是 Win10),
結果出現圖片 1 中的錯誤訊息,
說有 4 個檔案遭到防毒軟體拒絕,
[下方為圖片 1]
然後查一下防毒紀錄,出現圖片 2 中的紀錄。
[下方為圖片 2]
請問:
謝謝
=======================================
補充
以下是出現錯誤訊息的檔案完整程式碼
=======================================
<?php
namespace system;
// 客戶端調用範例:
// \system\Message::setSuccess();
// \system\Message::setSuccess('自訂訊息');
// \system\Message::setSuccessToUrl('show.php');
// \system\Message::setSuccessToUrl('show.php', '自訂訊息');
// \system\Message::setSuccessToUrl('show.php?x=yyy&a=bbb', '自訂訊息');
// ---
// echo \system\Message::show();
class Message {
private static $successDefaultText = '操作成功';
private static $errorDefaultText = '操作錯誤';
private static $html = '';
// 如果有接收到 queryString,就動態調用 queryString 名稱的方法
public static function show() {
if (isset($_GET['messageMethod'])) {
self::$_GET['messageMethod']($_GET['text']);
}
if (self::$html !== '') {
return self::$html;
}
else {
return;
}
}
/* ==============================================================
設定訊息
============================================================== */
public static function setSuccess($text=null) {
if ($text === null) {$text = self::$successDefaultText;}
self::set('successMessage noPrint', $text);
}
public static function setError($text=null) {
if ($text === null) {$text = self::$errorDefaultText;}
self::set('errorMessage noPrint', $text);
}
private static function set($cssClass, $text) {
self::$html = "<div class='{$cssClass}'>{$text}</div>";
}
/* ==============================================================
跳轉頁面後,設定訊息
============================================================== */
public static function setSuccessToUrl($url, $text=null) {
if ($text === null) {$text = self::$successDefaultText;}
self::setToUrl($url, 'setSuccess', $text);
}
public static function setErrorToUrl($url, $text=null) {
if ($text === null) {$text = self::$errorDefaultText;}
self::setToUrl($url, 'setError', $text);
}
// 判斷客戶端輸入的 $url 是否有帶查詢字串 (因為 $url 有可能輸入 index.php?x=yyy&a=bbb)
// 來決定要用 ? 或 & 來連接後面的查詢字串
private static function setToUrl($url, $method, $text) {
$urlQueryIsExist = strpos($url, '?');
$mark = $urlQueryIsExist ? '&' : '?';
header("location: {$url}{$mark}messageMethod={$method}&text={$text}");
}
/* ==============================================================
顯示追蹤錯誤訊息
============================================================== */
public static function showExceptionIfLocalhost(\Exception $e) {
if (IS_LOCALHOST) {
zzzhr('拋出異常的文件:', $e->getFile());
zzzhr('拋出異常的位置:', $e->getLine());
zzzhr('異常訊息:', $e->getMessage());
zzzhr('追蹤:', $e->getTrace());
}
}
}
// 程式碼到此結束,不加入 PHP 結束標籤
我是中了這個 Backdoor:PHP/Remoteshell.G 的病毒嗎?
應該沒錯
這個病毒只有存在這 4 個都叫做 Message.php 的檔案嗎?還是其他檔案其實也中毒了?
你可以找個安全的電腦(斷網
或者直接用文字編輯器打開
用文字編輯器打開
應該不至於會執行 php code
看你那些 php code 是不是有被竄改
理論上有這種情況
你應該要檢查所有在專案裡的 file
我該怎麼做,才能讓我的電腦恢復無病毒狀態呢?
他應該只是在你的專案掛後門
然後你在 run 這網站時
他可以透過這 php file
在你的 server 搞事
不過還是建議執行完整掃描
年輕時不懂事,把phpmyadmin放在公網,然後就被植入shell...
災難的開始XD![]()
原來是這樣.
謝謝 dragonH 大大:
我想今天試試看:
我在公司把這 4 個資料夾內的錯誤訊息檔案刪掉後,
再把資料夾重新備份到雲端硬碟,
然後今天回家下載看看會不會再出現錯誤訊息。
其實我也蠻訝異 win10 內建的防毒
竟然可以掃 php script
我一直以為這類的 script
在防毒面前只是普通的文字
不過我也沒有讓我的防毒遇過這種 script 就是
難怪 windows defender 排名可以超過幾個常見的防毒
不過 Backdoor:PHP/Remoteshell.G
的資訊有點少
也不能排除有誤判的可能就是
把檔案用日期排序很快就知道哪些檔案有問題了
我做了幾次測試:
我刪除資料夾內有錯誤訊息的檔案Message.php後,
再上傳資料夾,就沒有出現錯誤了,
我猜想這表示病毒可能是在Message.php內,
為了再確認一次,
我單獨只上傳Message.php這個檔案,
沒有上傳資料夾,
結果就又出現錯誤訊息,
所以我認為病毒非常可能是在Message.php內,
與資料夾內的其他檔案無關。
我重新開一個完全空白的檔案,完全沒有程式碼,
取名為Message.php後上傳,
就沒有錯誤訊息了,
我認為病毒一定是在Message.php內。
我把原本的程式碼貼到這新的空白Message.php後上傳,
就又出現錯誤訊息,
難道這表示是我的程式碼有問題嗎?
可是之前上傳都沒事,
怎麼可能突然我得程式碼就變成病毒了。
請問我接下來要怎麼做呢?
呃
如果不方便貼 code
那就只能試著看懂它
如果是想知道哪一段有問題
就一段一段試吧
謝謝 dragonH 大大:
我有把出現錯誤訊息的檔案完整程式碼貼在上面,
都沒有被竄改的地方,
而且這個檔案幾個月都沒有動過了,
幾個月上傳下載都沒問題,
但前幾天上傳卻突然出現錯誤。
跟 dragonH 大大報告一下這幾天測試的結果,
我先把檔案內的函數一次刪除一個後建立新檔案上傳,
發現會出現錯誤的是 show() 這個函數內的這段程式碼:
if (isset($_GET['messageMethod'])) {
self::$_GET['messageMethod']($_GET['text']);
}
我今天早上把它改成下面這樣,
然後到您給我的 VirusTotal 網站內測試,
結果是沒問題囉,
終於解決了,很開心,
謝謝 dragonH 大大。
if (isset($_GET['messageMethod'])) {
$messageMethod = $_GET['messageMethod'];
$text = $_GET['text'];
self::$messageMethod($text);
}
後來又好奇測試了一下,
改成下面這樣,會出現如圖中的錯誤訊息:
if (isset($_GET['messageMethod'])) {
echo 'aaa';
}

但下面這樣將字串改成雙引號就又正常了,
還蠻奇怪的,
會不會是 windows defender 有點問題?
if (isset($_GET['messageMethod'])) {
echo "aaa";
}
如果那是公司專案,
而且裡面確實沒有問題,
那應該是防毒軟體的問題,
防毒軟體總是會刪了很多我們要的檔案...
有一種病毒他的特性是附加在檔案的最後方隱藏區域(名稱忘了,好像磁區是NTFS格式特有?)
這種病毒會透過這個特性隱藏自身的存在,特性是檔案大小會變大(也許只是放置要執行的病毒位置而增加的大小不多)
這類病毒通常會感染執行檔、批次檔,在執行的時候就會一並觸發病毒~
不過php....對網頁伺服器而言算是批次檔還是執行檔??
可以看每個檔案的擁有者有無異常,或著看網頁服務的log(像iis 或apache)