2009年12月4日 星期五
徹底清除登錄檔中的駭客程式
2009年11月8日 星期日
C語言筆記 - 指標變數
2009年6月24日 星期三
gcc 簡介
GCC簡介
在Unix系統環境下最廣為使用的C語言的編譯器即gcc(GNU C Compiler)。是一個由GNU社群推出編譯器,能編譯器C、C++語言的程式,gcc是可以在多種硬體平臺上編譯出可執行程式,功能優越而穩定。在此介紹gcc最常用的參數。
gcc [-c|-S|-E] [-Olevel] [-Wwarn...] [-o outfile] infile.
Infile: 是最重要也是唯一必備的參數,告訴gcc原始程式檔的檔名和路徑。
-o: (小寫) 指定輸出的執行檔檔名。
-O: (大寫) 編譯過程執行最佳化的動作,增加輸出執行檔的執行速度。gcc允許level 0 到 level 3的最佳化程度,level 0就是完全沒有。通常使用到level 2即可。
-W: (大寫) 編譯過程中顯示出warning訊息,’W’後面接描述詞,描述warning訊息的種類。建議使用”all”描述詞,顯示所有的warning訊息。
-I 設定搜尋標頭檔目錄。
-L 搜尋函式庫目錄
-lname: 聯結函式庫,函式庫檔案libname.a。
-g: 在編譯可執行檔時,附加執行時除錯資訊。(以供 gdb 讀取)
-E: 將Source code中的巨集展開,之後輸出到 stdout。
-c: 僅編譯成 object 檔而不進行程式庫聯結。
-S: 產生對應的組合語言程式碼檔 (*.s)。
副檔名規則
Gcc編譯器能將C、C++語言根源程式、匯程式化序和目的程式編譯、連接成可執行檔,如果沒有給出可執行檔的名字,gcc將生成一個名為 a.out的文件。在Linux系統中,可執行檔沒有統一的尾碼,系統從檔的屬性來區分可執行檔和不可執行檔。而gcc則通過尾碼來區別輸入檔的類別,下 面我們來介紹gcc所遵循的部分約定規則。
.c:C語言源始碼檔;
.a:是由目標檔構成的函式庫檔;
.cc:是C++源始碼檔;
.h:是程式所包含的標頭檔;
.i :是已經預處理過的C源始碼檔;
.ii:是已經預處理過的C++源始碼檔;
.m為尾碼的文件,是Objective-C源始碼文件;
.o:是編譯後的目標檔;
.s為尾碼的文件,是組合語言源始碼文件;
.S:是經過預編譯的組合語言源始碼檔。
常用範例
範例:將 test.c 編譯成可執行檔 test 並在編譯過程中做最佳化。
#gcc -O test.c -o test
範例: 將 test1.c 和 test2.c 編譯聯結成可執行檔 test 並在編譯過程中做最佳化。
#gcc -O test1.c test2.c -o test
範例:若程式中有使用數學函數如 sin 等,編譯時須加入 -lm 。
#gcc -O test.c -o test -lm
範例:發現程式有執行時錯誤,編譯後需用 GDB 除錯。
#gcc -O -g test.c -o test
#gcc -O -g test.c -o test
[註: 來源處為 http://140.92.88.48/tlog/linux/entry/gcc%E7%B0%A1%E4%BB%8B]
2009年6月23日 星期二
讓 Spamassassin 學習辨別垃圾郵件
Spamassassin 的 Spam 分數可以由“學習”的方式來調整, 最好的方式是分別建立 blacklist (黑名單, 垃圾郵件) 和 whitelist (白名單, 非垃圾郵件) 的信箱:
複製內容到剪貼板
代碼:
#useradd -M blacklist
#useradd -M whitelist
以後如果收到垃圾信的話, 就把信 "以附加檔案方式轉寄" 給自己 Server 上的 blacklist 信箱; 如果是被 Spamassassin 誤判為垃圾信的郵件, 就把它轉寄給 whitelist. 也就是說, 讓這兩個信箱收集可以給 Spamassassin 學習的範本. 學習的指令如下:
學習黑名單:
複製內容到剪貼板
代碼:
#sa-learn -D --showdots --spam --mbox /var/mail/blacklist
學習白名單:
複製內容到剪貼板
代碼:
#sa-learn -D --showdots --ham --mbox /var/mail/whitelist
學習完成後, 即可將 blacklist 與 whitelist 信箱清空:
複製內容到剪貼板
代碼:
#true > /var/mail/blacklist; true > /var/mail/whitelist
讓系統每小時自動學習黑/白名單: 於 /etc/cron.hourly 建立一個可執行的 shell 檔, 內容為:
複製內容到剪貼板
代碼:
#!/bin/sh
if [ -s /var/spool/mail/blacklist ]; then
sa-learn --spam --mbox /var/spool/mail/blacklist > /dev/null 2>&1
true > /var/spool/mail/blacklist
fi
if [ -s /var/spool/mail/whitelist ]; then
sa-learn --ham --mbox /var/spool/mail/whitelist > /dev/null 2>&1
true > /var/spool/mail/whitelist
fi
一個老舊的記憶~Dos開機片製作
簡單說 Dos 的開機程序時
io.sys -> msdos.sys -> config.sys -> command.com -> autoexec.bat
其中我們只要注意 config.sys 和 autoexec.bat
config.sys 主要是設定 Dos 的一些設定 和 載入一些程式
config.sys 所載入的程式和 autoexec.bat 中的不太一樣
這類的程式都是要在 command.com 之前載入完成
所以要在 config.sys 先載入
例如 記憶體的管理程序(himem.sys) 或 光碟機驅動程式
下面所說明 config.sys 部份
先看個圖例
[MENU] 是指 Dos 的開機的選單,其中
MENUITEM 是各選單的項目
MENUITEM = 項目名稱, 項目所顯示的文字
MENUDEFAULT 是預設選擇的項目
MENUDEFAULT = 項目名稱, 秒數
秒數可以省略, 就不會倒數計時 ( MENUDEFAULT = 項目名稱 )
MENUCOLOR 是選單的顏色
MENUCOLOR = 文字顏色, 背景顏色
全部 16色, 其數值是 0 - 15
在 [MENU] 中只可使用選單的設定不可以使用系統的設定
[COMMON] 共用設定, 不管選擇了那個項目都會載入這個部份的設定
[項目名稱] 各別項目的設定, 選則該項目時只會載入該部份的設定
而系統設定的部份
DOS=HIGH,UMB 是 DOS 記憶體相關的設定, 可省略, 在此不詳說
LASTDRIVE 是指最後一個磁碟編號, 習慣上就是 Z 啦
可以省略...只不過省略時的預設值為何我就不清楚了
DEVICE , DEVICEHIGH 載入裝置的程式, 例如載入光碟的驅動程式
DEVICE = MS-CDD.SYS /D:CD001
DEVICEHIGH = MS-CDD.SYS /D:CD001
DEVICEHIGH = HIMEM.SYS
DEVICEHIGH = EMM386.EXE RAM
是載入記憶體管理的程序
在 DOS 核心中...只能使用 1M 的記憶體
而其中的 640K 即所謂的傳統記憶體, 其餘 384k 則是其它用途
例如有 16M 的記憶體在 DOS 中也只會用到 1M
而其中程式所能用的也只有 640 K
因此必須要載入 HIMEM.SYS 才能讓程式配置使用其它的記憶體
不過由於又不是要用 DOS 玩遊戲...所以此部份也不用詳細說明
如果只需要傳統記憶體即可...這2行也可以省略
DEVICE 和 DEVICEHIGH 差異
當我們有設 DOS = HIGH,UMB 時
可以用 DEVICEHIGH 將載入的程序放到 UMB (就是那1M中的384K部份)
來節省傳統記憶體, 不過 UMB 不夠時...一樣還是使用傳統記憶體
所以不可考記憶體的分配(以要不會影響到程式的執行), 我們也可以省略成
如果不需要多選擇的選單, 也可以只設定所要的部份
在 config.sys 部份中, 主要只要注意 光碟機Driver 的載入
DEVICE = MS-CDD.SYS /D:CD001
DEVICE = 光碟Driver的檔案 /D:給予Drvier一個名稱
例如
DEVICE = A:\Driver\VIDE-CDD.SYS /D:MSCD001
MSCD001 只是一般常久以來的而成的不成文習慣而以
名稱是可以自己取不過一定要記得, 因為在 autoexec.bat 中給予光碟機編號時會用的到
接下來是 autoexec.bat 的部份, 圖例
這比較沒什麼好說的
總之就是照順序執行而以
比較要注意的是有使用 開機選單 和 光碟Driver 時的情況
之中可以看到 GOTO %CONFIG%
如果有使用開機選單...就會有 CONFIG 這個環境變數
在 autoexec.bat 我們可以用 GOTO %CONFIG%
來跳到 :選單項目名稱 的地方來執行
例如我們開機時選擇了 MS-CDD
GOTO %CONFIG% 就會跳到 :MS-CDD 的地方然後繼續執行
所以後面的
LH MSCDEX.EXE /D:CD001 /M:32
LH MOUSE
LH DOSKEY
PATH A:\;
都會執行到
如果我們開機時選 NOCD 則就直接跳到 :NOCD
LH MSCDEX.EXE /D:CD001 /M:32 就不會執行到了
當 config.sys 載入光碟Driver 後
我們習慣上在 autoexec.bat 中自動執行 MSCDEX.EXE 給予其磁碟編號, 如此才可以使用光碟
LH 和 config.sys 中的 DEVICEHIGH 是同樣的做用, 將程式配置到 UMB
因為不知道 UMB 夠不夠所以習慣上也都是加上 LH
使用 MSCDEX.EXE 給予光碟機編號時
MSCDEX.EXE /D:CD001 /M:32
/D:CD001 這裡就和 config.sys 設定的部份是要一樣
如果 config.sys 中是用 /D:MSCD001, 這裡也是改成 /D:MSCD001
MSCDEX.EXE /D:MSCD001 /M:32
/M:32 是設定緩衝區的大小...可以省略
/L:X 設定光碟機磁碟編號, 可省略, 省略時程式會自動的分配, 例如
MSCDEX.EXE /D:MSCD001 /L:G
這樣光碟機就是 G: (當有2台以上的光碟機時, "好像"是依序從 G: 開始分配)
如果我們只是單純開機後能使用光碟機
config.sys 和 autoexec.bat 可以簡單一點
而 Ghost 部份這裡還是省下來不說了(因為好像打太長了)
而且網路上也很容易找到資料 (主要是會不會用 Ghost 的指令而以)
關於 ghost 部份可以參考
http://myweb.hinet.net/home4/hugolee/mio/364.htm
http://myweb.hinet.net/home4/hugolee/mio/365.htm
例如 我們將 ghost.exe 和 .gho備份檔 燒在光碟中
而 config.sys 和 autoexec.bat 我們可以如下
光碟給予編號 X:
因為 ghost.exe 是在光碟中
所以先跳到光碟 X: 中, 再執行 ghost 指令
如果 ghost.exe 是放在軟碟中, 而不是放在光碟中, 就不用跳到 X:
MSCDEX.EXE /D:IDECD001 /L:X
ghost -clone,mode=pload,src=X:\backup.gho:1,dst=1:1 -rb
即可
到此全部 3篇的教學算一個結束
如果你都學會了...可以自己做一個自己專用的開機光碟
會活用的話, 也可以利用開機選單來製作選擇 Ghost 自動還原或備份 的程序
PS:
2006/8/22 補充修正
如果前面都有看懂
應該會發現...文中有個小錯誤
在最後 ghost 的部份...貼圖中的 config.cfg 和 autoexec.bat 有錯(我在打的時候沒注意到)
在 config 中是
LASTDRIVE = Z
DEVICE = MS-CDD.SYS /D:CD001
而 autoexec.bat 卻是
MSCDEX.EXE /D:IDECD001 /L:X
X:
ghost -clone,mode=pload,src=X:\backup.gho:1,dst=1:1 -rb
而我文中提過 config.cfg 和 autoexec.bat 中的光碟名稱要一樣
所以 autoexec.bat 中應該是
MSCDEX.EXE /D:CD001 /L:X
或是把 config.sys 中的
DEVICE = MS-CDD.SYS /D:CD001
改成
DEVICE = MS-CDD.SYS /D:IDECD001
WSUS for Client
登錄檔設定說明~(粉紅色框框為必要的設定項目)
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
| EntryName | Values | Data Type |
| ElevateNonAdmins | Range = 1|0 1 = 在 Users 安全 性群組的使用者可以核准或拒絕核准更新. 0 = 只有在Administrators 群組的使用者可以核准或拒絕核准更新. | Reg_DWORD |
| TargetGroup | 指定 在WSUS伺服器內的分類群組,用以實作client-side targeting. 範 例: "總公司群組" (這 個原則和TargetGroupEnabled是一 對) | Reg_String |
| TargetGroupEnabled | Range = 1|0 1 = 啟用 client-side targeting. 0 = 停用 client-side targeting. (這 個原則和 TargetGroup是一 對) | Reg_DWORD |
| WUServer | 自動 更新及API呼叫 所使用WSUS伺服 器的 HTTP(S) URL,這 個原則和WUStatusServer是一 對,必須設為相同的值. 只需輸入WSUS伺服器的IP位址即可,不需輸入子目錄. 範例:http://192.168.1.1 | Reg_String |
| WUStatusServer | 使用WUServer自動 更新之客戶端回報資訊用伺服器的 HTTP(S) URL,這 個原則和WUServer是一 對,必須設為相同的值. 範例:http://192.168.1.1 | Reg_String |
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate\AU
| EntryName | Values | Data Type |
| AUOptions | Range = 2|3|4|5 2 = 通知 下載和安裝. 3 = 自動 下載和通知安裝. 4 = 自動 下載和排程安裝. (必須 設定 ScheduledInstallDay 和 ScheduledInstallTime 才有 效) 5 = 啟用 自動更新,允許使用者自行選擇設定. | Reg_DWORD |
| AutoInstallMinorUpdates | Range = 0|1 0 = Treat minor updates like other updates. 1 = Silently install minor updates. | Reg_DWORD |
| DetectionFrequency | Range = n n = 間隔時間(1-22)小 時. 自動 偵測更新的頻率(每 n 小時) | Reg_DWORD |
| DetectionFrequencyEnabled | Range = 0|1 1 = 啟用 DetectionFrequency. 0 = 使用 預設值,每 22 小時 偵測一次. | Reg_DWORD |
| NoAutoRebootWithLoggedOnUsers | Range = 0|1 1 = 不會 自動重新開機,登入的使用者可以選擇是否重新開機. 0 = 自動 更新通知使用者電腦將在 5 分鐘 後重新開機. | Reg_DWORD |
| NoAutoUpdate | Range = 0|1 0 = 啟用 自動更新. 1 = 停用 自動更新. | Reg_DWORD |
| RebootRelaunchTimeout | Range = n n = 間隔 時間(1-1440)分 鐘. 出現 提示已排定重新開機訊息的時間間隔. | Reg_DWORD |
| RebootRelaunchTimeoutEnabled | Range = 0|1 1 = 啟用 RebootRelaunchTimeout. 0 = 停用 RebootRelaunchTimeout(使用 預設值 10 分鐘). | Reg_DWORD |
| RebootWarningTimeout | Range = n n=時間(1-30)分 鐘. 排程 安裝後的自動開機警告訊息倒數時間(倒數 結束即重新開機) | Reg_DWORD |
| RebootWarningTimeoutEnabled | Range = 0|1 1 = 啟用RebootWarningTimeout. 0 = 停用RebootWarningTimeout (使用 預設值 5 分鐘). | Reg_DWORD |
| RescheduleWaitTime | Range = n n = 時間 (1-60) 分 鐘. 錯過 排程安裝後的下次開機,等得多久才套用安裝. 這個 原則只對排程安裝有效,對deadline無 效,deadline過期 後將自動儘快安裝. | Reg_DWORD |
| RescheduleWaitTimeEnabled | Range = 0|1 1 = 啟用RescheduleWaitTime. 0 = 停用 RescheduleWaitTime. (下次 排程安裝時間才一起安裝) | Reg_DWORD |
| ScheduledInstallDay | Range = 0|1|2|3|4|5|6|7 0 = 每天 1 ~ 7 = 星期 日 (1) 到 星期 六 (7). 設定 日期進行排程安裝. (只有 當 AUOptions = 4 時才 有效) | Reg_DWORD |
| ScheduledInstallTime | Range = n n = 幾點 鐘 (0-23). 幾點 鐘進行排程安裝. (24小時制) | Reg_DWORD |
| UseWUServer | 這個 值必需設為1才能 設定 WUServer | Reg_DWORD |
以下是我目前設定的登錄檔內容(for WINNT版本以上)~
引用:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate]
"WUServer"="http://xx.xx.xx.xx"
"WUStatusServer"="http://xx.xx.xx.xx"
"ElevateNonAdmins"=dword:00000000
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU]
"NoAutoUpdate"=dword:00000000
"AUOptions"=dword:00000004
"ScheduledInstallDay"=dword:00000000
"ScheduledInstallTime"=dword:00000015
"NoAutoRebootWithLoggedOnUsers"=dword:00000001
"DetectionFrequencyEnabled"=dword:00000001
"DetectionFrequency"=dword:00000008
"UseWUServer"=dword:00000001