Feeds:
文章
迴響

Archive for 2006 年 05 月

何謂愚昧?

這個標題是今天晚上看聖經後的問題?聖經中常常提到愚昧人,可是什麼是愚昧人呢?
於是在網路上找到了"區永亮牧師, 愚者之鑑"這篇講章,文章以亞希多弗這個人來說明何謂愚昧,亞希多弗在世人的眼中是一個相當聰明的人,但是在神的眼中它屬於愚昧人,Why?因為從神的眼光來看事情,千年如一日,人依靠自己聰明所完成的事情,不過都是些短暫以及會失去的東西。惟有隨從神的帶領,才能獲得永恆和有意義的事情。
 
該篇講章也提到亞希多弗值得我們鑑戒的事情,首先提到貪心,貪心常是人愚昧的重要原因,也是成功之人的致命傷,聖經提摩太前書6:7-8 提到"因為我們沒有帶甚麼到世上來、也不能帶甚麼去.只要有衣有食、就當知足。"要我們有衣有食就當知足,不應該貪戀世上的一切。第二個是驕傲,驕傲會矇蔽我們一切的視聽,使我們看不到問題的本質,聖經箴言 12: 18 如此說"敗壞之先、人心驕傲.尊榮以前、必有謙卑",所以驕傲會帶來敗壞,因此我們要時刻學會謙卑。最後提到一個不懂得饒恕的人,是愚昧的人。他會把別人加在自己身上的痛苦繼續拿來傷害自己,一個不能饒恕他人的人,也不能接受他人的饒恕和神的饒恕。聖經馬可福音11:25-26如此說"你們站著禱告的時候、若想起有人得罪你們、就當饒恕他、好叫你們在天上的父、也饒恕你們的過犯。你們若不饒恕人、你們在天上的父、也不饒恕你們的過犯。"。
 
愚昧的相反就是智慧,如何成為一個有智慧的人呢?詩篇111:10如此說
 
"敬畏耶和華是智慧的開端"
 
 
廣告

Read Full Post »

樊雪春的相關文章

Read Full Post »

研究[1]整理出來的筆記如下
 
1. 使用 Assembly 物件的 ReflectionOnlyLoad 方法載入 .Net Assembly[2]
2. 使用 GetManifestResourceNames[3] 取得 Assembly 中的所有資源檔名稱
3. 使用步驟2得到的名稱透過 Assembly 的 GetManifestResourceStream[4]  方法取得資源串流
4. 取出資源
 1) 透過 try…catch 測試 stream 屬於哪一種資源
    4.1 Icon
    Icon icon = new Icon( stream );
    4.2 Cursor
    Cursor cursor = new Cursor( stream );
    4.3 Image
    Image image = Image.FromStream( stream );
    4.4 Gif Image 
  Image image = Image.FromStream( stream );
  FrameDimension frameDim = new FrameDimension( image.FrameDimensionsList[0] );
  bool isAnimatedGif = image.GetFrameCount( frameDim ) > 1;
 2) 透過 ResourceReader[5] 和 IResourceReader[6] 取得資源
 
參考資料:
[1] http://www.codeproject.com/dotnet/Extracting_Embedded_Image.asp
[2] ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref10/html/O_T_System_Reflection_Assembly_ReflectionOnlyLoad.htm
[3] ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref10/html/M_System_Reflection_Assembly_GetManifestResourceNames.htm
[4] ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref10/html/O_T_System_Reflection_Assembly_GetManifestResourceStream.htm
[5] ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref10/html/T_System_Resources_ResourceReader_Members.htm
[6] ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref10/html/T_System_Resources_IResourceReader_Members.htm

Read Full Post »

發生網路攻擊的原因
1. 報復
2. 間諜活動
3. 宣傳
4. 滿足個人快樂
5. 恐怖行動
6. 獲取不當利益
網路攻擊的目的
1. 竊取資料、軟體
2. 破壞資料、系統,使電腦無法正常運作
3. 惡作劇
4. 炫耀能力
5. 商業間諜
6. 政治因素
網路攻擊類型與流程
1. 主動式攻擊
  入侵者針對檔案或通訊內容進行偽造或修改。常見的攻擊如下:
  a. 偽裝(Maquerade)
  b. 重播(Replay)
  c. 訊息竄改(Message Modification)
  d. 服務組絕(Denial of Service)
2. 被動式攻擊
  入侵者取得資訊的存取權限但未對內容進行竄改。常見的攻擊如下:
  a. 竊聽(Eavesdropping)
  b. 通訊分析(Traffic Analysis)
網路攻擊流程
1. 資料蒐集:攻擊目標相關資料蒐集
2. 目標掃描:掃描目標開啟那些通訊埠
3. 弱點刺探:找尋系統漏洞。
4. 取得初步權限
5. 提升權限
6. 進行破壞
7. 建立後門:後續可當作跳板使用。
8. 消滅證據:消除所有入侵的痕跡。
網路攻擊方法及防治對策:
1. 阻斷服務攻擊(DoS):利用網路系統資源有限(記憶體,處理器,頻寬等等), 加上部分網路系統軟體或者相關通信協定等在設計或實作上的漏洞,透過大量且密集的封包傳送,達到使被攻擊的主機或網站無法處理,以致許多正常想要連上該網站的用戶,都被阻絕在外,連不上該主機或網站;或者是找出程式無法處理的例外狀況造成系統當機,無法提供服務。
   a. Smurf 攻擊
        原理: –ICMP(Internet Control Message Protocol)封包可以載送網路傳輸情況和錯誤訊息,用以判斷網路彼端的電腦是否有回應。 –判斷方式
        ‧對該主機位址傳送ICMP echo request packet.
        ‧若該主機收到時,通常會回應ICMP echo reply packet.
        ‧通常這個過程是由一個“ping”命令來達成 –因此,以程式來利用IP Protocol傳送大量ping message 封包給Internet上許多台機器,造成大量Reply message造成網路交通的癱瘓。
        攻擊方式: –大量產生假造的ICMP echo Request封包 –將假造的封包送至廣播位址,然後廣播位址會傳回大量的icmp回應封包給目標電腦。造成更多倍數的ICMP echo reply封包傳回至欲攻擊的目標。
        範例:ping -s 30000 192.168.30.255
        ‧這種方式具有放大的效果,所以又被稱為 放大型 smurf 攻擊。
   b. Ping of Death — 針對舊版作業系統,如windows 95
        原理 –「Ping of Death」是經由發送過大的 ping 請求(ICMP echo request) ,以造成緩衝區溢位(Overflow),繼而導致無法正常運作或當機。
   c. ICMP DoS
   d. UDP Flood DoS
   e. TCP DoS: Land 攻擊, Teardrop 攻擊, TCP SYN(SYN flood)
      e1. TCP SYN (SYN flood)
        攻擊方式: –針對攻擊目標送出一連串具有假的來源位址的SYN封包。 –受攻擊的系統會將尚未收到ACK回應的SYN封包暫存於佇列中,直到收到對方的ACK回應或超過逾期時間才移除。 –系統會因為收不到ACK回應,而使得佇列中充滿著暫存的SYN封包而無法再處理其它使用者的請求。
      e2. Land 攻擊: 攻擊者利用 IP 偽裝的技術修改即將送出的封包,將其來源與目的 IP 位址均改成是目標機器的 IP 位址,以及將來源與目標連接埠也改為一樣。
      ‧此種攻擊可以令某些作業系統或網路設備當機無法正常運作
      e3. Teardrop 攻擊
        原理:利用IP封包重組的漏洞進行攻擊。
        ‧攻擊方法: –發送一堆經特別設計過的封包片段到目標電腦,這一堆封包片段包含了重疊的位移值,這使得這堆封包重組成原來的IP 封包時,導致網路服務主機誤判封包大小,造成系統當機現象
   分散式阻斷服務攻擊稱為DDoS –採用分散的攻擊方式,聯合網路上能夠發動DoS攻擊的主機同時發動攻擊,在短時間內產生大量封包流入欲攻擊的目標,造成對方系統癱瘓, 導致無法正常提供服務。
   阻斷與分散式阻斷服務攻擊的對策
    ‧停用未使用或不需使用的服務
    ‧在路由器上設置封包過濾器或啟動Ingress Filtering功能,以拒絕來源不合理或是目標是broadcast的封包
    ‧安裝建置防火牆、入侵偵測或入侵預防系統
    ‧啟動磁碟配額(Disk Quota)功能:防止郵件炸彈一類攻擊 將磁碟塞報
    ‧建置警示系統
    ‧頻繁更新安裝修正檔
2. 惡意程式
   a. 電腦病毒
    ‧有害的電腦程式(惡意程式) –執行中毒的程式並在特定情況下發作(如:日期因素)
    ‧種類 –開機型、檔案型、巨集型、特洛依型、玩笑型 –變種病毒
    ‧隱身方式 –寄生在特定應用程式,例: .exe, .dll, .htm, .vbs, .js
    ‧傳遞途徑 –電子郵件附件、FTP、網路芳鄰、Internet 網頁瀏覽
    ‧目的 –破壞資料、控制主機、癱瘓網路、跳板攻擊    
   b. Worm
    ‧與病毒非常類似的惡意程式,但是並不需要寄主程式就可不斷複製自己
    ‧蠕蟲可能會耗盡電腦資源、修改系統設定或導致系統無法運作。
   c. 木馬程式
    ‧何謂木馬程式 –原名特洛伊木馬、又稱後門程式。
        –在Internet上,“特洛伊木馬”係指一些程式設計人員在其可從網路上下載的應用程式中,設計包含了可以控制用戶的電腦系統的程式,可能造成用戶的系統資料外洩、被破壞甚至主機癱瘓的惡意的遠端遙控程式。
        –Client (控制端) / Server (被控制端) 架構服務。
    –基本特徵
      ‧偽裝
      ‧極盡可能的隱藏自己
      ‧不自我繁殖,也並不主動感染其他文件
      ‧提供靜態或動態聯結埠
    ‧木馬程式來源 –系統被入侵遭駭客植入 –惡意使用者設計的陷阱 –執行來路不明的程式、安裝被竄改過的程式套件 –被網路蠕蟲感染
    ‧木馬類型 –遠端遙控型/破壞型/鍵盤紀錄型/密碼傳送型/FTP型
    ‧主要傳播方式 –電子郵件和檔案下載服務/透過作業系統或應用程式弱點被種植
    ‧主要目的 –控制主機、資料竊取、跳板攻擊、癱瘓網路
    惡意程式的對策
    ‧安裝防毒軟體
    ‧安裝木馬程式掃瞄器
    ‧頻繁更新防毒軟體、木馬程式掃瞄器的資料庫
3. 其他
   a. 連接埠掃瞄
    ‧TCP/IP 協定提供 65536 個連接埠,作為對外連接的端點 –TCP 與 UDP port
    ‧連接埠掃瞄的主要目地在於測試目標電腦系統所開啟的連接埠,進而分析其有提供那些網路服務以及它可能是屬於那一種作業系統.
    防堵對策:
    ‧停用不需使用的服務或程式
    ‧使用路由器存取控制清單、防火牆、代理伺服器設定存取控制機制
    ‧使用IDS識別連接埠掃瞄活動
    ‧移除或隱藏作業系統或是應用程式的識別記號(banner)
    ‧升級或更新為更安全的作業系統、應用程式、通訊協定   
   b. 密碼攻擊
    ‧強力破解 (Brute-force attack) –透過不斷嘗試猜測各種合法字元可能的組合直到正確為止的攻擊方法 ‧字典攻擊 (Dictionary-Based attack) –利用常用的密碼和字彙,不斷地改變組合一直到破解密碼為止
    對策:
        ‧設定一個強固的密碼原則而這個原則內包含如下的設定:
        –啟動複雜式密碼偵測
        –啟動密碼最短長度偵測
        –啟動密碼最長使用期限偵測
        –啟動密碼錯誤鎖定偵測
   c. 連線截奪 (Session Hijacking)
        ‧Session Hijacking中文稱為「連線截奪 」
        ‧攻擊原理:
            –當入侵者在使用者登入主機並完成身份確認後,即進行連線截奪,讓合法使用者跟主機間的連線中斷,入侵者的電腦取代合法使用者與遠端主機進行連結,入侵者可存取使用原合法使用者所有有權限存取的任何資源。
        ‧Kra”於1998年11月編寫的Hunt,還有“daemon9”編寫的juggernaut,均提供Session Hijacking功能。
        對策
            建議使用有提供關聯式身份驗證(mutual authentication)功能的協定例如IPSEC、SSH等,以保護通訊間的安全.
   d. 重送攻擊 (Replay Attack)
    ‧原理: –攻擊者於竊聽網路後,劫取並記錄了通訊雙方傳送的憑證資訊,之後便重送這份憑證資訊以假冒某個特有共用金鑰的使用者,以達到存取系統的入侵目的。 ‧對策: –金鑰設定採用較短有效時間限制 –採用完整雙向驗證的安全性協定
   e. 緩衝區溢位 (Buffer Overflow)
    ‧向在程式中所宣告的記憶體區塊填充超過它所能處理的資料量時,就會造成所謂的緩衝區溢出的狀況。      範例: #include <stdio.h> #include <string.h>            void func(char *p)       {              char buffer1[10];              strcpy(buffer1, p);              printf(buffer1);  }       Int main(int argc, char *argv[])       {       func(“I am the law in the network”);          return 0; }  
        緩衝區溢出之安全影響‧溢出類型
        –本地(local buffer overflow)
        –遠端(remote buffer overflow) :可讓遠端使用者攻擊該目標電腦
    ‧安全影響
        –潛伏網路竊取資料
        –進行跳板式攻擊
    ‧防治對策
        –頻繁更新與安裝修正檔(patches)
        –避免安裝與使用未經測試或授權軟體
   f. 竊聽 (Sniffing、Eavesdropping)
    ‧竊聽是常被使用的被動式攻擊法 –攔截封包並檢視分析內容 –破解私密性資料
    ‧Sniffer執行時會將乙太網路卡設定成隨機處理模式(Promiscuous Mode), 也就是不做任何封包的過濾
    ‧因應對策: –使用switch 取代 hub –使用安全的協定或是服務  
   g. 社交工程 (Social Engineering)
    ‧社交工程是利用非技術性手段,取得系統存取的資訊。例如: –佯裝為服務、管理人員或服務人員,藉機騙取密碼。 –
    ‧因應策略 –加強企業員工資訊安全教育。
   h. 資料隱碼 (SQL Injection)
    ‧原理: –在撰寫應用程式時,沒有對使用者的輸入做妥善的過濾與處理,便將其組合成SQL指令,傳送給SQLserver執行,若使用者輸入之資料中含有某些對資料庫系統有特殊意義的符號或命令時,便可能讓使用者有機會對資料庫系統下達指令,而造成入侵所帶來的損失。
    ‧影響範圍: –網站系統:Apache、IIS、Domino、Netscape –程式碼: ASP、PHP、JSP –資料庫:MS-SQL、MySQL、Oracle、Sybase、DB2 ‧SQL Injection可能造成的危害 –透過SQL Injection操作資料庫,可以新增、更動或刪除資料庫的資料,造成資料遺漏或是不正確;如果操作資料庫的使用者權限為系統管理者,那麼還有可能造成其他更嚴重的破壞,例如奪取資料庫的控制權。
    ‧過濾網頁使用者的input資料 –網頁程式也提供一些函數來過濾使用者輸入SQL語法 ‧資料庫的權限設定 –避免讓網頁的資料庫使用者有過多的資料庫權限 ‧嚴格過濾使用shell command –避免系統執行到使用者輸入的shell command ‧仔細處理每個 return code及error codes的輸出 –過多錯誤訊息會暴露過多系統資料,讓駭客有機可趁

Read Full Post »

Winrar 自解安裝程式

最近使用 C# 開發的程式需要打包成安裝程式給其他人使用,由於產生的安裝程式除了 Setup.exe 之外,於是想透過 WinRar 包成自解壓縮檔來建立單一執行檔,可是如果只是自解檔,還是太遜了… 想到之前 Microsoft 的 zip 自解檔解開後都可以自己進行安裝,也許 Winrar 也可以,果然 WinRAR 線上手冊[1]和網路上有一堆教學文件[2],下面是摘錄自 WinRAR 的線上手冊

   使用這兩種模組您可以建立 GUI (圖形模式) 自我解壓縮檔 的 32 位 Windows 版本(Windows 95、98、NT 等等),這些模組無法在 Windows 3.1 或 DOS 下執行。
   使用 Default.SFX 模組於 RAR 壓縮檔案 以及 Zip.SFX 於 ZIP 壓縮檔案。
   這些模組均支援簡易的 Setup 命令,您可以將 Setup 命令?述加入到自解檔 壓縮檔註解 中。下面是 Setup 命令的?述,在命令上按一下可獲得詳細敘述。
Delete 解壓縮前先刪除檔案
License 顯示程式的使用授權協定
Overwrite 選擇檔案的覆寫模式
Path 設定預設目標路徑
Presetup 指定解壓縮前執行的程式
SavePath 儲存目的地路徑
Setup 指定解壓縮後執行的程式
Shortcut 建立解壓縮檔案的捷徑
Silent 跳過開始時的對話方塊
TempMode 解壓縮檔案到暫存資料夾
Text 加入純文字到自解檔對話方塊純文字視窗
Title 設定自解檔對話方塊標題
這裡您可以檢視 完整安裝指令碼的簡易範例。
注意
在自解檔模組包含的 Windows 資源是可以修改成您所需要的樣子的。例如,您可以在起始對話方塊中顯示您希望的點陣圖。WinRAR 並不提供修改資源的工具或檔案,如果您要如此做的時候,您必須有資源編輯器,並要熟悉怎麼操作。但如果標準的自解檔對話方塊即可滿足您的話,您就不需要再修改資源。

依據上述的說明,建了一個符合我的安裝程式樣本如下
Title=Learning agent 安裝程式
Text=text
License=Learning agent 安裝程式
{
Learning agent 安裝程式<br/>
本程式由 Chui-Wen Chiu 設計<br/>
<br/>
<a href = ‘http://61.221.176.159:2527/agent/’/>官方網站</a&gt;
}
Setup=setup.EXE
TempMode=開始安裝?@Learning agent 安裝程式
Silent=2
Overwrite=1
將上述樣本存成檔案,未來可以重複使用
建立自動安裝的自解壓縮步驟如下:
1. 檔案總管中選取要壓縮的檔案
2. 選擇"加到壓縮檔(A)"
3. 如下圖填入壓縮檔名,勾選"建立自我解壓縮檔案(X)"

4. 如下圖將剛剛建立的樣本選取進來

  

5. 按下確定產生自解檔
6. 當你點選自解檔時,會如下圖出現一個版權宣告視窗,詢問你是否接受,按下接收後會問你是否要進行安裝,當你按下"是"的時候,就會啟動 setup.exe
參考資料:
[1] WinRAR 線上手冊
[2] http://arch.pconline.com.cn/pcedu/soft/gj/zip/10209/94168.html

Read Full Post »

想不到又從 C# 退回 C++ 了…
今天又要開始一個新案子,這個案子原本想使用C#重寫,不過礙於時程壓力,只好將之前寫的程式再加上 Http Request 功能,那 BCB 怎麼使用 Http Request 呢?如果用 C# 可以很簡單的 HttpRequest 類別,但是 BCB "似乎"(好吧,我對於他提供的東西不是這麼熟悉)沒有提供類似的類別,那只好自己打造一個了,那要怎麼開始呢?
找找找…. 突然想到之前看到 Tidy 元件好像有支援一個 Http 元件,是什麼呢?啊ㄏ~ 就是 TIdHttp … 可是怎麼用呢?這就是我不喜歡用 BCB 的其中一個原因"說明文件不齊全" -_-b
 
還好活在現代有 Google 大神可以用,查了一下 TIdHttp 的範例,天啊怎麼都是 Delphi 範例 -_-|||
 
由於沒有研究過 Delphi 只好逐一猜測寫法,終於整理出一個簡單的範例,可以傳送 Http Reqeust 和接收 Http Response 

// BCB Client
  AnsiString username = "cwchiu";
  AnsiString password = "test";
  AnsiString url = "http://192.168.163.128/request.php";
 
  // 產生 POST 參數
  std::auto_ptr<TStringStream> request(new TStringStream(""));
  request->WriteString(URLEncode("username="+username));
  request->WriteString("&");
  request->WriteString(URLEncode("password="+password));
  // Respose 接收
  std::auto_ptr<TStringStream> response(new TStringStream(""));
  // 通訊埠
  IdHTTP1->Port = 80;
  //
  IdHTTP1->Request->ContentType = "application/x-www-form-urlencoded";
  // 傳遞資料
  IdHTTP1->Post(url, request.get(), response.get());
  // 接收 Respose 資料
  AnsiString result = response->DataString;

// PHP server
<?php
if ($_POST[‘username’] == ‘cwchiu’ && $_POST[‘password’] == ‘test’) {
    echo "YES";
}else{
   echo "NO";
}
?>
 

Read Full Post »

今天看了曹祖聖的關於IE對於ActiveX行為改變的線上教學,做了以下的筆記。(ps. 這份線上教學講的相當詳細,可以從[1]取得)

IE 預設會對於 Object, Embed 和 Applet 等標籤限制啟動功能。必須點選該控制項後才能使用,未啟動的情況下,雖含控制項仍會執行但無法與使用者互動。

要解決上述問題,基本概念是透過 Script 動態產生控制項標籤。實作方式分為兩類:
1. DHTML
  1.1 document.write 輸出 ActiveX 控制項標籤
 ex: document.write("http://test.wmv");
  1.2 使用 outerHTML 輸出 ActiveX 控制項標籤
   ex:
   document.getElementById(‘div’).outerHTML= "http://test.wmv";
  1.3 使用 innerHTML 輸出 ActiveX 控制項標籤
   ex:
   document.getElementById(‘div’).innerHTML= "http://test.wmv";
2. DOM   
   ex:
   var ctr = createElement("embed");
   ctr.src = "test.wmv";
   document.getElementById(‘div’).appendChild(ctr);

注意事項
1. 以上方法必須將 IE "網際網路選項|進階|瀏覽|停用指令碼除錯(Internet Explorer)"功能取消才能正常運作。
2. Javascript 不能輸出一個 <script> 標籤,且標籤內含 ActiveX 標籤輸出
3. Javascript 無法判斷控制項是否被啟用。

補充:
1. IE 使用 EnabledWindow Win32 API 啟用/關閉互動控制項
2. IE 透過 ActiveX 容器攔截非互動控制項的 Windows 訊息
3. 程式判斷控制項是否啟用的方法:
   3.1 使用 COM IDispatch 介面的 Invoke 方法檢查 DISPID_AMBIENT_UIDEAD 屬性
   3.2 使用 IOleControl 介面的 OnAmbientPropertyChange 事件
4. 控制項實作 IAccessible 介面處理未啟動情況下的行為[2]
5. 內嵌 WebBrowser 控制項的程式不會阻擋 Applet, Object 和 Embed 控制項
   ps. 如果要與 IE 有相同的行為模式,兩個方法
   1. 將 DOCHOSTUIINFO 結構的 dwFlags 加入
     DOCHOSTUIFLAG_ENABLE_ACTIVEX_INACTIVATE_MODE 旗標。
   2. 修改 Register
     HKLMSOFTWAREMicrosoftInternet ExplorerMainFeatureControlFEATURE_ENABLE_ACTIVEX_INACTIVATE_MODE 加入一個 DWORD 名稱為你的應用程式執行檔(如: arick.exe)其值設為 1
6. 控制項可以送交 Microsoft 註冊,使控制項預設為啟動狀態。

參考資料:
[1] http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=zh-tw&EventID=120468218
[2] Microsoft Active Accessibility Start Page, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/msaa/msaastart_9w2t.asp

Read Full Post »

Older Posts »