<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4748729432146567274</id><updated>2012-01-06T00:23:42.070-08:00</updated><category term='java'/><category term='讀書心得'/><category term='密碼學研究'/><category term='生活記事'/><category term='MP3相關'/><category term='工作筆記'/><category term='工具測試'/><category term='NKNU設定'/><category term='Windows'/><category term='Web Vulnerability Scanner'/><category term='Touch Panel'/><category term='ASP.NET'/><category term='實用工具'/><category term='HTTP'/><category term='編碼規則'/><category term='Snort'/><category term='Linux'/><category term='Qt'/><category term='Smart Card'/><category term='資訊安全'/><category term='Android'/><category term='即時通訊'/><category term='C++ Builder'/><category term='程式練習'/><category term='逆向工程'/><category term='C/C++/C#'/><title type='text'>我的工作筆記</title><subtitle type='html'>亂七八糟的私人工作筆記</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default?start-index=101&amp;max-results=100'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>229</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-5705401211167683157</id><published>2012-01-05T01:32:00.000-08:00</published><updated>2012-01-05T01:32:17.946-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>【筆記】ASP.NET 從 GridView 匯出Excel檔</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;    最近的一直在重覆這些動作, 直接整理成 Function, 塞入 Command 就可以用比較方便&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br/&gt;&lt;br/&gt;    /* 匯出Excel檔 */&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;protected void getExcelButton_Click(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    Response.ClearContent();&lt;br /&gt;    Response.Write("&amp;lt;meta http-equiv=Content-Type &lt;br /&gt;        content=text/html;charset=utf-8&amp;gt;");&lt;br /&gt;    /* 要匯出旳檔案名稱 */&lt;br /&gt;    string excelFileName = "HistoryData.xls";&lt;br /&gt;    Response.AddHeader("content-disposition", &lt;br /&gt;        "attachment;filename=" + Server.UrlEncode(excelFileName));&lt;br /&gt;    Response.ContentType = "application/excel";&lt;br /&gt;    System.IO.StringWriter stringWrite &lt;br /&gt;        = new System.IO.StringWriter();&lt;br /&gt;    System.Web.UI.HtmlTextWriter htmlWrite &lt;br /&gt;        = new HtmlTextWriter(stringWrite);&lt;br /&gt;    GridView1.RenderControl(htmlWrite);&lt;br /&gt;    Response.Write(stringWrite.ToString());&lt;br /&gt;    Response.End();&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br/&gt;&lt;br/&gt;    /* 沒加這個 Function 之前會一直看到 */ &lt;br/&gt;    /* "GridView 必須置於有runat=server 的表單標記之中" */ &lt;br/&gt;    /* 點選後會直接另存Excel檔 */ &lt;br/&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;pre&gt;&lt;br /&gt;public override void VerifyRenderingInServerForm(Control control)&lt;br /&gt;{&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-5705401211167683157?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/5705401211167683157/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2012/01/aspnet-gridview-excel.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5705401211167683157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5705401211167683157'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2012/01/aspnet-gridview-excel.html' title='【筆記】ASP.NET 從 GridView 匯出Excel檔'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-8418484950998354424</id><published>2011-11-24T22:21:00.001-08:00</published><updated>2011-11-24T22:43:05.071-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='讀書心得'/><title type='text'>【讀書心得】軟體構築美學：當專案團隊遇上失控程式，最真實的解決方案</title><content type='html'>&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://im1.book.com.tw/exep/lib/image.php?image=http://im1.book.com.tw/exep/lib/image.php?image=http://addons.books.com.tw/G/001/7/0010485217.jpg&amp;amp;width=200&amp;amp;height=280&amp;amp;quality=80" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://im1.book.com.tw/exep/lib/image.php?image=http://addons.books.com.tw/G/001/7/0010485217.jpg&amp;amp;width=200&amp;amp;height=280&amp;amp;quality=80" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;博客來：&lt;a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010485217"&gt;軟體構築美學：當專案團隊遇上失控程式，最真實的解決方案&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;   作者：Kyle Baley、Donald Belcham&lt;/li&gt;&lt;li&gt;   譯者：蔡煥麟、張簡才祿&lt;/li&gt;&lt;li&gt;   出版社：悅知文化&lt;/li&gt;&lt;li&gt;   ISBN：9789866348785&lt;/li&gt;&lt;/ul&gt;文案：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;歡迎來到真實世界！&lt;br /&gt;&lt;br /&gt;要接管既有應用程式並不容易，我們往往因缺乏良好的程式撰寫習慣及專案管理經驗，而讓維護及改善變得困難。當你肩負著力挽狂瀾的使命時，除了被神選中的幸運，還有什麼方法可以幫助你從困境中重生？&lt;br /&gt;&lt;br /&gt;■ 有效的應用程式版本控制方式&lt;br /&gt;■ 持續整合與自動化測試對開發環境的重要性&lt;br /&gt;■ 謹守並維持有效的程式撰寫原則及習慣&lt;br /&gt;■ 從使用者介面到資料存取的重構模式來改善既有程式碼&lt;br /&gt;■ 程式分層及降低程式依賴性，可有效改善棕地專案的瑕疵&lt;br /&gt;&lt;br /&gt;本書將大部分專案團隊所面臨到的既有、且難以維護及改善的應用程式，稱為棕地應用程式（Brownfield Application），它具有三項特點：既有程式碼；因差勁的實務作法而造成汙染；仍有改善或重複使用的潛力。&lt;br /&gt;&lt;br /&gt;如何重構棕地專案？將分別從「開發環境」及「程式碼」兩大部分來探討。關於「開發環境」，將說明版本控制（version control）、持續整合（CI）、自動測試及度量，以及瑕疵追蹤的重要性和作法。而在關於「程式碼」中，則會從技術面及實務面來說明程式所應具備的可維護性、可讀性、可擴展性、可逆性。此外，書中並補充許多真實案例及挑戰既有想法，除了讓你了解現實情況，並顛覆過去已被認為是常規但不正確的程式開發觀點，期待能陪伴開發人員從更多成功與失敗的專案經驗中成長。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;===========================================================&lt;br /&gt;&lt;br /&gt;看中文書名『軟體構築美學』，可能不太容易理解這是說什麼內容的書？這本書的原文書名是：『Brownfield Application Development in .NET』，書的內容針對的是&amp;nbsp;Brownfield Application&amp;nbsp;棕地應用程式的處理，Brownfield 指的是開發中的專案。針對正在進行、使中的專案改善專案的處理方法，另一部份是&amp;nbsp;.NET 書中提及的專案開發、使用的工具、程式語言都以 .NET 為主。&lt;br /&gt;&lt;br /&gt;書裡的大範圍分成兩部份：&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;開發環境&lt;/li&gt;&lt;li&gt;程式碼&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;書裡提到的開發環境，不只是程式開發的IDE環境，也提供了版本控制的工具及方法；並且務實的指出在版本更新時必須注意的事項。例如：備份前必須在乾淨的平台中測試過，確認內容的可靠性再做備份，這樣中確實的建議。除了版本控制工具，測試工具以及測試軟體的建置撰寫方法，書裡也都提供了具體的建議。&lt;br /&gt;&lt;br /&gt;程式碼的部份，其實還可以再區分成兩部份：一部份是很強調『物件導向』，希望專案開發者可以做到物件導向以及程式開發中的一些原則：&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;可維護性&lt;/li&gt;&lt;li&gt;可讀性&lt;/li&gt;&lt;li&gt;可測試性&lt;/li&gt;&lt;li&gt;擴充性&lt;/li&gt;&lt;li&gt;可逆性：這個最有趣，可逆才表示程式可以像元件一樣拆解。&lt;/li&gt;&lt;li&gt;調適性&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;除了對程式的結構的要求之外，也提出了一些這類書常看到的客觀建議。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Keep it simple, stupid : KISS （寫程式的應該都看過這句）&lt;/li&gt;&lt;li&gt;You ain't gonna need it : YAGNI&lt;/li&gt;&lt;li&gt;Don't repeat yourself : DRY&amp;nbsp;（重覆的東西不要直接剪貼到其他地方一直用，很容易被忽略的大忌啊～）&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;處理完程式的內容，最後是對程式架構的分層要求，要求把程式階層做比較明確、清楚的切割別全部混成一團。&lt;br /&gt;&lt;br /&gt;看起來是一堆很理論的東西，不過內容中列舉了很多實例，同時提供了很多中肯的建議，想要把混亂的專案處理好的人，參考這本書應該是不錯的選擇。&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-8418484950998354424?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/8418484950998354424/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/11/blog-post_24.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8418484950998354424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8418484950998354424'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/11/blog-post_24.html' title='【讀書心得】軟體構築美學：當專案團隊遇上失控程式，最真實的解決方案'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-8491261805217709281</id><published>2011-11-17T08:16:00.001-08:00</published><updated>2011-11-17T08:44:23.850-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='讀書心得'/><title type='text'>【讀書心得】編程創藝：編寫出卓越的程式碼</title><content type='html'>&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://im1.book.com.tw/exep/lib/image.php?image=http://addons.books.com.tw/G/001/3/0010453033.jpg&amp;amp;width=200&amp;amp;height=280&amp;amp;quality=80" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://im1.book.com.tw/exep/lib/image.php?image=http://addons.books.com.tw/G/001/3/0010453033.jpg&amp;amp;width=200&amp;amp;height=280&amp;amp;quality=80" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;博客來：&lt;a href="http://www.books.com.tw/exep/prod/booksfile.php?item=0010453033"&gt;編程創藝：編寫出卓越的程式碼&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;   作者：Pete Goodliffe&lt;/li&gt;&lt;li&gt;   譯者：蔡學鏞&lt;/li&gt;&lt;li&gt;   出版社：碁峰&lt;/li&gt;&lt;li&gt;   ISBN：9789861818382&lt;/li&gt;&lt;/ul&gt;文案：&lt;br /&gt;&lt;br /&gt;軟體工廠的求生指南&lt;br /&gt;&lt;br /&gt;　　「有些書你之所以讀，是因為你必須讀，這就是這樣的一本書。這本書有趣、有用，可以讓你變成更好的程式師。」— Jez Higgins，ACCU主席&lt;br /&gt;&lt;br /&gt;　　你知道如何寫成能執行的程式，但是什麼樣才是寫得好、能被理解的程式碼呢？而且要如何讓程式穩健無錯誤呢？如果其他的程式師看你的作品，他們能看懂其中的邏輯與目的嗎？優秀的程式師不只具備技術知識，還能具備正確的方法和態度。&lt;br /&gt;&lt;br /&gt;　　如果你想變成真正的程式設計專家，或者你想加強你既有的專業技巧，《編程創藝》都會幫助你，不光是寫出能執行的程式碼。&lt;br /&gt;&lt;br /&gt;　　本書充滿和開發過程相關的專業建議，內容包含了寫程式時需要注意的事項，像是程式碼風格、變數命名、錯誤處理、安全保護。本書還包含更廣的知識、真實世界的程式設計問題，像是有效的團隊合作、開發的方法、以及說明檔編寫。每章都以問與答作為結尾，幫助你回顧關鍵概念，讓你像專家一樣思考。這本書對於新進軟體開發領域的人來說，是相當好的參考手冊，可以縮短學習的時間，更快變成優秀的軟體開發者。&lt;br /&gt;&lt;br /&gt;這本軟體工廠的求生指南將會告訴你如何：&lt;br /&gt;　　．當沒有外援時，寫出好的程式碼&lt;br /&gt;　　．在工作場所中避開災難和心煩意亂的情境&lt;br /&gt;　　．正確地使用你的能力，以及增進你能力的途徑&lt;br /&gt;　　．採用有效的作法，依循良好的經驗&lt;br /&gt;&lt;br /&gt;　　真正的程式設計專家所提供的建議是價值非凡的。你會發現《編程創藝》是清晰、有效、實用並幽默的手冊，幫助你的程式碼（與你的職業生涯）產生飛躍的進步。&lt;br /&gt;&lt;br /&gt;===========================================================&lt;br /&gt;&lt;br /&gt;　　最近這一陣子，『程式』這件事情一直讓我覺得很累，平台轉換、程式語言的轉換的不習慣，常常讓我覺得改到最後不知道自己在改什麼之外？快速的解決了眼前看到的問題，不過下一個問題卻在還等不及讓人喘息一下就出現了。希望能在心態、技術上做一點調整，所以看了一些比較不一樣的書，這本書的書名剛好很吸引我『編程創藝：編寫出卓越的程式碼』，最近真的很需要『編寫出卓越的程式碼』的技巧，所以花了幾天的時間快速的翻過這本書。&lt;br /&gt;&lt;br /&gt;　　前面寫的東西很基礎應該是會寫程式的人都看過的東西。內容包括寫程式的風格（程式碼的排版方式）、寫作的原則（Ex：不要故意用少用語法）、變數命名的方式（Ex：巨集全部大寫、儘量讓使用者了解）、註解的寫法、說明文件的寫法、正確的測試方式。關於程式設計也提了一些很有用的觀念，教導怎麼寫出較安全的程式碼、介紹了幾個檢測安全性的工具。本書的最後介紹了關於團隊的程式開發中需要注意的事項，甚至介紹了幾個版本控制軟體；另外也就不同類型的程式設計者列出了優、缺點及改善方向。&lt;br /&gt;&lt;br /&gt;　　每一章的最後一部份是問答的部份，讀者可以透過問答的方式切入實際的工作狀況做出適當的回應。最後一章也提出了完整、中肯的建議。重點是這類的書，常常會讓人覺得很『理論』實踐起來有其困難性，但是這本書的內容其實很實際、很中肯是可以實際被應用、被執行的。另外，這本書並不需要從頭翻到尾，建議先看一下目錄，翻自己有興趣、想改善的地方來試試看就好了，其他的內容有閒、有空再慢慢翻。&lt;br /&gt;&lt;br /&gt;關於註解書裡這麼說：&lt;br /&gt;　　『程式要寫註解。但不是任何一處都要寫上註解，好的註解，對程式是有幫助的，沒用的註解，或是多餘的註解，或錯誤的註解，不但對程式沒幫助，還會誤導讀者。好的註解，才能對程式有幫助。不好的註解，對程式不但沒幫助，甚至有害。』&lt;br /&gt;&lt;br /&gt;『要寫為什麼這麼做，不是寫做什麼？』，也建議與其浪費時間在註解不良的程式，不如重新把該段內容改好，重點是程式，不是註解。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-8491261805217709281?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/8491261805217709281/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/11/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8491261805217709281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8491261805217709281'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/11/blog-post.html' title='【讀書心得】編程創藝：編寫出卓越的程式碼'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-1402628501343393689</id><published>2011-11-05T00:19:00.000-07:00</published><updated>2011-11-05T01:05:52.244-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【筆記】Android NDK (MD5)</title><content type='html'>試用了 Android NDK 主要的目的當然不是為了寫那個 Hello JNI 而是因為之前在開發版上有另一段控制 LED 的 Source Code （用 C寫的），覺得那個應該可以直接在 Android 上使用，所以就小試了一下 NDK。&lt;br /&gt;&lt;br /&gt;NDK 的完整開發環境可以在這裡抓到：&lt;a href="http://developer.android.com/sdk/ndk/index.html"&gt;http://developer.android.com/sdk/ndk/index.html&lt;/a&gt;&lt;br /&gt;網站裡面有一些說明，有興趣可以讀一下...&lt;br /&gt;&lt;br /&gt;回到主題在 Android 中透過 JNI 使用 MD5，２天內剛好不約而同有人寫 mail 給我問了一模一樣的問題，所以就直接以 MD5 為題目來做 JNI 測試。　&lt;br /&gt;&lt;br /&gt;(一)　抓了整包的 NDK 之後解壓縮後可以看到 samples 目錄下的有一堆範例檔。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;(１)直接叫我憑空生出一個完整的內容，還真的不知道怎麼做？挑了一個 samples 目錄下的其中一個目錄複製了一份 md5-test 開始我的&amp;nbsp;MD5 測試工作。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;(２)　工作目錄在 samples\md5-test\&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;jni&lt;/span&gt;&lt;/b&gt; 裡面&lt;br /&gt;&lt;br /&gt;&amp;nbsp;　(甲) MD5 的 Source Code 取得, 我在這裡抓的：&lt;a href="http://people.csail.mit.edu/rivest/Md5.c" style="background-color: yellow;"&gt;http://people.csail.mit.edu/rivest/Md5.c&lt;/a&gt;&amp;nbsp;這裡面的東西是完整的，可以自行拆解需要的部份。&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-ug3LHJ6xeI0/TrTiZ_zoekI/AAAAAAAAGxY/txsdPpE5oYU/s1600/02.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="49" src="http://1.bp.blogspot.com/-ug3LHJ6xeI0/TrTiZ_zoekI/AAAAAAAAGxY/txsdPpE5oYU/s640/02.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(乙) 寫一段相對應的 JNI Code 自己看著辦，反正是要讓 Android 的 Java 可以用的東西。&lt;br /&gt;&lt;br /&gt;(丙) 小修一下&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;&amp;nbsp;Android.mk&lt;/b&gt;&lt;/span&gt; , 這是 Compiler 要用的 Makefile， 反正加了那些檔案自己補一補。&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-fw40x_vjuuM/TrTiZjVREjI/AAAAAAAAGxQ/djANyNp97C4/s1600/03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-fw40x_vjuuM/TrTiZjVREjI/AAAAAAAAGxQ/djANyNp97C4/s400/03.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(二)　直接在 samples 目錄做 Compile，完成後可以產生 .so 檔，直接拿來用就行了&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-WOn7p05owMw/TrTiaQxU_ZI/AAAAAAAAGxg/vjHDtEn5cHc/s1600/01.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="112" src="http://3.bp.blogspot.com/-WOn7p05owMw/TrTiaQxU_ZI/AAAAAAAAGxg/vjHDtEn5cHc/s640/01.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(三)　開啟 Eclipse 打開 Project 開始寫 Android 相對應的 Java Code&lt;br /&gt;&lt;br /&gt;&amp;nbsp;(１) 寫一小段程式去呼叫那個 JNI 用用看。（&lt;b&gt;丟入 test 看會回傳什麼東西？&lt;/b&gt;）&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-aIbI8D1CeY8/TrTiYgWOfgI/AAAAAAAAGxM/U189nmejG3A/s1600/04.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="377" src="http://3.bp.blogspot.com/-aIbI8D1CeY8/TrTiYgWOfgI/AAAAAAAAGxM/U189nmejG3A/s400/04.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;(四)　結果。 丟進去試的字是『test』，回傳的值是『&lt;span class="Apple-style-span" style="background-color: white; font-family: verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;098f6bcd4621d373cade4e832627b4f6&lt;/span&gt;』&lt;br /&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;Md5 線上查詢網站：&amp;nbsp;&lt;a href="http://www.cmd5.com/"&gt;http://www.cmd5.com/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-HPCBhjppknA/TrTiXx3KoKI/AAAAAAAAGxE/aBJiLK-VeVc/s1600/05.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-HPCBhjppknA/TrTiXx3KoKI/AAAAAAAAGxE/aBJiLK-VeVc/s400/05.png" width="267" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-1402628501343393689?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/1402628501343393689/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/11/android-ndk-md5.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1402628501343393689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1402628501343393689'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/11/android-ndk-md5.html' title='【筆記】Android NDK (MD5)'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ug3LHJ6xeI0/TrTiZ_zoekI/AAAAAAAAGxY/txsdPpE5oYU/s72-c/02.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-1614632181763309152</id><published>2011-10-07T10:50:00.000-07:00</published><updated>2011-10-07T10:50:25.983-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><category scheme='http://www.blogger.com/atom/ns#' term='密碼學研究'/><title type='text'>【筆記】C# &amp; OpenSSL RSA 加/解密</title><content type='html'>被這個東西玩了一星期，使用 C# 寫的 RSA 加/解密程式，可以自己玩，但是把東西放到 Linux 底下使用 OpenSSL API 寫的RSA 加/解密程式就解不出原來的東西？ 使用 OpenSSL API 寫的程式也有一模一樣的問題，沒辨法在 C# 下順利被加/解密。&lt;br /&gt;&lt;br /&gt;解決方式：&lt;br /&gt;&lt;br /&gt;C# 的部份： （Windows）&lt;br /&gt;(1) 下載這個套件OpenSSL.NET： &amp;nbsp;&lt;a href="http://openssl-net.sourceforge.net/"&gt;http://openssl-net.sourceforge.net/&lt;/a&gt;&lt;br /&gt;把這個套件導進來，使用它在 .NET的環境下製作 PEM 的公鑰、私鑰。&lt;br /&gt;&lt;br /&gt;(2) 透過&amp;nbsp;OpenSSLKey 把 PEM 轉換成 C# 用的格式 &amp;amp; 處理 加/解密的問題&lt;br /&gt;＊OpenSSLKey：&amp;nbsp;&lt;a href="http://csslab.s3.amazonaws.com/csslabs/Siva/opensslkey.cs"&gt;http://csslab.s3.amazonaws.com/csslabs/Siva/opensslkey.cs&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OpenSSL API 的部份：(Linux, Ubuntk 10.04)&lt;br /&gt;使用 PEM_read_RSAPrivateKey 這個 Function 去讀取 PEM 格式的金鑰。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;使用 C# 內建的加解密套件，要宣告這個：&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;&lt;b&gt;using System.Security.Cryptography; //Security&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;把 OpenSSL.NET 包進來用這個：&lt;br /&gt;&lt;pre&gt;&lt;b style="background-color: yellow;"&gt;using OpenSSL.Crypto;&lt;/b&gt; &lt;/pre&gt;&lt;br /&gt;&lt;b style="background-color: yellow;"&gt;成果：&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-QGk0p-JwX98/To8221l-aXI/AAAAAAAAGwI/PQYdBv4dm4A/s1600/C%2523_RSA.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="203" src="http://2.bp.blogspot.com/-QGk0p-JwX98/To8221l-aXI/AAAAAAAAGwI/PQYdBv4dm4A/s400/C%2523_RSA.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-TYozYVrG5KU/To83MSmceII/AAAAAAAAGwM/2C_XknJ6Owc/s1600/OpenSSL_RSA.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="215" src="http://1.bp.blogspot.com/-TYozYVrG5KU/To83MSmceII/AAAAAAAAGwM/2C_XknJ6Owc/s400/OpenSSL_RSA.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;pre&gt;&lt;string.h&gt;&lt;openssl rsa.h=""&gt;&lt;b style="background-color: yellow;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;/openssl&gt;&lt;/string.h&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-1614632181763309152?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/1614632181763309152/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/10/c-openssl-rsa.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1614632181763309152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1614632181763309152'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/10/c-openssl-rsa.html' title='【筆記】C# &amp; OpenSSL RSA 加/解密'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-QGk0p-JwX98/To8221l-aXI/AAAAAAAAGwI/PQYdBv4dm4A/s72-c/C%2523_RSA.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-6392089876660900964</id><published>2011-10-05T18:32:00.000-07:00</published><updated>2011-10-05T18:32:32.539-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><category scheme='http://www.blogger.com/atom/ns#' term='密碼學研究'/><title type='text'>【筆記】C# RSA 加/解密</title><content type='html'>RSA加密演算法是一種&lt;b&gt;非對稱加密演算法&lt;/b&gt;。1977年由羅納德·李維斯特（Ron &lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;R&lt;/span&gt;&lt;/b&gt;ivest）、阿迪·薩莫爾（Adi &lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;S&lt;/b&gt;&lt;/span&gt;hamir）和倫納德·阿德曼（Leonard &lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;A&lt;/span&gt;&lt;/b&gt;dleman）一起提出的。RSA 就是他們三人姓氏開頭字母拼在一起組成的。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;對極大整數做因數分解的難度決定了 RSA 演算法的可靠性。換言之，對一極大整數做因數分解愈困難，RSA 演算法愈可靠。&lt;/b&gt;假如有人找到一種快速因數分解的演算法的話，那麼用 RSA 加密的信息的可靠性就肯定會極度下降。但找到這樣的演算法的可能性是非常小的。今天只有短的RSA 鑰匙才可能被強力方式解破。到2008年為止，世界上還沒有任何可靠的攻擊 RSA 演算法的方式。只要其鑰匙的長度足夠長，用RSA加密的信息實際上是不能被解破的。但在分布式計算和量子計算機理論日趨成熟的今天，RSA加密安全性受到了挑戰。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;&lt;b&gt;//-- 產生 RSA 金鑰, 開始先用 RSA 產生金鑰 --//&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;public void RSAKey()&lt;br /&gt;{&lt;br /&gt;    if ((!File.Exists("Public.key")) || (!File.Exists("Private.key")))&lt;br /&gt;    {&lt;br /&gt;        System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();&lt;br /&gt;        xmlPrivateKey = rsa.ToXmlString(true);&lt;br /&gt;        StreamWriter fs = new StreamWriter("Private.Key");&lt;br /&gt;        fs.Write(xmlPrivateKey);&lt;br /&gt;        fs.Close();&lt;br /&gt;&lt;br /&gt;        xmlPublicKey = rsa.ToXmlString(false);&lt;br /&gt;        fs = new StreamWriter("Public.Key");&lt;br /&gt;        fs.Write(xmlPublicKey);&lt;br /&gt;        fs.Close();&lt;br /&gt;    }&lt;br /&gt;    else&lt;br /&gt;    {&lt;br /&gt;        StreamReader fs = new StreamReader("Public.Key");&lt;br /&gt;        xmlPublicKey = fs.ReadToEnd();&lt;br /&gt;        fs.Close();&lt;br /&gt;&lt;br /&gt;        fs = new StreamReader("Private.Key");&lt;br /&gt;        xmlPrivateKey = fs.ReadToEnd();&lt;br /&gt;        fs.Close();&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;b style="background-color: yellow;"&gt;//-- 檔案加密(RSA) --//&lt;/b&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;private byte[] EncryptRSA(byte[] bData)&lt;br /&gt;{&lt;br /&gt;    byte[] byteResult = null;&lt;br /&gt;    string stringResult;&lt;br /&gt;&lt;br /&gt;    System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();&lt;br /&gt;    rsa.FromXmlString(xmlPublicKey);&lt;br /&gt;    byteResult = rsa.Encrypt(bData, false);&lt;br /&gt;    stringResult = Convert.ToBase64String(byteResult);&lt;br /&gt;    //MessageBox.Show(stringResult);&lt;br /&gt;&lt;br /&gt;    return byteResult;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;&lt;b&gt;//-- 檔案解密(RSA) --//&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;private byte[] DecryptRSA(byte[] bData)&lt;br /&gt;{&lt;br /&gt;    byte[] byteResult = null;&lt;br /&gt;    string stringResult;&lt;br /&gt;&lt;br /&gt;    System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();&lt;br /&gt;    rsa.FromXmlString(xmlPrivateKey);&lt;br /&gt;&lt;br /&gt;    byteResult = rsa.Decrypt(bData, false);&lt;br /&gt;    stringResult = (new UnicodeEncoding()).GetString(byteResult);&lt;br /&gt;&lt;br /&gt;    return byteResult;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-6392089876660900964?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/6392089876660900964/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/10/c-rsa.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6392089876660900964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6392089876660900964'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/10/c-rsa.html' title='【筆記】C# RSA 加/解密'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-5025749394391628834</id><published>2011-10-04T23:28:00.000-07:00</published><updated>2011-10-04T23:32:36.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><category scheme='http://www.blogger.com/atom/ns#' term='密碼學研究'/><title type='text'>【筆記】C# DES 加/解密</title><content type='html'>DES（DES，Data Encryption Standard）是一種使用密鑰加密的塊密碼，1976年被美國聯邦政府的國家標準局確定為聯邦資料處理標準（FIPS）。因為它使用的56 bits 密鑰過短，現在已經不被視為一種安全的加密演算法。在2001年，DES 已經被 AES 所取代已經不再作為國家標準科技協會的一個標準。&lt;br /&gt;&lt;br /&gt;加密：&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: yellow; font-family: monospace; white-space: pre;"&gt;&lt;b&gt;//-- 檔案加密(DES) --//&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;private byte[] EncryptDES(byte[] bData)&lt;br /&gt;{&lt;br /&gt;    DES des = null;&lt;br /&gt;    ICryptoTransform ict = null;&lt;br /&gt;    MemoryStream ms = null;&lt;br /&gt;    CryptoStream cs = null;&lt;br /&gt;    BinaryWriter sw = null;&lt;br /&gt;    byte[] byteResult = null;&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        des = DES.Create();&lt;br /&gt;        des.Key = ASCIIEncoding.ASCII.GetBytes(Global.DESKey.Substring(0, 8));&lt;br /&gt;        des.IV = Global.DESIV;&lt;br /&gt;&lt;br /&gt;        ict = des.CreateEncryptor(des.Key, des.IV);&lt;br /&gt;        ms = new MemoryStream();&lt;br /&gt;        cs = new CryptoStream(ms, ict, CryptoStreamMode.Write);&lt;br /&gt;        sw = new BinaryWriter(cs);&lt;br /&gt;        foreach (byte b in bData)&lt;br /&gt;        {&lt;br /&gt;            sw.Write(b);&lt;br /&gt;        }&lt;br /&gt;        sw.Close();&lt;br /&gt;        cs.Close();&lt;br /&gt;        byteResult = ms.ToArray();&lt;br /&gt;        ms.Close();&lt;br /&gt;&lt;br /&gt;        return byteResult;&lt;br /&gt;    }&lt;br /&gt;    catch (Exception e)&lt;br /&gt;    {&lt;br /&gt;        throw e;&lt;br /&gt;    }&lt;br /&gt;    finally&lt;br /&gt;    {&lt;br /&gt;        if (sw != null) sw.Close();&lt;br /&gt;        if (cs != null) cs.Close();&lt;br /&gt;        if (ms != null) ms.Close();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;解密：&lt;br /&gt;&lt;pre&gt;&lt;b style="background-color: yellow;"&gt;//-- 檔案加解密(DES) --//&lt;/b&gt;&lt;/pre&gt;&lt;pre&gt;private byte[] DecryptDES(byte[] bData)&lt;br /&gt;{&lt;br /&gt;    DES des = null;&lt;br /&gt;    ICryptoTransform ict = null;&lt;br /&gt;    MemoryStream ms = null;&lt;br /&gt;    CryptoStream cs = null;&lt;br /&gt;    BinaryReader sr = null;&lt;br /&gt;    byte[] bResult = new byte[Global.iFileLength];&lt;br /&gt;&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        des = DES.Create();&lt;br /&gt;        des.Key = ASCIIEncoding.ASCII.GetBytes(Global.DESKey.Substring(0, 8));&lt;br /&gt;        des.IV = Global.DESIV;&lt;br /&gt;        ict = des.CreateDecryptor(des.Key, des.IV);&lt;br /&gt;        ms = new MemoryStream(bData);&lt;br /&gt;        cs = new CryptoStream(ms, ict, CryptoStreamMode.Read);&lt;br /&gt;        sr = new BinaryReader(cs);&lt;br /&gt;&lt;br /&gt;        int i=0;&lt;br /&gt;        byte getByte;&lt;br /&gt;        while ((getByte = sr.ReadByte())!= 0x00) &lt;br /&gt;        {&lt;br /&gt;            bResult[i++] = getByte;&lt;br /&gt;        }&lt;br /&gt;        sr.Close();&lt;br /&gt;        cs.Close();&lt;br /&gt;        ms.Close();&lt;br /&gt;        return bResult;&lt;br /&gt;    }&lt;br /&gt;    catch (Exception e)&lt;br /&gt;    {&lt;br /&gt;        throw e;&lt;br /&gt;    }&lt;br /&gt;    finally&lt;br /&gt;    {&lt;br /&gt;        if (sr != null) sr.Close();&lt;br /&gt;        if (cs != null) cs.Close();&lt;br /&gt;        if (ms != null) ms.Close();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;加/解密都是以 “Byte”的方式進行，把要加/解密的資料以 byte[] 的型態丟進來就可以了。&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-5025749394391628834?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/5025749394391628834/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/10/c-des.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5025749394391628834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5025749394391628834'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/10/c-des.html' title='【筆記】C# DES 加/解密'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-3356462975345967150</id><published>2011-05-24T02:25:00.000-07:00</published><updated>2011-10-04T23:29:31.869-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><title type='text'>【筆記】Edje -- Sample</title><content type='html'>EDJE 是&amp;nbsp;&lt;b&gt;Enlightenment Foundation Libraries (EFL)&amp;nbsp;&lt;/b&gt;的其中一個元件，使用者可以透過這個元件快速的建置介面，同時可以在不變動程式功能的情況下，快速的變更介面，直接把它想成&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;佈景主題&lt;/span&gt;&lt;/b&gt;比較容易理解。&lt;br /&gt;&lt;br /&gt;關於 EDJE ，官網提供了一個說明檔：&amp;nbsp;&lt;a href="http://svn.enlightenment.org/svn/e/trunk/DOCS/edjebook/pre-rendered/edjebook.pdf"&gt;Building Interfaces with Edge (PDF)&amp;nbsp;&lt;/a&gt;、&lt;br /&gt;裡面除了解釋什麼是 EDJE，也提供了簡單的範例檔讓使用者可以直接上手。&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;線上說明：&lt;a href="http://docs.enlightenment.org/auto/edje/"&gt;http://docs.enlightenment.org/auto/edje/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;一、首先，EDJE 也是 EFL的元件之一，必須建構在這些 EFL 的元件之上，所以必須先安裝這些元件才能安裝 EDJE。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&amp;nbsp; eet (at least 1.4.0)&lt;/li&gt;&lt;li&gt;&amp;nbsp; ecore (at least 1.0.0)&lt;/li&gt;&lt;li&gt;&amp;nbsp; ecore-evas (at least 1.0.0)&lt;/li&gt;&lt;li&gt;&amp;nbsp; ecore-file (at least 1.0.0)&lt;/li&gt;&lt;li&gt;&amp;nbsp; embryo (at least 1.0.0)&lt;/li&gt;&lt;li&gt;&amp;nbsp; evas (at least 1.0.0)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;二、EDJE 安裝完成後，在 src/bin 底下會發現&lt;span class="Apple-style-span" style="color: red;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;edje_cc&lt;/span&gt; &lt;/b&gt;這檔案的用途就是用來把 &lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;(.edc)&lt;/span&gt;&lt;/b&gt; 轉換成 &lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;(.edj) &lt;/span&gt;&lt;/b&gt;用的。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;三、接下來看看程式的部份，程式主要分成２個部份 (.edc) &amp;amp; (.c) 兩種檔案&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;span style="background-color: yellow;"&gt;&lt;b&gt;(.edc) 檔名：edje_example.edj&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;b&gt;collections&lt;/b&gt; {&lt;br /&gt;   &lt;b&gt;group&lt;/b&gt; {&lt;br /&gt;      &lt;b&gt;name: "&lt;span class="Apple-style-span" style="color: red;"&gt;my_group&lt;/span&gt;"; //這個名字和 .c 檔的內容必須相對應&lt;/b&gt;&lt;br /&gt;      &lt;b&gt;parts &lt;/b&gt;{&lt;br /&gt;         &lt;b&gt;part &lt;/b&gt;{&lt;br /&gt;            name: "background";&lt;br /&gt;            type: RECT; // plain boring rectangle&lt;br /&gt;            mouse_events: 1; // we don't need any mouse event on the background&lt;br /&gt;           &amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;            &lt;span class="Apple-style-span" style="color: red;"&gt;//設定了 default, over 兩種狀況, 不同的背景顏色&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;/span&gt;     &lt;b&gt;description &lt;/b&gt;{               &lt;span class="Apple-style-span" style="background-color: yellow;"&gt;state: "default" 0.0; // must always exist&lt;/span&gt;               &lt;span class="Apple-style-span" style="background-color: red;"&gt;&lt;b&gt;color: 255 255 255 255; // white&lt;/b&gt;&lt;/span&gt;               // define part coordinates:               rel1 { // top-left point at (0, 0) [WIDTH * 0 + 0, HEIGHT * 0 + 0]                  relative: 0.0 0.0;                  offset: 0 0;               }               rel2 { // bottom-right point at (WIDTH * 1.0 - 1, HEIGHT * 1.0 - 1)                  relative: 10.0 10.0;                  offset: -1 -1;               }            }            &lt;b&gt;description&lt;/b&gt; {               &lt;span class="Apple-style-span" style="background-color: yellow;"&gt;state: "over" 0.0; // must always exist&lt;/span&gt;               &lt;b style="background-color: red;"&gt;color: 0 0 0 0; //black &lt;/b&gt;               // define part coordinates:               &lt;b&gt;rel1 &lt;/b&gt;{ // top-left point at (0, 0) [WIDTH * 0 + 0, HEIGHT * 0 + 0]                  relative: 0.0 0.0;                  offset: 0 0;               }               &lt;b&gt;rel2 &lt;/b&gt;{ // bottom-right point at (WIDTH * 1.0 - 1, HEIGHT * 1.0 - 1)                  relative: 10.0 10.0;                  offset: -1 -1;               }            }         }         // do programs to change color on text mouse in/out (over)         &lt;b&gt;programs &lt;/b&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;            //設定了 滑鼠 in,out 對應的 default, over 兩種狀況&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;/span&gt;            &lt;b&gt;program &lt;/b&gt;{               // what triggers this program:               &lt;b style="background-color: yellow;"&gt;signal: "mouse,in";&lt;/b&gt;               source: "background";               // what this program does:               &lt;span class="Apple-style-span" style="background-color: yellow;"&gt;action: STATE_SET "&lt;b&gt;over&lt;/b&gt;" 0.0;&lt;/span&gt;               target: "background";               // do the state-set in a nice interpolation animation               // using linear time in 0.1 second               transition: LINEAR 0.1;            }            &lt;b&gt;program &lt;/b&gt;{               // what triggers this program:               &lt;b style="background-color: yellow;"&gt;signal: "mouse,out";&lt;/b&gt;               source: "background";               // what this program does:               &lt;span class="Apple-style-span" style="background-color: yellow;"&gt;action: STATE_SET "&lt;b&gt;default&lt;/b&gt;" 0.0;&lt;/span&gt;               target: "background";               // do the state-set in a nice interpolation animation               // using linear time in 0.1 second               transition: LINEAR 0.1;            }         }      }   }}&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="background-color: yellow; font-size: large;"&gt;(.c) 檔名：&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;span style="background-color: yellow;"&gt;edje_example.c&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;eina.h&gt;&lt;evas.h&gt;&lt;ecore.h&gt;&lt;ecore_evas.h&gt;&lt;edje.h&gt;&lt;eina.h&gt;&lt;evas.h&gt;&lt;ecore.h&gt;&lt;ecore_evas.h&gt;&lt;edje.h&gt;&lt;eina.h&gt;&lt;evas.h&gt;&lt;ecore.h&gt;&lt;ecore_evas.h&gt;&lt;edje.h&gt;#include &lt;eina.h&gt;&lt;br /&gt;#include &lt;evas.h&gt;&lt;br /&gt;#include &lt;ecore.h&gt;&lt;br /&gt;#include &lt;ecore_evas.h&gt;&lt;br /&gt;#include &lt;edje.h&gt;&lt;br /&gt;&lt;br /&gt;#define WIDTH 320&lt;br /&gt;#define HEIGHT 240&lt;br /&gt;&lt;br /&gt;static Evas_Object *&lt;b style="background-color: yellow;"&gt;create_my_group&lt;/b&gt;(Evas *canvas)&lt;br /&gt;{&lt;br /&gt;   Evas_Object *edje;&lt;br /&gt;&lt;br /&gt;   edje = edje_object_add(canvas);&lt;br /&gt;   if (!edje)&lt;br /&gt;     {&lt;br /&gt;    EINA_LOG_CRIT("could not create edje object!");&lt;br /&gt;    return NULL;&lt;br /&gt;     }&lt;br /&gt;&lt;/edje.h&gt;&lt;/ecore_evas.h&gt;&lt;/ecore.h&gt;&lt;/evas.h&gt;&lt;/eina.h&gt;&lt;/edje.h&gt;&lt;/ecore_evas.h&gt;&lt;/ecore.h&gt;&lt;/evas.h&gt;&lt;/eina.h&gt;&lt;/edje.h&gt;&lt;/ecore_evas.h&gt;&lt;/ecore.h&gt;&lt;/evas.h&gt;&lt;/eina.h&gt;&lt;/edje.h&gt;&lt;/ecore_evas.h&gt;&lt;/ecore.h&gt;&lt;/evas.h&gt;&lt;/eina.h&gt;&lt;/pre&gt;&lt;pre&gt;&lt;eina.h&gt;&lt;evas.h&gt;&lt;ecore.h&gt;&lt;ecore_evas.h&gt;&lt;edje.h&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;   //檔名和檔案中設定的 group 的名稱要一致&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;/span&gt;   if (!edje_object_file_set(edje, &lt;b style="background-color: yellow;"&gt;"edje_example.edj", "my_group"&lt;/b&gt;))     {    int err = edje_object_load_error_get(edje);    const char *errmsg = edje_load_error_str(err);    EINA_LOG_ERR("could not load 'my_group' from edje_example.edj: %s",             errmsg);    evas_object_del(edje);    return NULL;     }   evas_object_move(edje, 0, 0);   evas_object_resize(edje, WIDTH, HEIGHT);   evas_object_show(edje);   return edje;}&lt;/edje.h&gt;&lt;/ecore_evas.h&gt;&lt;/ecore.h&gt;&lt;/evas.h&gt;&lt;/eina.h&gt;&lt;/pre&gt;&lt;pre&gt;&lt;eina.h&gt;&lt;evas.h&gt;&lt;ecore.h&gt;&lt;ecore_evas.h&gt;&lt;edje.h&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;//長的差不多的主程式&lt;/span&gt;&lt;/b&gt;&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;int main(int argc, char *argv[])&lt;/pre&gt;&lt;/span&gt;{   Ecore_Evas *window;   Evas *canvas;   Evas_Object *edje;   eina_init();   evas_init();   ecore_init();   ecore_evas_init();   edje_init();   window = ecore_evas_new(NULL, 0, 0, WIDTH, HEIGHT, NULL);   if (!window)     {    EINA_LOG_CRIT("could not create window.");    return -1;     }   canvas = ecore_evas_get(window);   &lt;b style="background-color: yellow;"&gt;edje = create_my_group(canvas);&lt;/b&gt;   if (!edje)     return -2;   ecore_evas_show(window);   ecore_main_loop_begin();   evas_object_del(edje);   ecore_evas_free(window);   return 0;}&lt;/edje.h&gt;&lt;/ecore_evas.h&gt;&lt;/ecore.h&gt;&lt;/evas.h&gt;&lt;/eina.h&gt;&lt;/pre&gt;&lt;br /&gt;四、開始 Compiler&lt;br /&gt;Compiler 也分２部份：&lt;br /&gt;&lt;pre&gt;(1) edje_cc edje_example.edc &lt;b style="background-color: yellow;"&gt;先將 edje_example.edc 編譯成 edje_example.edj&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;(2) gcc -o edje_example edje_example.c `pkg-config --cflags --libs eina evas ecore ecore-evas edje` &lt;span class="Apple-style-span" style="background-color: yellow;"&gt;&lt;b&gt;Gcc Compiler 後會產生執行檔 &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;五、執行 edje_example 看看結果&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-HwsV8I8CZuU/Tdt4TmyzWCI/AAAAAAAAGgM/auI5diWCJ_o/s1600/01.jpg" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="166" src="http://1.bp.blogspot.com/-HwsV8I8CZuU/Tdt4TmyzWCI/AAAAAAAAGgM/auI5diWCJ_o/s400/01.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;滑鼠不在的時候是左側的白色, 在視窗時則變成黑色。在不修改原來程式的情況下, 只要修改 edc 中的&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;b style="background-color: red;"&gt;color: 0 0 0 0; //black &lt;/b&gt;&lt;/span&gt;，再重新 Compile edc 檔，就可以達成不一樣的結果。&lt;br /&gt;&lt;br /&gt;EFL 使用這個方式讓使用者不需要修改程式碼就可以讓視窗介面有截然不同的變化。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;參考資料：&lt;/div&gt;&lt;div style="text-align: left;"&gt;EDJE&amp;nbsp;&lt;a href="http://trac.enlightenment.org/e/wiki/Edje"&gt;http://trac.enlightenment.org/e/wiki/Edje&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-3356462975345967150?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/3356462975345967150/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/05/edje-sample.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3356462975345967150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3356462975345967150'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/05/edje-sample.html' title='【筆記】Edje -- Sample'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-HwsV8I8CZuU/Tdt4TmyzWCI/AAAAAAAAGgM/auI5diWCJ_o/s72-c/01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-7878557880764454026</id><published>2011-05-05T03:19:00.000-07:00</published><updated>2011-10-04T23:29:32.028-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><title type='text'>【筆記】Enlightenment Foundation Libraries (EFL)  開發環境建置</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;Enlightenment Foundation Libraries (EFL)&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;官網：&lt;a href="http://www.enlightenment.org/"&gt;http://www.enlightenment.org/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;看名字就知道這是一堆 Library 了，作用是用來管理、建置 GUI 介面（沒錯, 是類似 GTK+, QT 的東西），EFL 程式原式碼是使用 C 開發的，但是開發者可以使用下面程式語言去進行開發，不一定要用 C。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Python&lt;/li&gt;&lt;li&gt;Javascript&lt;/li&gt;&lt;li&gt;Perl&lt;/li&gt;&lt;li&gt;C++&lt;/li&gt;&lt;li&gt;Ruby&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;然後它也是跨平台的，一共支援這些平台：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;FreeBSD&lt;/li&gt;&lt;li&gt;Solaris&lt;/li&gt;&lt;li&gt;MacOS X&lt;/li&gt;&lt;li&gt;Windows (XP, Vista, 7 etc.)&lt;/li&gt;&lt;li&gt;Windows CE&lt;/li&gt;&lt;li&gt;Linux&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;這是它的架構 (下圖) &amp;nbsp;每一塊&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;黑色&lt;/span&gt;&lt;/b&gt;的部份都是獨立的 Library, 使用者可以視實際需要安裝必要的元件，但是安裝要注意&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;先後順序&lt;/span&gt;&lt;/b&gt;，否則很容易失敗：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.enlightenment.org/p/index/d/diagram-efl-simple-small.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.enlightenment.org/p/index/d/diagram-efl-simple-small.png" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;然後是安裝：網路上有一個流傳很廣的 &lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;easy_e17.sh&lt;/span&gt; &lt;/b&gt;下載這個檔案之後，直接執行就會自動進行 Library 下載安裝的動作（但是我試了很多次都沒有成功 &lt;b&gt;~~&amp;gt;"&amp;lt;~~&lt;/b&gt;）&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #073763;"&gt;(1) 下載必備的元件&amp;nbsp;autoconf,&amp;nbsp;automake,&amp;nbsp;pkg-config ... 等&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="color: #073763;"&gt;(2) 使用 SVN 安裝, 下載必備的元件&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;pre&gt;svn co http://svn.enlightenment.org/svn/e/trunk/eina&lt;br /&gt;svn co http://svn.enlightenment.org/svn/e/trunk/eet&lt;br /&gt;svn co http://svn.enlightenment.org/svn/e/trunk/evas&lt;br /&gt;svn co http://svn.enlightenment.org/svn/e/trunk/ecore&lt;br /&gt;svn co http://svn.enlightenment.org/svn/e/trunk/efreet&lt;br /&gt;svn co http://svn.enlightenment.org/svn/e/trunk/embryo&lt;br /&gt;svn co http://svn.enlightenment.org/svn/e/trunk/edje&lt;br /&gt;svn co http://svn.enlightenment.org/svn/e/trunk/e_dbus&lt;br /&gt;svn co http://svn.enlightenment.org/svn/e/trunk/elementary&lt;br /&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: #073763;"&gt;(3) 依照一樣的順序依次安裝各個元件&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;./autogen.sh&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;make&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;sudo make install&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;(4) 將EFL安裝所在目錄(&lt;span class="Apple-style-span" style="color: red;"&gt;/usr/local/lib&lt;/span&gt;) 加入&lt;span class="Apple-style-span" style="color: red;"&gt; /etc/ld.so.conf&lt;/span&gt;，並執行&lt;span class="Apple-style-span" style="color: red;"&gt;sudo ldconfig -v&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;安裝 elementary 會產生一些範例程式, 可以直接在 /usr/local/bin/ 下執行 elementary 產生的 Sample (下圖)&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-h3r8nsKD1yg/TcJ4Ut95D6I/AAAAAAAAGgE/T_R1CZx4At4/s1600/Screenshot.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-h3r8nsKD1yg/TcJ4Ut95D6I/AAAAAAAAGgE/T_R1CZx4At4/s320/Screenshot.png" width="198" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;VS Qt：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;因為之前使用的是 Qt 就直接跟 Qt 做比較,&amp;nbsp;Qt 的優點是 Nokia 提供了完整的 SDK 真的可以很簡單的安裝完成, 但是實際執行的結果, 的確可以明顯的感覺到 Enlightenment 的效能比較好（&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;很多嵌入式開發者選用的原因&lt;/span&gt;&lt;/b&gt;）。Enlightenment 也提供了 Linux 上的圖形介面, 可以順便安裝起來感覺一下它們之間的差異性。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;＊參考資料：&lt;a href="http://wiki.ubuntu-tw.org/index.php?title=HowtoInstallEnlitenment17"&gt;HowtoInstallEnlightenment17&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-7878557880764454026?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/7878557880764454026/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/05/enlightenment-foundation-libraries-efl.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7878557880764454026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7878557880764454026'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/05/enlightenment-foundation-libraries-efl.html' title='【筆記】Enlightenment Foundation Libraries (EFL)  開發環境建置'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-h3r8nsKD1yg/TcJ4Ut95D6I/AAAAAAAAGgE/T_R1CZx4At4/s72-c/Screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-2224899610137289744</id><published>2011-04-28T23:18:00.000-07:00</published><updated>2011-04-28T23:18:04.573-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='資訊安全'/><title type='text'>【筆記】撰寫安全的程式碼</title><content type='html'>在 iThome 看到一系列 【撰寫安全的程式碼】的文章，順手整理下來的內容，這系列的文章看起來是從『Web 應用程式』來看的，一開始就先強調安全程式碼有多重要；討論的內容依序是&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;密碼的認證、授權&lt;/b&gt;：這裡強調幾個部份密碼輸入的時候要防止側錄（例如：網路ATM軟體使用的動態鍵盤）、資料傳輸要防止資料被竊取（使用 SSL, VPN …等方式保護要傳送的資料）、Server端的密碼不能直接以明碼方式儲取，必須使用 Hash 方式（MD5, SHA-1…等）加密，以防Server資料被竊取時密碼外洩。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;緩衝區溢位&lt;/b&gt;：緩衝區溢位是程式撰寫時經常會犯的錯誤，常發生在 strcpy, printf 這類的輸入字串的函數，在這些函數中塞入過長的字串造成緩衝區溢位，會造成不可預期的後果。&lt;br /&gt;＊不是所有程式語言都有這個問題, java 在這部份做了很多檢查問題相對於 C/C++ 就少許多。 C/C++ 新的 Compiler 也有對部份緩衝區溢位的部份做了檢查&amp;amp;限制。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;SQL Injection&lt;/b&gt;：SQL Injection 主要的攻擊對像是使用到 SQL 的應用程式（例如：網站中常用的資料查詢）要避免這種情況必須防止直接回傳錯誤的 SQL 訊息避免有心人士測出SQL 的正確 Command &amp;amp; 另外對於使用者輸入的資料也必須先做過濾檢查。&lt;br /&gt;＊處理方法：確實管制系統錯誤資訊的出現位置,&amp;nbsp;善用防火牆來阻擋非必要的連線,&amp;nbsp;關閉系統預設的某些Stored Procedure。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;資料庫的安全性&lt;/b&gt;：儘量避免直接輸入 SQL Command, 確認要輸入的資料內容由 SQL 使用會較安全。&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;通用的原則&lt;/b&gt;：絕不相信使用者所提供的資料。&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;為什麼找不到第８回的內容？？？？&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;作者：王建興．連結：&lt;a href="http://www.ithome.com.tw/"&gt;iThome&lt;/a&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=65942"&gt;提升程式碼安全的重要性．2011-02-18&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=66098"&gt;如何強化使用者密碼管理的安全性．2011-03-02&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=66229"&gt;史上最惡劣的程式瑕疵安全性問題．2011-03-04&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=66384"&gt;威脅資料存取的SQL Injection．2011-03-15&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=66530"&gt;提升資料庫安全性的基本措施．2011-03-23&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=66720"&gt;如何徹底杜絕資料隱碼攻擊．2011-03-30&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=66779"&gt;提升資料庫安全性的基本措施．2011-04-07&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ithome.com.tw/itadm/article.php?c=67077"&gt;掌握程式開發共通的安全性原則．2011-04-21&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-2224899610137289744?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/2224899610137289744/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/04/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2224899610137289744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2224899610137289744'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/04/blog-post.html' title='【筆記】撰寫安全的程式碼'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-6389137045665192016</id><published>2011-04-15T01:05:00.000-07:00</published><updated>2011-04-15T01:05:17.220-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>【筆記】ASP.NET 產生亂數密碼</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;使用： string NewPassword = CreatePassword(Length);&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;＊Length：卻取得的密碼長度, 回傳一組亂數產生的密碼。&lt;/div&gt;＊密碼的組成份子需要再複雜一點可以修改 &lt;b&gt;pattern&lt;/b&gt; 的內容。&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;private string CreatePassword(int Length)&lt;br /&gt;    {&lt;br /&gt;        string newPassword = "";&lt;br /&gt;        string pattern = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";&lt;br /&gt;        Random r = new Random(DateTime.Now.Millisecond);&lt;br /&gt;        for (int i = 0; i &amp;lt; Length; i++)&lt;br /&gt;        {&lt;br /&gt;            newPassword += pattern[r.Next(0, pattern.Length)];&lt;br /&gt;        }&lt;br /&gt;        return newPassword;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-6389137045665192016?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/6389137045665192016/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/04/aspnet.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6389137045665192016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6389137045665192016'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/04/aspnet.html' title='【筆記】ASP.NET 產生亂數密碼'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-8110371390149430682</id><published>2011-03-27T19:26:00.000-07:00</published><updated>2011-03-27T19:26:16.573-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>【筆記】ASP.NET 資料庫連結 (Insert/Update, Delete, Search Data)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;最近的一直在重覆這些動作, 直接整理成 Function, 塞入 Command 就可以用比較方便&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;(1) Insert/Update&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;private void DB_InsertUpdateData(string DB, string Command)&lt;br /&gt;{&lt;br /&gt;    SqlConnection conn;&lt;br /&gt;    SqlCommand com = new SqlCommand();&lt;br /&gt;    SqlTransaction transaction;&lt;br /&gt;&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        conn = new SqlConnection(get_connect_string(DB));&lt;br /&gt;        conn.Open();&lt;br /&gt;        com.Connection = conn;&lt;br /&gt;        transaction = conn.BeginTransaction();&lt;br /&gt;        com.CommandText = Command;&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            com.Transaction = transaction;&lt;br /&gt;            com.ExecuteNonQuery();&lt;br /&gt;            transaction.Commit();&lt;br /&gt;        }&lt;br /&gt;        catch&lt;br /&gt;        {&lt;br /&gt;            com.Cancel();&lt;br /&gt;            transaction.Rollback();&lt;br /&gt;        }&lt;br /&gt;        conn.Close();&lt;br /&gt;        conn.Dispose();&lt;br /&gt;    }&lt;br /&gt;    catch&lt;br /&gt;    {&lt;br /&gt;        com.Cancel();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;(2)Delete &lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;pre&gt;private void DB_DeleteData(string DB, string Command)&lt;br /&gt;{&lt;br /&gt;    SqlConnection conn;&lt;br /&gt;    SqlCommand com = new SqlCommand();&lt;br /&gt;&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        conn = new SqlConnection(get_connect_string(DB));&lt;br /&gt;        conn.Open();&lt;br /&gt;&lt;br /&gt;        com.Connection = conn;&lt;br /&gt;        CommandText = Command;&lt;br /&gt;        com.CommandText = CommandText;&lt;br /&gt;        com.ExecuteNonQuery();&lt;br /&gt;&lt;br /&gt;        conn.Close();&lt;br /&gt;        conn.Dispose();&lt;br /&gt;    }&lt;br /&gt;    catch&lt;br /&gt;    {&lt;br /&gt;        com.Cancel();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;strong&gt;&lt;span style="color: red;"&gt;(3)Search &lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;pre&gt;private void DB_SearchData(string DB,string SearchCommand, DataSet table)&lt;br /&gt;{&lt;br /&gt;    SqlConnection conn;&lt;br /&gt;    SqlCommand com = new SqlCommand();&lt;br /&gt;    SqlDataAdapter SqlAdapter = new SqlDataAdapter();&lt;br /&gt;&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;        conn = new SqlConnection(get_connect_string(DB));&lt;br /&gt;        conn.Open();&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            com.Connection = this.conn;&lt;br /&gt;            com.CommandText = SearchCommand;&lt;br /&gt;            SqlAdapter.SelectCommand = com;&lt;br /&gt;            table.Locale = System.Globalization.CultureInfo.InvariantCulture;&lt;br /&gt;            SqlAdapter.Fill(table);&lt;br /&gt;        }&lt;br /&gt;        catch&lt;br /&gt;        {&lt;br /&gt;            com.Cancel();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    finally&lt;br /&gt;    {&lt;br /&gt;        com.Cancel();&lt;br /&gt;        conn.Close();&lt;br /&gt;        conn.Dispose();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-8110371390149430682?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/8110371390149430682/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/03/aspnet-insertupdate-delete-search-data.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8110371390149430682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8110371390149430682'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/03/aspnet-insertupdate-delete-search-data.html' title='【筆記】ASP.NET 資料庫連結 (Insert/Update, Delete, Search Data)'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-7901867344382434184</id><published>2011-03-18T01:24:00.000-07:00</published><updated>2011-03-18T01:24:22.316-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>【筆記】ASP.NET 使用 MD5 將密碼加密</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-SPkqcbYyczk/TYMUZ8JmLeI/AAAAAAAAGOs/EA_VYPGqUaM/s1600/01.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="172" r6="true" src="https://lh5.googleusercontent.com/-SPkqcbYyczk/TYMUZ8JmLeI/AAAAAAAAGOs/EA_VYPGqUaM/s320/01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;寫一段 ASP.NET 有提供 MD5 的 Function , 將傳入的字串轉成 MD5 格式&lt;/div&gt;&lt;pre&gt;private string ChangeToMD5(string str)&lt;br /&gt;    {&lt;br /&gt;        str = &lt;strong&gt;&lt;span style="color: red;"&gt;System.Web.Security.FormsAuthentication.&lt;br /&gt;           HashPasswordForStoringInConfigFile&lt;/span&gt;&lt;/strong&gt;(str, "&lt;strong&gt;&lt;span style="color: red;"&gt;MD5&lt;/span&gt;&lt;/strong&gt;").ToLower();&lt;br /&gt;        return str;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;登入驗證時,直接套用&lt;/div&gt;&lt;pre&gt;Login_Authenticated(&lt;br /&gt;      ((System.Web.UI.WebControls.Login)sender).UserName,            &lt;br /&gt;      ChangeToMD5(((System.Web.UI.WebControls.Login)sender).Password)&lt;br /&gt;      );&lt;br /&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;資料庫中, 密碼以 MD5 加密之後的樣子... &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-T1-6jYJSwNg/TYMWPSILvXI/AAAAAAAAGOw/pb4WRdUE8GY/s1600/02.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="82" r6="true" src="https://lh4.googleusercontent.com/-T1-6jYJSwNg/TYMWPSILvXI/AAAAAAAAGOw/pb4WRdUE8GY/s400/02.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;參考資料：&lt;a href="http://tgw1029.blogspot.com/2010/02/aspnetmd5.html"&gt;http://tgw1029.blogspot.com/2010/02/aspnetmd5.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-7901867344382434184?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/7901867344382434184/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/03/aspnet-md5.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7901867344382434184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7901867344382434184'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/03/aspnet-md5.html' title='【筆記】ASP.NET 使用 MD5 將密碼加密'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-SPkqcbYyczk/TYMUZ8JmLeI/AAAAAAAAGOs/EA_VYPGqUaM/s72-c/01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-3112562372984673644</id><published>2011-03-17T00:38:00.000-07:00</published><updated>2011-03-17T00:38:41.764-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>【筆記】ASP.NET GridView使用</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;GridView 使用：GrideView可以在 ASP.NET 中全部完成（和資料庫聯結, 回傳搜尋的結果, 完全不需要寫程式就可以達到效果。如果因為其他原因還是要寫一下使用方法如下：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(1) 開啟 ASP.NET 畫面編輯, 從&lt;strong&gt;&lt;span style="color: blue;"&gt;工具箱&lt;/span&gt; &lt;span style="color: red;"&gt;資料→GridView&lt;/span&gt;&lt;/strong&gt; 拉到頁面上, 如下圖&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-s6zAr1pW7p0/TYG4v992pfI/AAAAAAAAGOg/2LIJCQ7Gc60/s1600/02.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="85" r6="true" src="https://lh3.googleusercontent.com/-s6zAr1pW7p0/TYG4v992pfI/AAAAAAAAGOg/2LIJCQ7Gc60/s400/02.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(2) 資料相關的程式，將資料存入 DataSet&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-rtc6Z5CDLcQ/TYG4wwGd_ZI/AAAAAAAAGOk/DHkLrIxnl9k/s1600/03.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="325" r6="true" src="https://lh6.googleusercontent.com/-rtc6Z5CDLcQ/TYG4wwGd_ZI/AAAAAAAAGOk/DHkLrIxnl9k/s400/03.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(3) 在頁面對應的程式中, 將 DataSet 填進GridView&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-2T2XSSnIooI/TYG4x-Rp6vI/AAAAAAAAGOo/8cxGC5F6xNY/s1600/04.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="163" r6="true" src="https://lh6.googleusercontent.com/-2T2XSSnIooI/TYG4x-Rp6vI/AAAAAAAAGOo/8cxGC5F6xNY/s400/04.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-3112562372984673644?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/3112562372984673644/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/03/aspnet-gridview.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3112562372984673644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3112562372984673644'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/03/aspnet-gridview.html' title='【筆記】ASP.NET GridView使用'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-s6zAr1pW7p0/TYG4v992pfI/AAAAAAAAGOg/2LIJCQ7Gc60/s72-c/02.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-9182683053723096367</id><published>2011-02-23T23:35:00.000-08:00</published><updated>2011-02-23T23:35:57.103-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【筆記】Android 使用第三方函式庫...</title><content type='html'>&lt;b&gt;有時候會遇到需要第三方函式庫的情況,&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;在 NDK 裡面直接修改 Android.mk 把要的&lt;/b&gt;&lt;span class="Apple-style-span" style="color: #6aa84f;"&gt;&lt;b&gt; xxx.so &lt;/b&gt;&lt;/span&gt;&lt;b&gt;寫進去。&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Android.mk&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;LOCAL_PATH := $(call my-dir)&lt;br /&gt;&lt;br /&gt;include $(CLEAR_VARS)&lt;br /&gt;LOCAL_MODULE    := health-module&lt;br /&gt;LOCAL_SRC_FILES := health-module.c&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;LOCAL_PREBUILT_LIBS&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span class="Apple-style-span" style="color: #6aa84f;"&gt;:=\&lt;br /&gt;        libHCAAPI       \&lt;br /&gt;        libHCAPKCS11&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;include $(&lt;/span&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;BUILD_MULTI_PREBUILT&lt;/span&gt;&lt;/b&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;)&lt;/span&gt;&lt;br /&gt;include $(BUILD_SHARED_LIBRARY)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-9182683053723096367?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/9182683053723096367/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/02/android.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/9182683053723096367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/9182683053723096367'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/02/android.html' title='【筆記】Android 使用第三方函式庫...'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-5523373039280721552</id><published>2011-02-08T00:52:00.000-08:00</published><updated>2011-02-08T00:52:55.776-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【筆記】Hello JNI !!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;除了SDK, Android 提供了另一個開發工具NDK (Native Development Kit) &lt;/div&gt;下載網址：&lt;a href="http://developer.android.com/sdk/ndk/index.html"&gt;http://developer.android.com/sdk/ndk/index.html&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TVD8xcrNgOI/AAAAAAAAGGQ/JERy1HFkvpM/s1600/01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="128" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TVD8xcrNgOI/AAAAAAAAGGQ/JERy1HFkvpM/s400/01.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;NDK是一個完整的套件, 下載後直接解壓縮就可以使用。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TVD8x3Nx6zI/AAAAAAAAGGU/qYcFcRecg0o/s1600/02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="45" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TVD8x3Nx6zI/AAAAAAAAGGU/qYcFcRecg0o/s400/02.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;NDK 裡面提供了一個 samples 的目錄，直接以 sample 的目錄下的 HelloJni做測試。目錄下含有這些目錄以及&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;AndroidManifest.xml&lt;/span&gt;&lt;/b&gt;。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TVD8yalqFnI/AAAAAAAAGGc/Np5aOPqHtHo/s1600/03-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="22" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TVD8yalqFnI/AAAAAAAAGGc/Np5aOPqHtHo/s400/03-2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;主要的程式放在 jni 的目錄底下，內含 &lt;span class="Apple-style-span" style="color: red; font-weight: bold;"&gt;Android.mk&lt;/span&gt;, &lt;span class="Apple-style-span" style="color: red; font-weight: bold;"&gt;hello-jni.c&lt;/span&gt;&lt;span class="Apple-style-span"&gt;; Android.mk 裡面像一般的 makefile, hello-jni.c 裡面是主要的程式。&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TVD82J3HKiI/AAAAAAAAGHA/lYB7v6EneY4/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="27" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TVD82J3HKiI/AAAAAAAAGHA/lYB7v6EneY4/s400/12.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;hello-jni.c 程式內容&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TVD82YTCrfI/AAAAAAAAGHE/Rynu7_DAQCg/s1600/13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="146" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TVD82YTCrfI/AAAAAAAAGHE/Rynu7_DAQCg/s320/13.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;編譯 hello-jni &lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;../ndk-build -C hello-jni&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TVD8yI6tmlI/AAAAAAAAGGY/dLE2cgUJvw0/s1600/03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="110" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TVD8yI6tmlI/AAAAAAAAGGY/dLE2cgUJvw0/s400/03.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;編譯完成後, 開啓 Eclipse&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TVD8y-vsy3I/AAAAAAAAGGg/5xuoehgdFFU/s1600/04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="371" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TVD8y-vsy3I/AAAAAAAAGGg/5xuoehgdFFU/s400/04.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;建立 Android 專案, 將專案導入&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TVD8zQ_PDUI/AAAAAAAAGGk/VcXVxk3Bbrs/s1600/05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TVD8zQ_PDUI/AAAAAAAAGGk/VcXVxk3Bbrs/s400/05.png" width="343" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;導入的專案內容&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TVD80Ih1abI/AAAAAAAAGGo/wxJcA_BLaJM/s1600/06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TVD80Ih1abI/AAAAAAAAGGo/wxJcA_BLaJM/s400/06.png" width="321" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;調整 &lt;b&gt;Run Configurations&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TVD80W6fgKI/AAAAAAAAGGs/_JLUxbwTZJY/s1600/07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="236" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TVD80W6fgKI/AAAAAAAAGGs/_JLUxbwTZJY/s400/07.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;設定專案名稱, 執行的動作&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TVD80rsTlMI/AAAAAAAAGGw/sEmU6uiwtZY/s1600/08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="321" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TVD80rsTlMI/AAAAAAAAGGw/sEmU6uiwtZY/s400/08.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;選定 Android 的版本&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TVD809zw0dI/AAAAAAAAGG0/PjijRcnQZi0/s1600/09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="322" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TVD809zw0dI/AAAAAAAAGG0/PjijRcnQZi0/s400/09.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;執行&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TVD81TBjEZI/AAAAAAAAGG4/tgjNijjSWzA/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="316" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TVD81TBjEZI/AAAAAAAAGG4/tgjNijjSWzA/s400/10.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;執行過後專案目錄 bin 底下會產生 apk檔&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TVD816tl3XI/AAAAAAAAGG8/MO596C8o75g/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="25" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TVD816tl3XI/AAAAAAAAGG8/MO596C8o75g/s400/11.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;得到的 apk 檔，可以安裝至 Android平台執行。NDK提供了對 Java 不夠熟悉的使用者另一個應用程式的開發環境，透過很簡便的方式導入 C/C++ Library ，做開發使用。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-5523373039280721552?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/5523373039280721552/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/02/hello-jni_08.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5523373039280721552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5523373039280721552'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/02/hello-jni_08.html' title='【筆記】Hello JNI !!'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oF_vbQi9p8w/TVD8xcrNgOI/AAAAAAAAGGQ/JERy1HFkvpM/s72-c/01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-299659070938821032</id><published>2011-01-24T23:41:00.000-08:00</published><updated>2011-01-24T23:44:30.939-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【筆記】Hello Android !!</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;第一個 Android 的程式, 依照寫程式的慣例,&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;所以就直接叫 HelloAndroid ^^;;;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(1) 開啟新專案&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt; File → New → Android Project&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TT568F3kGTI/AAAAAAAAGFY/Rtxvp-W1WM8/s1600/01.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TT568F3kGTI/AAAAAAAAGFY/Rtxvp-W1WM8/s400/01.png" width="356" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(2) 開啟新專案:&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;　1. 填入專案名稱&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;　2. 選擇適用的 Android 版本&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TT568e9fw1I/AAAAAAAAGFc/OKAsKyL1NLU/s1600/02.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TT568e9fw1I/AAAAAAAAGFc/OKAsKyL1NLU/s400/02.png" width="337" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(2) 開啟新專案 &lt;/div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;　3. 填入 Application Name&lt;br /&gt;4.填入 package name&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #674ea7;"&gt;　5.填入 SDK 最低適用版本 → 小心填寫&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TT5684XEHyI/AAAAAAAAGFg/2O5A7fSi0gw/s1600/03.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TT5684XEHyI/AAAAAAAAGFg/2O5A7fSi0gw/s400/03.png" width="340" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;(3) 開始寫程式, 專案開好之後所有的東西都準備齊全了,&amp;nbsp;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;連 Source Code 也有一部份了&lt;/b&gt;&lt;b&gt;直接將程式寫入 onCreate 之中&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TT569w0KwpI/AAAAAAAAGFk/FksL2IM386k/s1600/04.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="185" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TT569w0KwpI/AAAAAAAAGFk/FksL2IM386k/s400/04.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(4) 改寫一下程式, 讓畫面 show 出 &lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;Hello Android !!&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TT56-HwFCbI/AAAAAAAAGFo/GjETgDDxn1g/s1600/05.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="223" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TT56-HwFCbI/AAAAAAAAGFo/GjETgDDxn1g/s400/05.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(5) 修改 &lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;Run Configurations&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TT56-r9_YYI/AAAAAAAAGFs/wPx7trUpTPQ/s1600/06.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TT56-r9_YYI/AAAAAAAAGFs/wPx7trUpTPQ/s400/06.png" width="391" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;(6) Launch Action: &lt;span class="Apple-style-span" style="color: red;"&gt;選擇執行新程式的 package&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TT56_C9ClJI/AAAAAAAAGFw/EE9p4aSI_zs/s1600/07.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="321" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TT56_C9ClJI/AAAAAAAAGFw/EE9p4aSI_zs/s400/07.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(7) &lt;b&gt;執行程式, 模擬畫面出現 Hello Android!!&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TT56_ShJxpI/AAAAAAAAGF0/u3GCFb6LGiE/s1600/08.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TT56_ShJxpI/AAAAAAAAGF0/u3GCFb6LGiE/s400/08.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;接下來就是 Android 程式開發的問題了 ^^y&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-299659070938821032?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/299659070938821032/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2011/01/hello-android.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/299659070938821032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/299659070938821032'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2011/01/hello-android.html' title='【筆記】Hello Android !!'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oF_vbQi9p8w/TT568F3kGTI/AAAAAAAAGFY/Rtxvp-W1WM8/s72-c/01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-3689341060956372205</id><published>2010-12-28T00:38:00.000-08:00</published><updated>2011-01-24T23:02:58.995-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具測試'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>【筆記】Android開發平台建置 (Ubuntu 10.04 + Android 2.3)</title><content type='html'>要建置 Android 的工作環境，必須先有這些東西：&lt;br /&gt;&lt;ol&gt;&lt;li&gt; &lt;b&gt;JDK,Java Development Kit&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Eclipse&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;ADT Plugin for Eclipse&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Android SDK&lt;/b&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(01) JDK, &lt;b&gt;直接從 &lt;span style="color: red;"&gt;Ubuntu 軟體中心&lt;/span&gt;選用了 OpenJDK來用。&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZU_EyY0I/AAAAAAAAGB4/EpvUQ467doE/s1600/01_OpenJDK.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZU_EyY0I/AAAAAAAAGB4/EpvUQ467doE/s400/01_OpenJDK.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(02) Eclipse, 直接用&lt;b style="background-color: white; color: red;"&gt;Ubuntu 軟體中心&lt;/b&gt;提供的 eclipse&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZVWIrCPI/AAAAAAAAGB8/eS4uwKKS3lw/s1600/02_Eclipse.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZVWIrCPI/AAAAAAAAGB8/eS4uwKKS3lw/s400/02_Eclipse.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(03) 打開後，長的不太一樣，所以又用&lt;b style="color: red;"&gt; apt-get install eclipse &lt;/b&gt;裝到最新&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZV4VLw_I/AAAAAAAAGCA/LGUrBT-xqKU/s1600/03_Update_Eclipse.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZV4VLw_I/AAAAAAAAGCA/LGUrBT-xqKU/s400/03_Update_Eclipse.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(04) 開啟 eclipse &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZWdO5voI/AAAAAAAAGCE/QxE8mUK48xY/s1600/04_Open_Eclipse.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="206" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZWdO5voI/AAAAAAAAGCE/QxE8mUK48xY/s400/04_Open_Eclipse.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(05) 從 &lt;b style="color: red;"&gt;Help → Install New Software &lt;/b&gt;安裝 &lt;b style="color: red;"&gt;ADT &lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRmZW-orqyI/AAAAAAAAGCI/K8ifhhNssxU/s1600/05_Install_ADT.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="195" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRmZW-orqyI/AAAAAAAAGCI/K8ifhhNssxU/s400/05_Install_ADT.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(06) 輸下載 ADT 的網址 &lt;a href="https://dl-ssl.google.com/android/eclipse/"&gt;&lt;b style="color: red;"&gt;https://dl-ssl.google.com/android/eclipse/&lt;/b&gt;&lt;/a&gt; 輸入後按下 &lt;b style="color: red;"&gt;Add &lt;/b&gt;新增下載來源。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZXFf43KI/AAAAAAAAGCM/r9DJ1ql0eKA/s1600/06_install_ADT.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="367" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZXFf43KI/AAAAAAAAGCM/r9DJ1ql0eKA/s400/06_install_ADT.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(07) 選擇 ADT, 勾選所有內容開始下載&amp;amp;安裝 ADT&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZXlB85UI/AAAAAAAAGCQ/WqCbziFs38Y/s1600/07_install_ADT.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="368" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZXlB85UI/AAAAAAAAGCQ/WqCbziFs38Y/s400/07_install_ADT.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(08) 下載 &lt;b&gt;Android SDK&lt;/b&gt; &lt;a href="http://developer.android.com/sdk/index.html"&gt;http://developer.android.com/sdk/index.html&lt;/a&gt; ，這裡的平台是 Ubuntu 10.04 所以直接下載 Linux 版本。下載完成後找個喜歡的地方解壓縮。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZYAyN1qI/AAAAAAAAGCU/x69qKrEfdpA/s1600/08_Android_SDK.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="145" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZYAyN1qI/AAAAAAAAGCU/x69qKrEfdpA/s400/08_Android_SDK.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(09) 回到 Eclipse 掛載 Android SDK &lt;b&gt;選擇 &lt;span style="color: red;"&gt;Window → Preferences&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRmfEYs2YFI/AAAAAAAAGDI/FW8QFDOd18g/s1600/21.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRmfEYs2YFI/AAAAAAAAGDI/FW8QFDOd18g/s400/21.jpg" width="255" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(10) &lt;b&gt;選擇 &lt;span style="color: red;"&gt;Android &lt;/span&gt;&lt;/b&gt;&lt;span style="color: red;"&gt;&lt;span style="color: black;"&gt;使用 Browse 指向剛 Android SDK 解壓縮的目錄&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: red;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmfE-iSo1I/AAAAAAAAGDM/hcI5_4IYmms/s1600/22.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="342" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmfE-iSo1I/AAAAAAAAGDM/hcI5_4IYmms/s400/22.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(11) 建立 Android 模擬器，回到 Eclipse 掛載 Android SDK &lt;b&gt;選擇 &lt;span style="color: red;"&gt;Window → Android SDK and AVD Manager&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRmZYoHV1II/AAAAAAAAGCY/Oi5-VF8Xwt4/s1600/09_AndroidSDK.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&amp;nbsp;&lt;img border="0" height="266" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRmZYoHV1II/AAAAAAAAGCY/Oi5-VF8Xwt4/s400/09_AndroidSDK.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(12) 選定 &lt;b&gt;Virtual devices&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZZIX7fFI/AAAAAAAAGCg/qudbIqB8BHU/s1600/11_Android_E.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZZIX7fFI/AAAAAAAAGCg/qudbIqB8BHU/s400/11_Android_E.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(13) 輸入 Virtual Device 的名稱 &amp;amp; &lt;b&gt;版本&lt;/b&gt; &amp;amp; 各項資料（EX:要支援的Device...）&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRmZZoBlrqI/AAAAAAAAGCk/7i-NiQAOppw/s1600/12_AndroidVD.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRmZZoBlrqI/AAAAAAAAGCk/7i-NiQAOppw/s400/12_AndroidVD.jpg" width="381" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(14) 建好了，試試看旁邊的&lt;b style="color: red;"&gt; Start &lt;/b&gt;按下去&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZZxT_w9I/AAAAAAAAGCo/uzoZfsI3RdI/s1600/13_AndroidVD.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZZxT_w9I/AAAAAAAAGCo/uzoZfsI3RdI/s400/13_AndroidVD.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(15) 啟動&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZaYBZxoI/AAAAAAAAGCs/ECImIm4ARkU/s1600/14_AndroidVD.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZaYBZxoI/AAAAAAAAGCs/ECImIm4ARkU/s400/14_AndroidVD.jpg" width="308" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(16) 模擬器執行的結果&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZaumIbLI/AAAAAAAAGCw/bqTAzl7mSrE/s1600/15_AndroidVD.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="281" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRmZaumIbLI/AAAAAAAAGCw/bqTAzl7mSrE/s400/15_AndroidVD.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(17) 接著開啟 Android 新專案， &lt;b style="color: red;"&gt;New → Android Project&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRmZa3QsAII/AAAAAAAAGC0/tN4lAxrg_F4/s1600/16_AndroidProject.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRmZa3QsAII/AAAAAAAAGC0/tN4lAxrg_F4/s400/16_AndroidProject.jpg" width="392" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(18) 輸入 Android Project 名稱，支援的版本…等資訊&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRmZbe8eD8I/AAAAAAAAGC4/mlR-KTvD_xI/s1600/17_AndroidProject.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRmZbe8eD8I/AAAAAAAAGC4/mlR-KTvD_xI/s400/17_AndroidProject.jpg" width="338" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(19) 不知道誰發明的？第一個專案一定要 say hello XD；選定 Android 2.3 version 9 的版本，&lt;b style="color: red;"&gt;下面的 Min SDK Version 要輸入一樣的值 (9)&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZb2DHMLI/AAAAAAAAGC8/StqEHWT1C2U/s1600/18_AndroidProject.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZb2DHMLI/AAAAAAAAGC8/StqEHWT1C2U/s400/18_AndroidProject.jpg" width="338" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(20) 專案開好了，可以開始寫程式了....&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRmZcPBoAbI/AAAAAAAAGDA/K0W5_zDz6fg/s1600/19_Android.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRmZcPBoAbI/AAAAAAAAGDA/K0W5_zDz6fg/s400/19_Android.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(21) 空專案執行的樣子...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRmZcR2o6QI/AAAAAAAAGDE/jp_vKx0QNQU/s1600/20.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="285" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRmZcR2o6QI/AAAAAAAAGDE/jp_vKx0QNQU/s400/20.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;接下來的工作就是寫程式了，可是對 java 不熟，書也還沒買 XD&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;＊ 參考連結：&lt;/div&gt;(1) Gasolin's Android Space 蓋索林的 Android 空間：&lt;a href="http://sites.google.com/site/gasodroid/%20"&gt;http://sites.google.com/site/gasodroid/ &lt;/a&gt;&lt;br /&gt;(2) 孫傳雄談科技 - Android 手機程式開發教學：&lt;a href="http://blog.chinatimes.com/tomsun/"&gt;http://blog.chinatimes.com/tomsun/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-3689341060956372205?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/3689341060956372205/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/12/android-ubuntu-1004-android-23.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3689341060956372205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3689341060956372205'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/12/android-ubuntu-1004-android-23.html' title='【筆記】Android開發平台建置 (Ubuntu 10.04 + Android 2.3)'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oF_vbQi9p8w/TRmZU_EyY0I/AAAAAAAAGB4/EpvUQ467doE/s72-c/01_OpenJDK.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-1362250460085472202</id><published>2010-12-26T22:56:00.000-08:00</published><updated>2010-12-26T22:56:33.869-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具測試'/><title type='text'>【遊戲】Chrome OS 試玩</title><content type='html'>最近一直看到裝載 chrome os 的小筆電上市的新聞，今天剛好有時間就試玩一下這個系統。&lt;br /&gt;&lt;br /&gt;首先介紹, chrome os 是什麼東西？這個問題看 google chrome 在 youtube上放了一小段不錯的影片看完，應該可以對chrome有完整的概念。&lt;br /&gt;&lt;br /&gt;&lt;object height="385" width="640"&gt;&lt;param name="movie" value="http://www.youtube.com/v/0QRO3gKj3qw?fs=1&amp;amp;hl=zh_TW"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/0QRO3gKj3qw?fs=1&amp;amp;hl=zh_TW" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;除了這段很簡潔明瞭的影片想多了解，還有一堆影片&lt;br /&gt;Google chrome：&lt;a href="http://www.youtube.com/user/googlechrome"&gt;http://www.youtube.com/user/googlechrome&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(1)下載在vmware使用的img檔案：&lt;a href="http://chromeos.hexxeh.net/"&gt;http://chromeos.hexxeh.net/&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;(2)打開 vmare, 開啟 chrome OS&lt;br /&gt;&lt;br /&gt;(3)登入畫面, &lt;b style="color: red;"&gt;直接輸入自己的 gmail 帳號/密碼&lt;/b&gt;。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRgzHw1_LxI/AAAAAAAAGBM/VcCOQ7oMs3o/s1600/ChromOS.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRgzHw1_LxI/AAAAAAAAGBM/VcCOQ7oMs3o/s400/ChromOS.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(4) 看一下 about, 這個 OS 的正式名稱是&lt;b style="color: red;"&gt; Chromium&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRgzIa22LaI/AAAAAAAAGBQ/wTvM2akLao0/s1600/ChromOS_02.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TRgzIa22LaI/AAAAAAAAGBQ/wTvM2akLao0/s400/ChromOS_02.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(5) &lt;b style="color: black;"&gt;&lt;span style="color: red;"&gt;左上方的 logo &lt;/span&gt;點下去可以看到一堆 Chrome OS 提供的服務&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRgzI_HiwbI/AAAAAAAAGBU/PkqGTHXd3v8/s1600/ChromOS_03.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRgzI_HiwbI/AAAAAAAAGBU/PkqGTHXd3v8/s400/ChromOS_03.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(6) 網路不通時畫面也是沒辨法多做什麼事情的。&lt;b style="color: red;"&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRgzJLp0kcI/AAAAAAAAGBY/gIZg1PYEhEo/s1600/ChromOS_04.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TRgzJLp0kcI/AAAAAAAAGBY/gIZg1PYEhEo/s400/ChromOS_04.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(7) 角落有一些網路連線設定的項目。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRgzJrXZSAI/AAAAAAAAGBc/hGMhXy-otsI/s1600/ChromOS_05.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRgzJrXZSAI/AAAAAAAAGBc/hGMhXy-otsI/s400/ChromOS_05.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(8) 可以設定的內容包括這個，也可以下載檔案（紅框部分，選定下載的目錄位置）。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRgzJ-0YxmI/AAAAAAAAGBg/yKLTJ7OFNg4/s1600/ChromOS_06.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRgzJ-0YxmI/AAAAAAAAGBg/yKLTJ7OFNg4/s400/ChromOS_06.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(9) 離開太久的時候，一樣會鎖定螢幕。&lt;b style="color: red;"&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRgzKu3xZ8I/AAAAAAAAGBk/UFPTr8hz4pU/s1600/ChromOS_07.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRgzKu3xZ8I/AAAAAAAAGBk/UFPTr8hz4pU/s400/ChromOS_07.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(10)目前記憶體使用狀態。&lt;b style="color: red;"&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRgzK1EodoI/AAAAAAAAGBo/Usn7eSiqhMY/s1600/ChromOS_08.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRgzK1EodoI/AAAAAAAAGBo/Usn7eSiqhMY/s400/ChromOS_08.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(11) 看一下檔案內容，看到這個內容應該不會懷疑他不是 Linux吧&lt;b style="color: red;"&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRgzLT00z_I/AAAAAAAAGBs/BenjCbDOi7A/s1600/ChromOS_09.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TRgzLT00z_I/AAAAAAAAGBs/BenjCbDOi7A/s400/ChromOS_09.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(12) 既然是 Linux 就直接用按鍵呼喚終端機吧... &lt;b style="color: red;"&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRgzLsfP43I/AAAAAAAAGBw/oEUEPkHjvGE/s1600/ChromOS_10.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TRgzLsfP43I/AAAAAAAAGBw/oEUEPkHjvGE/s400/ChromOS_10.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;最後雖然是試玩也要寫一下結論，直接抓了 img 在 vmware 下看效果，跑起來的結果是“&lt;b style="color: red;"&gt;非常慢&lt;/b&gt;”，但是下載的連結中，除了 Vmware 還有 USB的img，應該是很適合帶著走的OS。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;乍看之下很像簡易的 Linux + Browser（而且還不能選，強迫用 Chrome）；不過其實那個 Chrome 除了瀏覽器的功能還能設定網路連線狀態以及目前電池狀態的顯示。可能是玩的不夠久也沒看到其他好玩的東西，那個網頁瀏覽畫面會一直保持『&lt;b style="color: red;"&gt;全螢幕&lt;/b&gt;』，把所有分頁關了，畫面會強制至少開出首頁 ，真的想把它關掉，可以先把網路斷掉，再關網頁。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;不過底層使用 Linux 所以按了 「Ctrl+Alt+Delete」 可以看到 Linux 下的『工作管理員』&amp;amp; 按了 「Ctrl+Alt+t」可以把終端機叫出來，可是叫出來要做什麼？不知道 XD&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;最後，覺得不好玩想關機了，一直找不到關機鍵，後來了拜了 Google 大神才知道這個 OS 沒有關機的概念，不用關；好啦, 這也算創舉 Orz&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b style="color: red;"&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-1362250460085472202?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/1362250460085472202/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/12/chrome-os.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1362250460085472202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1362250460085472202'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/12/chrome-os.html' title='【遊戲】Chrome OS 試玩'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/TRgzHw1_LxI/AAAAAAAAGBM/VcCOQ7oMs3o/s72-c/ChromOS.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-5327732712199731946</id><published>2010-12-08T01:22:00.000-08:00</published><updated>2010-12-08T01:25:31.671-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 4.6.3 - SLOT 共用</title><content type='html'>Qt 裡面使用 connect() 來設定元件和要執行的函式。&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;&lt;b&gt;connect(sender, SIGNAL(signal), receiver, SLOT(slot));&lt;/b&gt;&lt;/pre&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;使用方法：&lt;/div&gt;&lt;ul&gt;&lt;li&gt;sender：觸動事件的元件&lt;/li&gt;&lt;li&gt;SIGNAL()：訊號&lt;/li&gt;&lt;li&gt;receiver：接收事件的元件&lt;/li&gt;&lt;li&gt;SLOT()：接收事件後的反應&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;&lt;b&gt;舉例來說：&lt;br /&gt;　connect(ui-&amp;gt;pTest01,SIGNAL(clicked()),this,SLOT(test())); &lt;br /&gt;　就是當 &lt;span style="color: red;"&gt;pTest01&lt;/span&gt;, &lt;span style="color: red;"&gt;clicked()&lt;/span&gt; 被觸發，&lt;span style="color: red;"&gt;this&lt;/span&gt; 接收到之後，就去執行 &lt;span style="color: red;"&gt;test()&lt;/span&gt;。&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;但是, 有時候會有以下這個情況, 兩個 Test01, Test02 兩個按鍵要做的事情很類似。 &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;img border="0" height="98" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TP9JPba_siI/AAAAAAAAF9I/F099NhFwVb8/s200/01.png" width="200" /&gt;　&lt;img border="0" height="96" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TP9JPhhBS-I/AAAAAAAAF9M/tFSHjm361PM/s200/02.png" width="200" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;&lt;b&gt;&lt;br /&gt;所以，就別客氣直接共用吧&lt;/b&gt;&lt;span style="color: silver;"&gt;    &lt;/span&gt;　　&lt;br /&gt;connect&lt;span style="color: black;"&gt;(&lt;/span&gt;ui&lt;span style="color: black;"&gt;-&amp;gt;&lt;/span&gt;pTest01&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: olive;"&gt;SIGNAL&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;clicked&lt;span style="color: black;"&gt;())&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: olive;"&gt;this&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;b&gt;&lt;span style="color: olive;"&gt;SLOT&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;test&lt;/b&gt;&lt;span style="color: black;"&gt;&lt;b&gt;())&lt;/b&gt;);&lt;/span&gt;&lt;br /&gt;connect&lt;span style="color: black;"&gt;(&lt;/span&gt;ui&lt;span style="color: black;"&gt;-&amp;gt;&lt;/span&gt;pTest02&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: olive;"&gt;SIGNAL&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;clicked&lt;span style="color: black;"&gt;())&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;span style="color: olive;"&gt;this&lt;/span&gt;&lt;span style="color: black;"&gt;,&lt;/span&gt;&lt;b&gt;&lt;span style="color: olive;"&gt;SLOT&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;test&lt;/b&gt;&lt;span style="color: black;"&gt;&lt;b&gt;())&lt;/b&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;&lt;b&gt;&lt;br /&gt;這裡提供一個元件叫做 sender(), 透過 sender()，&lt;br /&gt;可以確認發送訊號的元件，藉以做出區別。&lt;br /&gt;&lt;/b&gt;&lt;span style="color: olive;"&gt;void&lt;/span&gt;&lt;span style="color: silver;"&gt; &lt;/span&gt;MainWindow&lt;span style="color: black;"&gt;::&lt;/span&gt;test&lt;span style="color: black;"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color: silver;"&gt;    &lt;/span&gt;ui&lt;span style="color: black;"&gt;-&amp;gt;&lt;/span&gt;label&lt;span style="color: black;"&gt;-&amp;gt;&lt;/span&gt;setText&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="color: olive;"&gt;this&lt;/span&gt;&lt;span style="color: black;"&gt;-&amp;gt;&lt;/span&gt;sender&lt;span style="color: black;"&gt;()-&amp;gt;&lt;/span&gt;objectName&lt;/b&gt;&lt;span style="color: black;"&gt;&lt;b&gt;()&lt;/b&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: silver;"&gt;    &lt;/span&gt;&lt;span style="color: olive;"&gt;return&lt;/span&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-5327732712199731946?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/5327732712199731946/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/12/qt-463-slot.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5327732712199731946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5327732712199731946'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/12/qt-463-slot.html' title='【筆記】Qt 4.6.3 - SLOT 共用'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oF_vbQi9p8w/TP9JPba_siI/AAAAAAAAF9I/F099NhFwVb8/s72-c/01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-3481875938604768134</id><published>2010-12-03T09:45:00.000-08:00</published><updated>2011-10-04T23:29:31.879-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><title type='text'>【筆記】GUN C++ 中 __attribute__的使用</title><content type='html'>因為朋友(Scott) 在 Facebook 問了這個有趣的問題，所以才有這篇文章：&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;#include &lt;iostream&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   cout&amp;lt;&amp;lt;"Hello Everyone!!"&amp;lt;&lt;endl;&gt;&lt;br /&gt;   return 0;&lt;br /&gt;}&lt;br /&gt;&lt;iostream&gt;&lt;endl;&gt;&lt;iostream&gt;&lt;endl;&gt;&lt;iostream&gt;&lt;endl;&gt;&lt;iostream&gt;&lt;endl;&gt;&lt;br /&gt;&lt;b style="color: red;"&gt;如何在不更改main method 內容的前提下使得輸出的畫面如下：&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: blue;"&gt;Hey, I am coming.&lt;br /&gt;Hello Everyone!!&lt;br /&gt;Good bye.&lt;/b&gt;&lt;/endl;&gt;&lt;/iostream&gt;&lt;/endl;&gt;&lt;/iostream&gt;&lt;/endl;&gt;&lt;/iostream&gt;&lt;/endl;&gt;&lt;/iostream&gt;&lt;/endl;&gt;&lt;/iostream&gt;&lt;/pre&gt;&lt;b&gt;&lt;br /&gt;關鍵就在於： &lt;span style="color: red;"&gt;__attribute__&lt;/span&gt;&lt;/b&gt;在GCC的線上文件 &lt;b&gt;&lt;a href="http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html"&gt;http://gcc.gnu.org/onlinedocs/gcc-4.5.1/gcc/Function-Attributes.html&lt;/a&gt; &lt;/b&gt;中有介紹到 Attribute的用法。&lt;br /&gt;&lt;br /&gt;文件開宗明義就這麼說了：&lt;b style="color: red;"&gt;In GNU C, you declare certain things about functions called in your program which help the compiler optimize function calls and check your code more carefully. &lt;span style="color: blue;"&gt;使用者可以透過 __attribute__ 去調整原來函式的屬性，幫助函式的最佳化，同時可以用來輔助檢查程式碼。&lt;/span&gt;&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;關於這個題目有用到的部份就是這一段：&lt;br /&gt;&lt;b style="color: red;"&gt;constructor 會在 main() 之前被執行， destructor 會在 main() 之後被執行。&lt;/b&gt;&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;&lt;b&gt;constructor (priority)&lt;br /&gt;destructor (priority)&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: red;"&gt;The constructor attribute causes the function to be called &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;automatically before execution enters main (). Similarly, the &lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;destructor attribute causes the function to be called automatically &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;&lt;span style="color: red;"&gt;after main () has completed or exit () has been called.&lt;/span&gt; Functions with &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;these attributes are useful for initializing data that will be used &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #073763;"&gt;implicitly during the execution of the program.&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;iostream&gt;&lt;endl;&gt;&lt;iostream&gt;&lt;endl;&gt;&lt;iostream&gt;&lt;endl;&gt;&lt;/endl;&gt;&lt;/iostream&gt;&lt;/endl;&gt;&lt;/iostream&gt;&lt;/endl;&gt;&lt;/iostream&gt;&lt;/pre&gt;&lt;br /&gt;所以答案就是：&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;#include &lt;iostream&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;__attribute__&lt;span style="color: red;"&gt;((constructor))&lt;/span&gt; void before_main()&lt;/b&gt;&lt;br /&gt;{&lt;br /&gt;   cout&amp;lt;&amp;lt;"Hey, I am coming."&amp;lt;&lt;endl;&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;b&gt;__attribute__&lt;span style="color: red;"&gt;((destructor))&lt;/span&gt; void after_main()&lt;/b&gt;&lt;br /&gt;{&lt;br /&gt;   cout&amp;lt;&amp;lt;"Good bye."&amp;lt;&lt;endl;&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt; cout&amp;lt;&amp;lt;"Hello Everyone!!"&amp;lt;&lt;endl;&gt;&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;iostream&gt;&lt;endl;&gt;&lt;endl;&gt;&lt;endl;&gt;&lt;/endl;&gt;&lt;/endl;&gt;&lt;/endl;&gt;&lt;/iostream&gt;&lt;/endl;&gt;&lt;/endl;&gt;&lt;/endl;&gt;&lt;/iostream&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-3481875938604768134?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/3481875938604768134/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/12/gun-c-attribute.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3481875938604768134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3481875938604768134'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/12/gun-c-attribute.html' title='【筆記】GUN C++ 中 __attribute__的使用'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-1980073669121896858</id><published>2010-10-27T07:10:00.000-07:00</published><updated>2010-10-27T07:11:56.784-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 4.6.3 - qwt 安裝與使用</title><content type='html'>Qwt&amp;nbsp; 的全名：&lt;b&gt;Qt Widgets for Technical Applications &lt;/b&gt;&lt;br /&gt;官網：&lt;a href="http://qwt.sourceforge.net/"&gt;&lt;b&gt;http://qwt.sourceforge.net/&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="" id="result_box" lang="zh-TW"&gt;&lt;span title=""&gt;Qwt 的內容包含一些 GUI元件和工具，主面的作用是用來幫助提供繪製 2D 圖形的。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;這張圖是官網上提供的範例：&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://qwt.sourceforge.net/plot.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="281" src="http://qwt.sourceforge.net/plot.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;span class="" id="result_box" lang="zh-TW"&gt;&lt;span title=""&gt;使用方法：&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;(1) &lt;b style="color: #073763;"&gt;下載&amp;nbsp; Source Code &lt;/b&gt;(qwt-5.x 是抓取的版本, 依個人需要~~)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 1. &lt;b&gt;svn co https://qwt.svn.sourceforge.net/svnroot/qwt/branches/&lt;span style="color: red;"&gt;qwt-5.x&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; ＊官網是要求抓 qwt-5.2 版, 不小心看到還有 5.x 版, 所以抓了更新的版本&lt;br /&gt;(config 裡面有標示這是 5.3版)&lt;br /&gt;&lt;br /&gt;(2)&lt;b style="color: #073763;"&gt;&lt;span style="color: red;"&gt;編輯 qwtconfig.pri&lt;/span&gt;, 選擇要 Compiler 的目錄&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 1. &lt;b&gt;/usr/local/Trolltech/QtEmbedded-4.6.3-arm-cross-4.1.2/bin/&lt;span style="color: red;"&gt;qmake qwt&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 2. &lt;b&gt;/usr/local/Trolltech/QtEmbedded-4.6.3-arm-cross-4.1.2/bin/&lt;span style="color: red;"&gt;qmake&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 3. &lt;b style="color: red;"&gt;make&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 4. &lt;b&gt;完成後 &lt;span style="color: red;"&gt;examples/bin 底下會出現編譯完成的可執行檔&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; ＊我自己的測試中，除了 #CONFIG&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; += QwtMathML 其餘都打開,　&lt;br /&gt;這部份可以依個人需求調整。&lt;br /&gt;&lt;br /&gt;(3)搬到開發版上&lt;br /&gt;&amp;nbsp;&amp;nbsp; 1. &lt;b&gt;把這些檔案搬到開發版上 /lib 目錄下 &lt;/b&gt;&lt;br /&gt;&lt;div style="color: #20124d;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libqwt.so&amp;nbsp; &lt;/b&gt;&lt;/div&gt;&lt;div style="color: #20124d;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libqwt.so.5&amp;nbsp; &lt;/b&gt;&lt;/div&gt;&lt;div style="color: #20124d;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libqwt.so.5.3&amp;nbsp; &lt;/b&gt;&lt;/div&gt;&lt;div style="color: #20124d;"&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libqwt.so.5.3.0&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; ＊除了一個檔案，其餘均為連結檔, 檔案&lt;b style="color: red;"&gt;約 19.8 MB&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; 2. 把這些檔案搬到開發版上 /lib 目錄下 (&lt;b&gt;我想試的 simple 還需要這個 library&lt;/b&gt;) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libQtSvg.la&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libQtSvg.so&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libQtSvg.so.4.6 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libQtSvg.prl&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libQtSvg.so.4&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; libQtSvg.so.4.6.3&lt;br /&gt;&lt;br /&gt;(4)製作 img 檔&lt;br /&gt;(5)看結果 (這個範例 繪製 sin, cos 的數值變化 ) &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TMgw4Aoa6OI/AAAAAAAAF8E/JCsI-BECdiQ/s1600/DSCF0373.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TMgw4Aoa6OI/AAAAAAAAF8E/JCsI-BECdiQ/s400/DSCF0373.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;除了 qwt, 另外有 Qwtplot3D ( &lt;a href="http://qwtplot3d.sourceforge.net/"&gt;http://qwtplot3d.sourceforge.net/&lt;/a&gt; ) &lt;/div&gt;可以在Qt底下繪製 3D的圖表。&lt;br /&gt;&lt;br /&gt;如下圖: &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://qwtplot3d.sourceforge.net/images/fem_0.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="286" src="http://qwtplot3d.sourceforge.net/images/fem_0.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;參考資料：&lt;/div&gt;(1) qwt : &lt;a href="http://qwt.sourceforge.net/"&gt;http://qwt.sourceforge.net/&lt;/a&gt;&lt;br /&gt;(2) CuteQt Blog : &lt;a href="http://www.cuteqt.com/blog/%20"&gt;http://www.cuteqt.com/blog/ &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-1980073669121896858?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/1980073669121896858/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/10/qt-463-qwt.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1980073669121896858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1980073669121896858'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/10/qt-463-qwt.html' title='【筆記】Qt 4.6.3 - qwt 安裝與使用'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/TMgw4Aoa6OI/AAAAAAAAF8E/JCsI-BECdiQ/s72-c/DSCF0373.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-4519098494157913749</id><published>2010-10-26T23:00:00.000-07:00</published><updated>2010-10-27T06:14:00.106-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 4.6.3 - Table 範例</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;Qt的介面裡有內建 Table的元件，提供了相當完整的功能，使用上只要拉好&lt;/div&gt;介面提供資料就可以了，這個 Table 通常會配合 SQL 來使用，不過這裡單&lt;br /&gt;純介紹 Table的使用方式。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(1) 選擇 Table Widget 元件 &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TMeoyTQqZoI/AAAAAAAAF70/reBKGJnjThA/s1600/TableWidget01.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TMeoyTQqZoI/AAAAAAAAF70/reBKGJnjThA/s400/TableWidget01.jpg" width="280" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(2)填入 行, 列 Header 名稱 &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TMeoy9r16eI/AAAAAAAAF74/2-b4UJQibj4/s1600/TableWidget02.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="285" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TMeoy9r16eI/AAAAAAAAF74/2-b4UJQibj4/s400/TableWidget02.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(3) 進入程式部份：&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;b style="color: #073763;"&gt;setRowCount()&lt;/b&gt; 設定列的數量&lt;/li&gt;&lt;li&gt;&lt;b style="color: #073763;"&gt;setColumnCount()&lt;/b&gt; 設定行的數量&lt;/li&gt;&lt;li&gt;&lt;b style="color: #073763;"&gt;setItem() &lt;/b&gt;依序填入 &lt;b style="color: red;"&gt;列, 行, 值&lt;/b&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TMe_HAw4YdI/AAAAAAAAF8A/jtdb9rV1F7Y/s1600/Table03.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="68" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TMe_HAw4YdI/AAAAAAAAF8A/jtdb9rV1F7Y/s400/Table03.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Table 建構完成 ~~ &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-4519098494157913749?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/4519098494157913749/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/10/qt-463-table.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4519098494157913749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4519098494157913749'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/10/qt-463-table.html' title='【筆記】Qt 4.6.3 - Table 範例'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/TMeoyTQqZoI/AAAAAAAAF70/reBKGJnjThA/s72-c/TableWidget01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-6050834358866096023</id><published>2010-10-20T01:35:00.000-07:00</published><updated>2010-10-26T23:00:46.378-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式練習'/><title type='text'>【練習】產生數獨的資料</title><content type='html'>數獨是一種數字遊戲, 規則是每一行、列、九宮格內數字都不可以重複。&lt;br /&gt;目標是寫出能玩的遊戲，現在的第一步是先產生數獨的數字。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(1)&lt;b&gt;列&lt;/b&gt;的部份, 從最初的九宮格開始延伸出來，同一列的九宮格，&lt;/div&gt;每一列的內容順序是一樣的，但是又存在於各自九宮格的不同列。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TL6lkV84y4I/AAAAAAAAF7k/_JyZ8Z7VSUU/s1600/01.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TL6lkV84y4I/AAAAAAAAF7k/_JyZ8Z7VSUU/s400/01.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(1)&lt;b&gt;行&lt;/b&gt;的部份, 也有跟列類似的規則，從最初的九宮格開始延伸出來，&lt;/div&gt;同一行的九宮格，每一行的內容順序是一樣的，但是又存在於各自&lt;br /&gt;九宮格的不同行。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TL6lk6xqd3I/AAAAAAAAF7o/K_VFApUZ0Mw/s1600/02.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="168" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TL6lk6xqd3I/AAAAAAAAF7o/K_VFApUZ0Mw/s400/02.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;從這樣的規則開始衍伸，由最初的取得的九宮格把內容填滿。&lt;/div&gt;&lt;br /&gt;以下是程式的部份：&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;&lt;b style="color: red;"&gt;//主程式的部份&lt;/b&gt; &lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;time.h&gt;&lt;br /&gt;&lt;br /&gt;#define RangeS&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;#define Range&amp;nbsp;&amp;nbsp; (RangeS * RangeS)&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;int Model[RangeS][RangeS];&lt;br /&gt;int Temp[RangeS][RangeS];&lt;br /&gt;int Sudoku[Range][Range];&lt;br /&gt;&lt;br /&gt;void TempInit(void);&lt;br /&gt;void TempArrayMove(int h, int v);&lt;br /&gt;&lt;br /&gt;int main(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; int i,j;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; TempInit();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; for(i=0;i&lt;ranges;i++)&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j=0;j&lt;ranges;j++)&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TempArrayMove(i,j);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; //print Sukudo&lt;br /&gt;&amp;nbsp;&amp;nbsp; for(i=0;i&lt;range;i++)&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j=0;j&lt;range;j++)&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%2d",Sudoku[i][j]+1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((j%RangeS)==(RangeS-1))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\t");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((i%RangeS)==(RangeS-1))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\n");&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&amp;nbsp;&lt;/range;j++)&gt;&lt;/range;i++)&gt;&lt;/ranges;j++)&gt;&lt;/ranges;i++)&gt;&lt;/time.h&gt;&lt;/stdio.h&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: red; overflow: auto;"&gt;&lt;b&gt;//產生第一組九宮格的內容，可以隨機去重填這個九宮格的內容，但是仍然要遵守&lt;br /&gt;//不能重覆的遊戲規則。 &lt;/b&gt;&lt;/pre&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;void TempInit(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; int i,j,n,a,b,temp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; n = 0;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &lt;b&gt;//Input Value&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; for(i=0;i&lt;ranges;i++)&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j=0;j&lt;ranges;j++)&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Model[i][j]= n++;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;b&gt;//Rand&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; srand (time(NULL));&lt;br /&gt;&amp;nbsp;&amp;nbsp; for(i=0;i&lt;ranges;i++)&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j=0;j&lt;ranges;j++)&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a = rand() % RangeS;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b = rand() % RangeS;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp = Model[i][j];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Model[i][j] = Model[a][b];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Model[a][b] = temp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;} &lt;/ranges;j++)&gt;&lt;/ranges;i++)&gt;&lt;/ranges;j++)&gt;&lt;/ranges;i++)&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;&lt;b&gt;&lt;b&gt;&lt;span style="color: red;"&gt;//重置九宮格的內容，填滿所有數獨的位置。&lt;/span&gt; &lt;/b&gt;&lt;/b&gt;&lt;/pre&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;void TempArrayMove(int h, int v)&lt;br /&gt;{&lt;b&gt;//Create H,V&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; int i,j;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; for(i=0;i&lt;ranges;i++)&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(j=0;j&lt;ranges;j++)&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Temp[i][j] = Model[(i+h)%RangeS][(j+v)%RangeS];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sudoku[i+v*RangeS][j+h*RangeS] = Temp[i][j];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;} &lt;/ranges;j++)&gt;&lt;/ranges;i++)&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;產生的結果： &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TL6pFrPNszI/AAAAAAAAF7s/B6Qhlkp2aSw/s1600/Standard.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TL6pFrPNszI/AAAAAAAAF7s/B6Qhlkp2aSw/s400/Standard.jpg" width="393" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TL6pGNaTCgI/AAAAAAAAF7w/dIFkbmTnt08/s1600/Standard02.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TL6pGNaTCgI/AAAAAAAAF7w/dIFkbmTnt08/s400/Standard02.jpg" width="390" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;參考資料：&lt;/div&gt;(1)尤怪的家: &lt;a href="http://oddest.nc.hcc.edu.tw/"&gt;http://oddest.nc.hcc.edu.tw/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-6050834358866096023?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/6050834358866096023/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/10/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6050834358866096023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6050834358866096023'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/10/blog-post.html' title='【練習】產生數獨的資料'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oF_vbQi9p8w/TL6lkV84y4I/AAAAAAAAF7k/_JyZ8Z7VSUU/s72-c/01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-2225215656072685481</id><published>2010-09-10T02:49:00.000-07:00</published><updated>2010-09-10T02:56:11.318-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 4.6.3 - Browser範例</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;Qt 裡面附有 QWebView 的物件，可以利用這個元件完成瀏覽器的功能。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;.H 檔：mainwindows.h&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(1)&amp;nbsp; #include &lt;qtwebkit&gt; --&amp;gt;包含Web相關的工具..&lt;/qtwebkit&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(2) QWebView 瀏覽器元件&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(3) slot --&amp;gt; 讀取過程, 完成 標題列的變化&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TIn73qUcziI/AAAAAAAAFz4/X83PXpZ_nWM/s1600/H.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TIn73qUcziI/AAAAAAAAFz4/X83PXpZ_nWM/s400/H.png" width="257" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;.c 檔：mainwindows.c&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;用法簡單到不知道寫什麼 Orz&lt;br /&gt;(1) 產生一個實際的 QWebView 元件, 直接設定要連結的網址給它就可以了。&lt;br /&gt;(2) setProcess, finishLoading 當 view 執行時，標題列的變化&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TIn74jPBohI/AAAAAAAAF0A/jxKxU7qTiTI/s1600/C.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TIn74jPBohI/AAAAAAAAF0A/jxKxU7qTiTI/s640/C.png" width="537" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;主程式中的用法：&lt;br /&gt;Mainwindow browser;&lt;br /&gt;browser.show();&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;實際執行的效果() (這是本機裡面安裝的 Base, 直接透過 Qt 的介面顯現出來)&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TIn75RlmU6I/AAAAAAAAF0I/TmM-qD28TkM/s1600/Embedded.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TIn75RlmU6I/AAAAAAAAF0I/TmM-qD28TkM/s400/Embedded.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;實際執行的效果(2) (直接連Qt的執行介面一起抓下來)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TIn76C_WVJI/AAAAAAAAF0Q/Vh0cmjfqer4/s1600/Embedded_02.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TIn76C_WVJI/AAAAAAAAF0Q/Vh0cmjfqer4/s400/Embedded_02.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;＊附註：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(1) Base 是 Snort 常用的 Web操作介面, 以 PHP+MyQL 開發。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(2) 如果要整合 Base 內容再做其他的延伸設計像這樣直接包進來介面看起來會比較一致。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-2225215656072685481?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/2225215656072685481/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/09/qt-463-browser.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2225215656072685481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2225215656072685481'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/09/qt-463-browser.html' title='【筆記】Qt 4.6.3 - Browser範例'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oF_vbQi9p8w/TIn73qUcziI/AAAAAAAAFz4/X83PXpZ_nWM/s72-c/H.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-7693288599051701188</id><published>2010-09-06T23:40:00.000-07:00</published><updated>2010-09-06T23:40:50.941-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Snort'/><title type='text'>【筆記】Snort 安裝設定</title><content type='html'>&lt;b&gt;Snort 2.8.6.1 (Ubuntu 10.04)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Snort Source Code / 在官網抓了兩個檔案 snort 原始碼 , rules&lt;br /&gt;(1) snort-2.8.6.1.tar.gz&lt;br /&gt;(2) snortrules-snapshot-2861.tar.gz&lt;br /&gt;&lt;b&gt;&amp;nbsp;** 抓最新的 rules 要付錢, 不付錢就只能用 30天前的版本&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;準備工作：&lt;/b&gt;&lt;br /&gt;(1) libpcap&lt;br /&gt;(2) libpcre&lt;br /&gt;(3) libzlib&lt;br /&gt;(4) mysql&lt;br /&gt;&lt;b&gt;** 我是笨蛋, 所以用最簡單的方法,Ubuntu 裡面的 Synaptic 套件管理程式把需要的勾一勾&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;開始安裝,&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;# cd /home/star/snort-2.8.6.1/&lt;br /&gt;#./configure&lt;/b&gt;&lt;b&gt; --enable-zlib &lt;span style="color: magenta;"&gt;--enable-dynamicplugin&lt;/span&gt; &lt;span style="color: red;"&gt;--with-mysql &lt;/span&gt;&lt;br /&gt;# make&lt;/b&gt;&lt;br /&gt;&lt;b&gt;# make install&lt;/b&gt;&lt;br /&gt;&lt;b&gt;**看訊息缺什麼套件就加裝&lt;/b&gt;&lt;b&gt;什麼套件&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;放置設定檔 snort.conf&lt;/b&gt;&lt;br /&gt;(1) 把 Source Code etc/ 裡面的內容搬到 /etc 裡面 &lt;br /&gt;&lt;b&gt;# mkdir /etc/snort/conf &lt;br /&gt;# cp /home/star/snort-2.8.6.1/etc/* /etc/snort/conf/&lt;/b&gt;&lt;br /&gt;** 覺得有點亂,稍微整理了一下, 把 etc/ 裡面的內容搬到 /etc/snort/conf 底下&lt;br /&gt;&lt;br /&gt;&lt;b&gt;放置snortrules&lt;/b&gt;&lt;br /&gt;(1) snortrules-snapshot-2861.tar.gz 到 /etc/snort/ 下解壓縮&lt;br /&gt;&lt;b&gt;# cd /etc/snort&lt;br /&gt;# tar -vxzf snortrules-snapshot-2861.tar.gz&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;** 直接按照snort.conf 預設的路徑放剛好可以不用修改&amp;nbsp; /etc/snort/conf/snort.conf 的內容&lt;br /&gt;snortrules-snapshot-2861.tar.gz &lt;b&gt;解壓縮之後可以看到 rules, so_rules, preproc_rules …等目錄 &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;設定 snort_dynamicrules&lt;/b&gt;&lt;br /&gt;(1)建立目錄, 把需要的 Library copy 過去 snort_dynamicrules&lt;br /&gt;&lt;b&gt;# mkdir -p /usr/local/lib/snort_dynamicrules/&lt;br /&gt;# cp /etc/snort/so_rules/precompiled/Debian-Lenny/i386/2.8.6.1/* /usr/local/lib/snort_dynamicrules/&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;設定 Mysql&lt;/b&gt;&lt;br /&gt;(1)進入 mysql&lt;br /&gt;&lt;b&gt;# mysql -u&amp;nbsp; root -p&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;(2)進入 mysql, 建立 snort 資料庫 &lt;br /&gt;&lt;b&gt;mysql&lt;/b&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;b&gt; create database snort;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;(3)將 snort 資料庫的權限設給 snort 這個帳號&lt;br /&gt;&lt;b&gt;mysql&lt;/b&gt;&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;b&gt; grant all on snort.* to&amp;nbsp; snort@localhost identified by 'xxxx';&lt;br /&gt;mysql&amp;gt; quit&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;(4)將 snort的資料表格置入 mysql&lt;br /&gt;&lt;b&gt;#cd /home/star/snort-2.8.6.1/schemas/&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;(5)匯入snort資料表格&lt;br /&gt;&lt;b&gt;#mysql&amp;nbsp; -u root -p&amp;nbsp;&amp;nbsp; snort &amp;lt;&amp;nbsp; create_mysql&lt;/b&gt;&lt;br /&gt;修改 /etc/conf/snort.conf 中關於 mysql 的設定&lt;b&gt;&lt;br /&gt;# vim /etc/snort/conf/snort.conf&lt;/b&gt;尋找 output database 開始編輯內容 設定 user, password, dbname, host 等內容&lt;br /&gt;&lt;b&gt;output database: alert, mysql, user=snort password=xxxx dbname=snort host=localhost&lt;/b&gt;&lt;br /&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;output database: log, mysql,&amp;nbsp; user=snort password=xxxx dbname=snort host=localhost&lt;/b&gt;&lt;br /&gt;**snort 2.8.6.1 這部份的設定檔有點小問題, 發現之後就很好處理了&lt;br /&gt;&lt;br /&gt;&lt;b&gt;看看效果&lt;/b&gt;&lt;br /&gt;(1)執行 snort ,-D Daemon, -c 指定的設定檔&lt;br /&gt;&lt;b&gt;#/usr/local/bin/snort -D -c /etc/snort/conf/snort.conf&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TIXdJ1JN_pI/AAAAAAAAFzY/vgTa91JdMzQ/s1600/ps+ax.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="35" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TIXdJ1JN_pI/AAAAAAAAFzY/vgTa91JdMzQ/s640/ps+ax.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(2)進去 mysql 看看&lt;/div&gt;&lt;b&gt;# mysql -u snort -p&lt;/b&gt;&lt;br /&gt;[1]選擇資料庫&lt;br /&gt;&lt;b&gt;mysql&amp;gt; use snort;&lt;/b&gt;&lt;br /&gt;[2]snort包含這些表格&lt;br /&gt;&lt;b&gt;mysql&amp;gt; show tables;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TIXdK9Jz6yI/AAAAAAAAFzg/wGIdYpB2gN4/s1600/snort_mysql.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TIXdK9Jz6yI/AAAAAAAAFzg/wGIdYpB2gN4/s400/snort_mysql.png" width="221" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;[3]看看存進來的內容&lt;/div&gt;&lt;b&gt;mysql&amp;gt; select * from tcphdr;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TIXdLnKLD9I/AAAAAAAAFzo/2X_Xu0ytUb0/s1600/snort_tcphdr.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="122" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TIXdLnKLD9I/AAAAAAAAFzo/2X_Xu0ytUb0/s400/snort_tcphdr.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;** 配合 ACID or BASE(Basic Analysis and Security Engine), 使用可以更容易看出訊息的變化。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-7693288599051701188?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/7693288599051701188/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/09/snort.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7693288599051701188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7693288599051701188'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/09/snort.html' title='【筆記】Snort 安裝設定'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oF_vbQi9p8w/TIXdJ1JN_pI/AAAAAAAAFzY/vgTa91JdMzQ/s72-c/ps+ax.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-4828369257601313154</id><published>2010-09-03T01:53:00.000-07:00</published><updated>2010-09-03T01:53:53.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 4.6.3 - TCPSocket 範例</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;上一篇寫了 TCPServer，所以要弄一個 TCPSocket 來測測看 Server 是不是真的有作用？&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TICx7o3Mm6I/AAAAAAAAFyo/X-6rX4K3Ih0/s1600/tcpclient_h.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="381" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TICx7o3Mm6I/AAAAAAAAFyo/X-6rX4K3Ih0/s400/tcpclient_h.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;這是 .h 檔，還有一個直接用 QtCreator 拉的視窗內容，就不PO過來了。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TICx9IezlyI/AAAAAAAAFyw/WVFZSQS7Jjo/s1600/tcpclient_c1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="265" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TICx9IezlyI/AAAAAAAAFyw/WVFZSQS7Jjo/s400/tcpclient_c1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;訊號是由 Client端主動送出的，當使用者按下按鍵進入 Start 開始對特定 IP/Port 送出訊息&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TICx-HdUtyI/AAAAAAAAFy4/7B2QjeSupyM/s1600/tcpclient_c2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="310" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TICx-HdUtyI/AAAAAAAAFy4/7B2QjeSupyM/s400/tcpclient_c2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;start 對 Server/Port 送出 connect 的要求&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;setHostAddressAndPort 設定要連繫的 IP &amp;amp; Port&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;startTransfer 資料傳送&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TICx-7VhWQI/AAAAAAAAFzA/cbll4A3W3fU/s1600/tcpclient_c3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="288" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TICx-7VhWQI/AAAAAAAAFzA/cbll4A3W3fU/s400/tcpclient_c3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;updateProgress：記錄資料傳遞的過程&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;displayError：資料傳送完成 or 傳遞錯誤的訊息 &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;主程式使用：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TICx_g0v6tI/AAAAAAAAFzI/feUaNCHiVLo/s1600/tcpclient_m.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="195" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TICx_g0v6tI/AAAAAAAAFzI/feUaNCHiVLo/s400/tcpclient_m.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;主程式使用：設定連結的 IP, Port&lt;br /&gt;＊然後再加上前面的 Server 就可以試試看效果了。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;測試平台： Vmware 7.1 + Ubuntu 9.10 + Qt 4.6.3&lt;/div&gt;&lt;br /&gt;＊這邊有個特別的地方要注意，因為電腦上灌了一堆版本的 Qt，Client 這邊的程式是在 PC上執行的，所以要注意選用的 qmake ，因為產生的 Makefile 會不太一樣，結果會差很多。&lt;br /&gt;&lt;br /&gt;＊另一個要注意的是我在 Compiler 的時候出現了一堆連結錯誤的訊息，修改一下 .pro 檔加入 Qt += network 讓Qt可以找到一堆 network相關的 library 就可以解決這個問題。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TIC3bwlxG3I/AAAAAAAAFzQ/ekXCTgwhZ6Q/s1600/tcpclient_pro.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="356" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TIC3bwlxG3I/AAAAAAAAFzQ/ekXCTgwhZ6Q/s400/tcpclient_pro.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;參考資料：&lt;/div&gt;(1) TCPSocket：&lt;a href="http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/QTcpSocket.html"&gt;http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/QTcpSocket.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-4828369257601313154?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/4828369257601313154/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/09/qt-463-tcpsocket.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4828369257601313154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4828369257601313154'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/09/qt-463-tcpsocket.html' title='【筆記】Qt 4.6.3 - TCPSocket 範例'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oF_vbQi9p8w/TICx7o3Mm6I/AAAAAAAAFyo/X-6rX4K3Ih0/s72-c/tcpclient_h.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-7047321712740318015</id><published>2010-09-03T01:11:00.000-07:00</published><updated>2010-09-03T01:20:52.453-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 4.6.3 - TCPServer 範例</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;前面介紹 Qt 裡面包含 Http, Ftp 這類的 Function, 除此之外也提供了 TCPSocket, UDPSocket 的相關函式供使用....&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;TCP Sever用法：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Qt 提供了 QTcpServer、QTcpSocket；很多 Function 都可以直接拿來用...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;連名稱都和之前用過的 C# 非常相近 以下是 .h 檔的部份&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TICl_HHRfjI/AAAAAAAAFxw/CpVEqNUmlkM/s1600/tcpserver_h.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="367" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TICl_HHRfjI/AAAAAAAAFxw/CpVEqNUmlkM/s400/tcpserver_h.png" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;再來是實際的 Code的部份：&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TICmvrk5u9I/AAAAAAAAFx4/PYc-MdTnJJs/s1600/tcpserver_c1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="167" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TICmvrk5u9I/AAAAAAAAFx4/PYc-MdTnJJs/s400/tcpserver_c1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;TCPServer, 一開始就設定 newConnect 的訊號進來即進入 acceptConnection(), 所以 acceptConnection() 這段內容才是接受資料的內容。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;setReceivedFilename 開啟接收的檔案（有資料傳送進來，接收用）&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TICm2SJouhI/AAAAAAAAFyQ/5olwUSlvgH0/s1600/tcpserver_c2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="262" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TICm2SJouhI/AAAAAAAAFyQ/5olwUSlvgH0/s400/tcpserver_c2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;acceptConnection 是主要連線的程式，這裡負責等待訊息接收傳遞進來的資料。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;updateProcess寫入資料。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TICm4r2MkwI/AAAAAAAAFyY/SUbDLKJPJDs/s1600/tcpserver_c3.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="192" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TICm4r2MkwI/AAAAAAAAFyY/SUbDLKJPJDs/s400/tcpserver_c3.png" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;displayError 資料傳遞完成後的訊息（或者是中間有其他錯誤的訊息）&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;listen 這是指定 server 要 listen 的 port&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;在 Main 裡面的用法：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TICnGnpq0yI/AAAAAAAAFyg/MreF2TDVHE8/s1600/main.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="62" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TICnGnpq0yI/AAAAAAAAFyg/MreF2TDVHE8/s400/main.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;主程式的用法只要設定要接收的檔名以及指定要 listen 的 port 等資料進來就好了。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;＊ 這段程式只有 Server的部份要和 TCP Socket 配合使用。 &lt;/div&gt;&lt;br /&gt;測試平台：FriendlyARM Mini2440 的版子 + Qt 4.6.3 ；這段程式的內容主要是改自參考資料的程式碼；有一點不太一樣的是 Qt 4.6.3 的 library 的路徑似乎有調整過，配合版本小修一下就會動了。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;參考資料： &lt;/div&gt;(1) QTcpSerer：&lt;a href="http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/QTcpServer.html"&gt;http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/QTcpServer.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-7047321712740318015?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/7047321712740318015/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/09/qt-463-tcpserver.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7047321712740318015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7047321712740318015'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/09/qt-463-tcpserver.html' title='【筆記】Qt 4.6.3 - TCPServer 範例'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oF_vbQi9p8w/TICl_HHRfjI/AAAAAAAAFxw/CpVEqNUmlkM/s72-c/tcpserver_h.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-8337429891567569561</id><published>2010-08-30T23:42:00.000-07:00</published><updated>2010-08-30T23:42:52.039-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 4.6.3 - QHttp 範例</title><content type='html'>Qt 裡面也內含 FTP, HTTP 的 API&lt;br /&gt;可以直接設定 Request 的指令，以 GET/POST 的方式傳遞訊息：&lt;br /&gt;&lt;br /&gt;以下是簡單的範例程式：(&lt;b style="color: red;"&gt;送出 Http 的 rquest,&amp;nbsp; 儲存傳回的檔案內容 &lt;/b&gt;)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/THyfO7PlvaI/AAAAAAAAFxQ/_rlp7ypdO-Q/s1600/1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/THyfO7PlvaI/AAAAAAAAFxQ/_rlp7ypdO-Q/s400/1.png" width="261" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;主要的程式在 getFile 功能就是 getFile – 取得 http 回傳的內容。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;done ()&amp;nbsp; 訊號 (Qt 傳送完成的訊號）&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;httpDone() 在收到 done() 訊號執行 ...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp;＊ 就是說 當 done() 發生的時候, 執行 httpDone()&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;以下是 主程式的部份：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/THyfQf826lI/AAAAAAAAFxY/ex8zDMVyA0w/s1600/2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/THyfQf826lI/AAAAAAAAFxY/ex8zDMVyA0w/s400/2.png" width="380" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Qt 提供一堆可用的 API , 所以可以看到抓取內容的方式就是整個完整 http 的內容。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;http.setHost 設定網址 → 內容必須要完整, 例如：http://www.google.com/ &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;後面的 port 80 是 http 預設的 port&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;http.get 以 get的方式要求取得路徑的位置&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Qt 中也有提供 post, header 內容的設定方式&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;＊詳細內容直接參閱 QHttp ：&lt;a href="http://doc.trolltech.com/4.6/qhttp.html"&gt;http://doc.trolltech.com/4.6/qhttp.html&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;使用方法：&lt;br /&gt;&lt;br /&gt;在需要的地方宣告,使用&lt;br /&gt;HttpGet httpget;&lt;br /&gt;httpget.getFile(QUrl("&lt;b style="color: red;"&gt;http://www.google.com.tw/robots.txt&lt;/b&gt;"));&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;成功的話應該可以看到完成抓下來的 robots.txt 內容...&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;＊測試平台： Qt 4.6.3 其他版本可能要注意 #include Library 的內容&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;參考資料：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(1) QHttp Class Reference： &lt;a href="http://doc.trolltech.com/4.6/qhttp.html"&gt;http://doc.trolltech.com/4.6/qhttp.html&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(2) QNetwork(1)：&lt;a href="http://wiki.oss.org.tw/index.php/Qt_Network%281%29"&gt;http://wiki.oss.org.tw/index.php/Qt_Network%281%29&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(3) &lt;i&gt;C++ GUI&lt;/i&gt; Programming with Qt 4&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-8337429891567569561?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/8337429891567569561/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/08/qt-463-qhttp.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8337429891567569561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8337429891567569561'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/08/qt-463-qhttp.html' title='【筆記】Qt 4.6.3 - QHttp 範例'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/THyfO7PlvaI/AAAAAAAAFxQ/_rlp7ypdO-Q/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-2318356358958020580</id><published>2010-08-15T19:42:00.000-07:00</published><updated>2010-08-15T23:17:30.571-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 4.6.3 &amp; tslib 1.4 在 Ubuntu 9.10 安裝及移植到 mini2440</title><content type='html'>&lt;b&gt;一、開發環境：&lt;br /&gt;&lt;/b&gt;作業系統：Vmware 7.1 + Ubuntu 9.10&lt;br /&gt;交叉編譯器：arm-linux-gcc 4.1.2&lt;br /&gt;開發版： FriendlyArm mini2440 + 7吋 LCD&lt;br /&gt;&lt;br /&gt;&lt;b&gt;二、準備工作：&lt;/b&gt;&lt;br /&gt;原始碼：&lt;b&gt;Qt-4.6.3 Source Code [&lt;a href="http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.6.3.tar.gz"&gt;載點&lt;/a&gt;]&lt;/b&gt;&lt;br /&gt;&lt;b&gt;　　　　tslib-1.4[&lt;a href="http://download.csdn.net/source/666822"&gt;載點&lt;/a&gt;]&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arm-linux-gcc 4.1.2 [&lt;a href="http://qtextended.org/downloads/toolchains/arm920t-eabi.tgz"&gt;載點&lt;/a&gt;]&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;三、環境建置：&lt;/b&gt;&lt;br /&gt;(1) 直接把抓到的 arm-linux-gcc 4.1.2 在 / 下解壓縮；&lt;br /&gt;這個版本會解縮到到：&lt;b&gt;&lt;span style="color: #351c75;"&gt;/opt/toolchains/arm920t-eabi/&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;(2) 設定路徑：&lt;/div&gt;&lt;div style="color: black;"&gt;[1] 使用 &lt;b&gt;root &lt;/b&gt;的身份&lt;/div&gt;&lt;div style="color: black;"&gt;[2] 編輯 &lt;b&gt;.bashrc&lt;/b&gt;&amp;nbsp; vim /root/.bashrc&lt;/div&gt;&lt;div style="color: black;"&gt;[3] 在 &lt;b&gt;.bashrc&lt;/b&gt; 中加入 arm-linux-gcc 4.1.2 所在路徑 &lt;/div&gt;&lt;div style="color: black;"&gt;&lt;b style="color: #351c75;"&gt;　　　export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH&lt;/b&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;[4] 確認能找到相關路徑&lt;/div&gt;&lt;div style="color: black;"&gt;登出 root , 再重新登入。&lt;/div&gt;# echo $PATH&lt;br /&gt;&lt;b style="color: #351c75;"&gt;　　/opt/toolchains/arm920t-eabi/bin:/usr/local/sbin&lt;/b&gt;:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;(3) 安裝 tslib (&lt;b&gt;tslib1.4.tar.gz&lt;/b&gt;)：&lt;/div&gt;&lt;div style="color: black;"&gt;[1] 解壓縮 tar -vxzf tslib1.4.tar.gz&amp;nbsp;&lt;/div&gt;&lt;div style="color: black;"&gt;[2] 執行 autogen.sh 產生 configure&lt;/div&gt;&lt;div style="color: black;"&gt;[3] 安裝 tslib 1.4&lt;/div&gt;&lt;div style="color: black;"&gt;#./configure --prefix=/usr/local/tslib/ --host=arm-linux ac_cv_func_malloc_0_nonnull=yes&lt;br /&gt;# make&lt;br /&gt;# make install&amp;nbsp;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;b style="color: red;"&gt;＊編譯 Qt-4.6.3 會用到，所以這個動作必須在Compiler Qt 之前。&lt;/b&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;(4) 使用 arm-linux-gcc 4.1.2 Compiler Qt 4.6.3&lt;/div&gt;&lt;div style="color: black;"&gt;[1] 解壓縮 tar -vxzf qt-everywhere-opensource-src-4.6.3.tar.gz&lt;/div&gt;&lt;div style="color: black;"&gt;[2] 環境設定 configure&lt;/div&gt;#.configure&lt;b style="color: red;"&gt; --prefix=/usr/local/Trolltech/QtEmbedded-4.6.3-arm-cross-4.1.2 -embedded arm&lt;/b&gt; -qt-gfx-qvfb -qt-kbd-qvfb &lt;b style="color: red;"&gt;-qt-mouse-tslib&lt;/b&gt; -qt-mouse-qvfb &lt;b style="color: red;"&gt;-I/usr/local/tslib/include -L/usr/local/tslib/lib&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #351c75;"&gt;&lt;b&gt;＊執行過程會詢問授權方式 (o: opensource, c: commerce)以及是否接受授權條款？&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;[3] 安裝&lt;br /&gt;#make&lt;br /&gt;#make install&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #351c75;"&gt;＊這個過程很久，請耐心等待。&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;四、把建置完成的內容搬到開發版做測試：&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(1) 把會用到的 tslib 搬到版子上&lt;/b&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;[1]在開發版上建置目錄&lt;b&gt; &lt;span style="color: red;"&gt;/usr/local/tslib&lt;/span&gt;&lt;/b&gt; 把產生的 Library 搬過來。&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;b&gt;(2) 把會用到的 Qt Library搬到版子上&lt;/b&gt;&lt;br /&gt;[1]在開發版上建置目錄 &lt;b&gt;&lt;span style="color: red;"&gt;/usr/local/Trolltech/QtEmbedded-4.6.3-arm-cross-4.1.2/lib&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;把編譯產生的 Library 搬過來&lt;b&gt;&lt;span style="color: red;"&gt; (拿有用的就好全部過來會爆掉)&lt;/span&gt;&lt;/b&gt;。&amp;nbsp;&lt;/div&gt;[2]把編譯 tslib產生的 libts-0.0.so.0&lt;b&gt; &lt;span style="color: red;"&gt;(含連結) &lt;/span&gt;&lt;/b&gt;也搬過來 &lt;b&gt;&lt;span style="color: red;"&gt;/usr/local/Trolltech/QtEmbedded-4.6.3-arm-cross-4.1.2/lib &lt;/span&gt;&lt;/b&gt;把編譯產生的 Library 搬過來。&lt;br /&gt;&lt;div style="color: black;"&gt;[3]在開發版上建置目錄&lt;b&gt; &lt;span style="color: red;"&gt;/usr/local/Trolltech/QtEmbedded-4.6.3-arm-cross-4.1.2/lib/fonts &lt;/span&gt;&lt;/b&gt;把編譯產生的字型搬過來。 &lt;b&gt;&lt;span style="color: red;"&gt;(字型, 拿有用的好了, Qt 開發過程有用到也是搬到這裡。)&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;b&gt;(3) 建置開發環境&lt;/b&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;[1] 編輯 &lt;b&gt;/etc/init.d/rcS&lt;/b&gt;&amp;nbsp;把編譯產生的 Library 搬過來。&amp;nbsp;&lt;/div&gt;export set TSLIB_ROOT=/usr/local/tslib&lt;br /&gt;export set TSLIB_TSDEVICE=/dev/event0&lt;br /&gt;export set QWS_MOUSE_PROTO=tslib:/dev/event0&lt;br /&gt;export set TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts&lt;br /&gt;export set TSLIB_CONSOLEDEVICE=none&lt;br /&gt;export set TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;b&gt;(4) tslib測試&lt;/b&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;[1] 編輯 &lt;b&gt;tslib的設定檔 /usr/local/tslib/etc/ts.conf 開啟 module_raw_input&lt;/b&gt;。&amp;nbsp;&lt;/div&gt;&lt;div style="color: black;"&gt;[2] 執行 tslib測試：&lt;/div&gt;&lt;div style="color: black;"&gt;#cd /usr/local/tslib/bin &lt;/div&gt;#./ts_calibrate (touch panel 的校準測試)  有反應，表示 tslib 有安裝成功。&lt;br /&gt;&lt;br /&gt;&lt;div style="color: black;"&gt;&lt;b&gt;(5) Qt 測試&lt;/b&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;[1] 寫一個簡單的程式來測試 Qt：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/TGig_oBic6I/AAAAAAAAFwM/17IEcCjUTaw/s1600/Hello.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="177" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/TGig_oBic6I/AAAAAAAAFwM/17IEcCjUTaw/s400/Hello.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;[2] 編譯 Qt：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;#/usr/local/Trolltech/QtEmbedded-4.6.3-arm-cross-4.1.2/bin/qmake hello&lt;/div&gt;#/usr/local/Trolltech/QtEmbedded-4.6.3-arm-cross-4.1.2/bin/qmake&lt;br /&gt;#make clean&lt;br /&gt;#make&lt;br /&gt;&lt;div class="separator" style="clear: both; color: red; text-align: left;"&gt;&lt;b&gt;＊ 每次 Compiler都要打這堆，可以直接寫成 shell 比較省事。&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;[3] 把產生的 hello 丟到板子開看效果。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;[4] 結果應該是會缺一些 library，這些 library 可以在 arm-linux-gcc 包含的 library找到&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b style="color: red;"&gt;/opt/toolchains/arm920t-eabi/arm-linux/lib&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;[5] 再執行一次應該可以順利看到 Hello World了~~&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;其他：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(1) Qt Compiler 的過程，在 Configure 少了 &lt;b style="color: red;"&gt;-qt-mouse-tslib&lt;/b&gt; 會導致 tslib 在 Qt 上的運行不正常。少了 &lt;b style="color: red;"&gt;-I/usr/local/tslib/include -L/usr/local/tslib/lib &lt;/b&gt;會導致找不到會用到內容；加了這些東西如果 make 出現 error 時，再補上 &lt;b style="color: red;"&gt;-lts &lt;/b&gt;就會正確了。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(2) 使用開發版附的套件包裡面的 arm-linux-gcc 4.3.2 編譯完成之後會出現 Segmentation Fault的錯誤訊息，但是改用 4.1.2 之後，沒有發生這個問題。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(3) 試用 Qt embedded 4.5.3 的過程，不會產生有些 Library 找不到的情況，Qt 4.6.3 用到的東西比較多反正到 arm-linux-gcc 安裝目錄缺什麼就補什麼就是了。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(4) 有些人會裝什麼 x86 的版本，不過因為版本已經更新到 Qt 4.6.3 了，所以其實可以直接抓Qt 的 SDK 來用就好了；Compiler真的很久，就別費心裝太多版本了....&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-2318356358958020580?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/2318356358958020580/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/08/qt-463-tslib-14-ubuntu-910-mini2440.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2318356358958020580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2318356358958020580'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/08/qt-463-tslib-14-ubuntu-910-mini2440.html' title='【筆記】Qt 4.6.3 &amp; tslib 1.4 在 Ubuntu 9.10 安裝及移植到 mini2440'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/TGig_oBic6I/AAAAAAAAFwM/17IEcCjUTaw/s72-c/Hello.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-567098143452573457</id><published>2010-06-30T09:48:00.000-07:00</published><updated>2010-06-30T09:50:36.362-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Vulnerability Scanner'/><title type='text'>【筆記】State of the Art: Automated Black-Box Web Application Vulnerability Testing</title><content type='html'>Paper在這裡：&lt;a href="http://theory.stanford.edu/%7Ejcm/papers/pci_oakland10.pdf"&gt;State of the Art: Automated Black-Box Web Application Vulnerability Testing&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;這篇文章使用了八套商業的 Web Vulnerability Scanner試圖比較 Web Vulnerability Scanner找出的弱點和實際情況的差距，同時了解 Web Vulnerability Scanner 的限制（無法找出的特定弱點），引導 Web Vulnerability Scanner 工具開發的方向。 &lt;br /&gt;&lt;br /&gt;&amp;nbsp;方法：&lt;br /&gt;一、使用&lt;b style="color: red;"&gt;八套商業用的 Web Vulnerability Scanner&lt;/b&gt; 做測試（商業軟體的功能比較全面，對弱點的分類方式也比較一致。（WASC, OWASP Top 10, CWE Top 25）&lt;br /&gt;&lt;br /&gt;二、掃瞄對象有兩組：(1) 研究團隊自己建置已知弱點的網站（phpBB,WordPress…）刻意選擇較舊的版本 [&lt;b style="color: red;"&gt; 新版本在更新時有提示舊版的弱點&lt;/b&gt;]。(2) 一般公開的網站。&lt;br /&gt;&lt;br /&gt;三、以 NIST、WASC 規範中的弱點項目來檢視 Web Vulnerability Scanner 的效果。&lt;br /&gt;&lt;br /&gt;四、和 &lt;b&gt;VUPEN&lt;/b&gt;做比較，檢視 Web Vulnerability Scanner發現的弱點情況和實際情況的差距？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;＊ 研究中使用了八套商業軟體，但是目的是為了讓實驗的可靠度提高，而不是在比較八套軟體的優劣，所以文中只有排名不具名列出工具的各項表現。&lt;br /&gt;&lt;br /&gt;研究的結論：&lt;br /&gt;(1) Web Vulnerability Scanner發現的弱點項目和&amp;nbsp; VUPEN 中的統計不盡相同。VUPEN中常見的 XCS（Cross Channel Scripting）並沒有常被發現，反而是比例較少的 Information Leak 常被發現。&lt;br /&gt;&lt;br /&gt;(2)關於最常見的 XSS、SQL Injection；Web Vulnerability Scanner 在檢查上顯然有弱點，對於&lt;br /&gt;&lt;b style="color: red;"&gt;“儲存式”的 XSS&lt;/b&gt;以及 &lt;b style="color: red;"&gt;Type Ⅱ SQL Injection&lt;/b&gt; 發現率偏低。&lt;br /&gt;&lt;br /&gt;&lt;b style="color: blue;"&gt;Note 1：&lt;/b&gt;儲存式的 XSS – 最常見測試 XSS的方式是直接塞入“有反應”的變數，例如：&lt; script &gt; alert("xss"); &lt;/ script &gt; ；儲存式的XSS 指的是另一種竊取網頁資訊的方式，例如：&lt; script &gt; ooxx = &lt;b&gt;document.cookie&lt;/b&gt;; &lt;/ script &gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: blue;"&gt;Note 2：&lt;/b&gt;Type Ⅱ SQL Injection – 一般最常見的 SQL Injection是直接塞入 ' 、OR 1=1 這種字串，試圖導出 SQL 中的回應。Type Ⅱ 的做法則是兩段式的。例如：&lt;span style="color: black; font-family: Arial; font-size: 12pt;"&gt;&lt;b&gt;SELECT&lt;/b&gt; username FROM &lt;/span&gt;&lt;span style="color: black; font-family: Arial; font-size: 12pt;"&gt;sessiontable&lt;/span&gt;&lt;span style="color: black; font-family: Arial; font-size: 12pt;"&gt; WHERE session ='''||&lt;/span&gt;&lt;span style="color: black; font-family: Arial; font-size: 12pt;"&gt;sessionid&lt;/span&gt;&lt;span style="color: black; font-family: Arial; font-size: 12pt;"&gt;||'''' &lt;b&gt;into&lt;/b&gt; &lt;b style="color: red;"&gt;username&lt;/b&gt;; 先想辦法把資料撈出來偷放進去另一個 Table，再從另一個 Table &lt;/span&gt;&lt;span style="color: black; font-family: Arial; font-size: 12pt;"&gt;直接讀出想要的資訊 &lt;b&gt;SELECT &lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: black; font-family: Arial; font-size: 12pt;"&gt;ssn&lt;/span&gt;&lt;span style="color: black; font-family: Arial; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM users&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE username='''||username||'''' into &lt;/span&gt;&lt;span style="color: black; font-family: Arial; font-size: 12pt;"&gt;ssn&lt;/span&gt;&lt;span style="color: black; font-family: Arial; font-size: 12pt;"&gt;;&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-567098143452573457?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/567098143452573457/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/06/state-of-art-automated-black-box-web.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/567098143452573457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/567098143452573457'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/06/state-of-art-automated-black-box-web.html' title='【筆記】State of the Art: Automated Black-Box Web Application Vulnerability Testing'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-7123347673230170286</id><published>2010-06-22T08:35:00.000-07:00</published><updated>2010-06-22T08:35:51.481-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><title type='text'>【筆記】HTTP Header(Cookies)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;關於 HTTP Cookies 可以看 Wiki 百科的介紹：&lt;a href="http://en.wikipedia.org/wiki/HTTP_cookie"&gt;HTTP cookie&lt;/a&gt; ，Http cookies 是1994年當時任職於 Nescape 的工程師 Lou Montulli 發明的機制。因為 Http 的協定中只有 『狀態』， 沒有方向性，且不做特殊記錄，所以為了留住使用者在線上購物中的選購記錄，發明了 Cookies 後來沿用到其他場合。&lt;/div&gt;&lt;br /&gt;HTTP Cookies 的使用方式通常從『登入』的動作開始。&lt;br /&gt;&lt;br /&gt;(1) 使用者從 瀏覽器 登入&amp;nbsp; ( Request） 登入帳號、密碼&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TCDR0Chx3yI/AAAAAAAAFfo/uIH9reJNchE/s1600/Send.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TCDR0Chx3yI/AAAAAAAAFfo/uIH9reJNchE/s640/Send.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(2) 伺服器 接收到登入的資訊之後（Response），Header中會多一個 Set-cookies的欄位填入cookies 的內容（後來又多了 Set-cookies2，還沒看先不討論 Orz）。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TCDR108yyII/AAAAAAAAFfw/6auuez1KkEU/s1600/Set.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="217" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TCDR108yyII/AAAAAAAAFfw/6auuez1KkEU/s640/Set.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;(3)瀏覽器 接收後會記錄 cookies 的內容，從此 Request 的 Header 就會多一個 cookies 的內容。雙方就從這裡辨識兩方的身份。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TCDR2yE4E3I/AAAAAAAAFf4/SY-kGMYBQXA/s1600/Get.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="224" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TCDR2yE4E3I/AAAAAAAAFf4/SY-kGMYBQXA/s640/Get.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;簡單的介紹完 Cookies 的用法，接下來；&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;介紹這篇文章 ：&lt;a href="http://w2spconf.com/2010/papers/p25.pdf"&gt;Why Aren't HTTP-only Cookies More Widely Deployed&lt;/a&gt;&lt;/div&gt;只有5頁，很符合我的英文程度。Orz&lt;br /&gt;&lt;br /&gt;這篇文章中介紹了 Cookies 中，HttpOnly&amp;nbsp; 的機制，這是 Cookie中一個簡單的設計，主要的目的是為了防止一種 Cross-site Scripting (XSS) 的攻擊，HttpOnly 會去限制 XMLHttpRequest，使用 XMLHttpRequest 的方式再配合 HTTP 中的 Trace Method 就可以順利拿到 Cookies。&lt;br /&gt;&lt;br /&gt;在 Cookies 使用了 HttpOnly 這個標籤之後，透過 JavaScript 去讀取 Cookies 這部份會變成亂碼，當然還是可以利用 sniffer (EX： Whireshark 這類的工具) ，讀取 http 封包把Cookies 攔截下來；而且 HttpOnly 只對偷取 Cookies 的內容有作用，並無法對其他類型的 XSS發揮作用；即使如此，因為建置方式極為簡單，所以這個方法仍然被大量使用。&lt;br /&gt;&lt;br /&gt;不過這篇文章探討的是這麼簡單的防禦措施為什麼從 2002年 IE6首度使用到 2010年 8年的時間普及率才大約50%；這方面牽涉到網路的發展：瀏覽器的版本、伺服器的版本、建置網站的程式語言支援程度；即使是這麼簡單的安全設定也必須經過時間的演變讓『制度』自然成形。（所以才永遠都不安全啦～～）&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-7123347673230170286?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/7123347673230170286/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/06/http-headercookies.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7123347673230170286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7123347673230170286'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/06/http-headercookies.html' title='【筆記】HTTP Header(Cookies)'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oF_vbQi9p8w/TCDR0Chx3yI/AAAAAAAAFfo/uIH9reJNchE/s72-c/Send.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-4715069963225192235</id><published>2010-06-09T09:17:00.000-07:00</published><updated>2010-06-22T07:50:27.936-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><title type='text'>【筆記】HTTP Method</title><content type='html'>HTTP 的資料傳輸方式（Method）定義在 &lt;a href="http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf"&gt;RFC 2616&lt;/a&gt; 的第9章；&lt;br /&gt;&lt;br /&gt;從 Request 丟出 Method （下圖）&lt;br /&gt;&amp;nbsp;&lt;img src="http://lh4.ggpht.com/_oF_vbQi9p8w/TA-yXxglpMI/AAAAAAAAFdY/J0r5p4rvKXQ/s800/Request.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;Response收到 Method 之後，會依照 Method的要求回應相關的資訊（下圖）。&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/_oF_vbQi9p8w/TA-y2ZTo0MI/AAAAAAAAFd0/vn_s17DUoxk/s800/Response.PNG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Http 中預設的 Method 是 GET；常見需要取得特定網站的資料使用的 Method 就是 GET。&lt;br /&gt;GET也可以用來傳遞參數&lt;br /&gt;&lt;br /&gt;例如這種明顯可以看到變數、變數值的網址，就是使用 GET 這種方式&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;b&gt;http://search.ruten.com.tw/search/s000.php?&lt;/b&gt;&lt;b style="color: red;"&gt;searchfrom=indexbar&lt;span style="color: black;"&gt;&amp;amp;&lt;/span&gt;k=%B5u%B9u&lt;span style="color: black;"&gt;&amp;amp;&lt;/span&gt;t=0&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;另外一種常用於帳號、密碼登入用的 Method，明明有輸入帳號、密碼，&lt;br /&gt;可是繼續執行時後面不帶參數的 Method 是 POST&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #351c75;"&gt;＊雖然沒辨法從網址看到參數、變數內容；可是POST並沒有比 GET安全。&lt;br /&gt;還是可以透過 WebScarab、Paros Proxy…等工具看到實際輸入的值。 &lt;/b&gt;&lt;br /&gt;&lt;div style="color: #351c75;"&gt;&lt;br /&gt;&lt;/div&gt;除了最常見的 GET、POST 兩種 Method之外，&lt;br /&gt;RFC 2616的文件中還提及了：&lt;br /&gt;OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT…等方式。&lt;br /&gt;&lt;br /&gt;其中這些 Method 並不是全部都安全。其中 &lt;b&gt;PUT &lt;/b&gt;的功能就是新增、修改網站檔案的方式；&lt;br /&gt;另外&lt;b&gt; DELETE&lt;/b&gt; 的功能就是刪除網站的檔案。對一個公開的網站來說，這兩個Method都&lt;br /&gt;非常不安全；通常弱點掃瞄工具會確認這些 Method 是否被開啟？同時建議網站管理者&lt;br /&gt;關閉這些不安全的功能。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;另一個被建議關閉的 Method 是 &lt;b&gt;TRACE&lt;/b&gt;，這個 Method 允許使用者使用Apache Server的&lt;br /&gt;mod_rewrite模組 rewrite一些 request header 的內容，使用者可以透過這種方式，置入&lt;br /&gt;惡意內容 （Cross-Site Scripting）&lt;br /&gt;&lt;br /&gt;&lt;b&gt;OPTIONS&lt;/b&gt; 這個 Method 的功能，如上面兩張圖所示，可以顯示出網站中的設定，確認在&lt;br /&gt;網站中允許使用了那些 Method 。&lt;br /&gt;&lt;br /&gt;最後，以協定來說當然是&lt;b style="color: red;"&gt;有規定的&lt;/b&gt;才有作用，可是沒有規定自己訂似乎是很正常的？&lt;br /&gt;Microsoft IIS 的 Server 好意的訂了一個名為 &lt;b style="color: red;"&gt;Debug&lt;/b&gt; 的 Method ，使用者可以透過 Debug&lt;br /&gt;這個Method 去取得更多 Server的資訊。這個 Method 在 Debug 程式時的確很方便不過&lt;br /&gt;上線之後如果沒有關閉就是另一個問題了；所以在網站弱點掃瞄時，通常也會針對這種&lt;br /&gt;特定 Server 自己定義的 Method 做檢查。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-4715069963225192235?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/4715069963225192235/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/06/http-method.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4715069963225192235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4715069963225192235'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/06/http-method.html' title='【筆記】HTTP Method'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_oF_vbQi9p8w/TA-yXxglpMI/AAAAAAAAFdY/J0r5p4rvKXQ/s72-c/Request.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-5222060878569392424</id><published>2010-06-06T06:16:00.000-07:00</published><updated>2010-06-22T07:50:27.937-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><title type='text'>【筆記】HTTP Response Header(Server)</title><content type='html'>HTTP 的結構很清楚明確，所以 Web Vulnerability Scanner 要找弱點最快的方式就是從&lt;br /&gt;Header 提供的這些訊息下手；例如：Http Response Header 中的 Server欄位中會列出&lt;br /&gt;連繫的 Server 版本：&lt;br /&gt;&lt;br /&gt;裡面通常會提示使用的 Server類型、支援的模組（mod_SSL、Open SSL）、支援的&lt;br /&gt;程式語言（PHP、Perl、Python和版本）&lt;br /&gt;&lt;br /&gt;這是弱點掃瞄中必要的檢查，了解了使用的Server、程式語言比較容易找出弱點的類型；&lt;br /&gt;另外因為有提供版本。通常各個軟體通常會提供版本的 Bug修復，所以如果使用的版本太舊&lt;br /&gt;或者沒有更新已知的弱點；就會反而變成被攻擊的弱點。&lt;br /&gt;&lt;br /&gt;所以 Web Vulnerability Scanner 通常會先確認 Server 的版本及相關資訊。&lt;br /&gt;&lt;br /&gt;(一) 這個例子列的 Server版本相當詳細（下圖）：&lt;br /&gt;使用 Apache 2.0.55 (ubuntu) 的 Server、同時支援 Apache 下的一堆 module&lt;br /&gt;可以使用了Python 2.4.3、PHP 5.1.2、Perl 5.8.7 的程式語言。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TAue9hk9G5I/AAAAAAAAFbY/4vh2NlV7pUg/s1600/testphp.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="270" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TAue9hk9G5I/AAAAAAAAFbY/4vh2NlV7pUg/s640/testphp.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;(二) 這個例子列的 Server版本（下圖）：使用 Microsoft-IIS 6.0 的 Server&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TAue82c50TI/AAAAAAAAFbQ/EScoN4wpbkc/s1600/testasp.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="290" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TAue82c50TI/AAAAAAAAFbQ/EScoN4wpbkc/s640/testasp.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;(三) 這個例子列的 Server版本（下圖）：這是 www.google.com攔截下來的 Server版本，&lt;br /&gt;簡單的提示一下 GWS 其他的資訊均沒有提供。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/TAue70zUISI/AAAAAAAAFbI/I8NP-33eToU/s1600/google.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="372" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/TAue70zUISI/AAAAAAAAFbI/I8NP-33eToU/s640/google.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-5222060878569392424?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/5222060878569392424/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/06/http-response-headerserver.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5222060878569392424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5222060878569392424'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/06/http-response-headerserver.html' title='【筆記】HTTP Response Header(Server)'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oF_vbQi9p8w/TAue9hk9G5I/AAAAAAAAFbY/4vh2NlV7pUg/s72-c/testphp.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-5912330389861783809</id><published>2010-06-04T09:04:00.000-07:00</published><updated>2010-06-22T07:50:27.939-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><title type='text'>【筆記】HTTP (01)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;本來覺得 HTTP的協定內容看起來似乎很單純，&lt;/div&gt;可是最近做　WVS 才發現；&lt;br /&gt;架構很簡單可是能動手腳的地方真的很多啊~~ &lt;br /&gt;弱點就是這樣跑出來的。　Orz&lt;br /&gt;&lt;br /&gt;所以...&lt;br /&gt;從頭開始，先把 HTTP摸的更清楚再說~~&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TAkgrVr7zvI/AAAAAAAAFag/F2hmLauHkoo/s1600/HTTP.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="201" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TAkgrVr7zvI/AAAAAAAAFag/F2hmLauHkoo/s640/HTTP.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;HTTP的運作模式是由 Request/Response 組成的。Client端跟Server端建立連線之後，以HTTP的標準格式發送請求給Server。Server接收到這個請求之後，回應相對應的狀態碼，Response Header、Body。&lt;/div&gt;HTTP 通常使用 80 port &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;HTTP 的實作&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;1.建立連線：這部份使用 Socket 實現。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;2.發送請求：Client端，送出Request。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;HTTP 從 Client端，以 &lt;b style="color: red;"&gt;http://&lt;span style="color: black;"&gt;網址&lt;/span&gt;:&lt;span style="color: black;"&gt;Port&lt;/span&gt;/&lt;/b&gt;　格式送出請求。&lt;/div&gt;&lt;ul&gt;&lt;li&gt;http://後直接接網址。&lt;/li&gt;&lt;li&gt; 網址格式中，不分大小寫、文字格式可以以 %HEXHEX表示。&lt;/li&gt;&lt;li&gt;Port預設80。&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Request的內容（下圖）：&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Method 方式 / HTTP/1.1 \r\n → Method 方式，HTTP版本 (&lt;b style="color: red;"&gt;HTTP主版號一致才能溝通&lt;/b&gt;)&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;HTTP提供了幾個 Method 的格式。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;　　有些Method方式並不安全；EX：TRACE、PUT、DELETE…）&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;HTTP Request Header&lt;/b&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Date：時間&lt;/li&gt;&lt;li&gt;HOST：連接的網址&lt;/li&gt;&lt;li&gt;User-Agent：使用的瀏覽器&lt;/li&gt;&lt;li&gt;Accept：接受的檔案格式。&lt;/li&gt;&lt;li&gt;Accept-Language：使用的語言。 &lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/TAkmwgrQ2II/AAAAAAAAFa4/xIWZRd9U79M/s1600/Request.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="324" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/TAkmwgrQ2II/AAAAAAAAFa4/xIWZRd9U79M/s640/Request.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;3.發送回應：Server端，接收到Request，之後送回 Response。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&amp;nbsp;Response分成 Response Header、Body兩部份。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/TAkmI_VFUqI/AAAAAAAAFaw/e-z0z1GHfJQ/s1600/Response.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="324" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/TAkmI_VFUqI/AAAAAAAAFaw/e-z0z1GHfJQ/s640/Response.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Response 中 StatusCode的意義：&lt;br /&gt;&lt;b&gt;1××　　保留。&lt;/b&gt;&lt;br /&gt;&lt;b&gt;2××　　成功。&lt;/b&gt;&lt;br /&gt;&lt;b&gt;3××　　請求客戶提供進一步的需求。&lt;/b&gt;&lt;br /&gt;&lt;b&gt;4××　　Client端錯誤。&lt;/b&gt;&lt;br /&gt;&lt;b&gt;5××　　Server端錯誤。&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;4.關閉連接：結束TCP/IP對話。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-5912330389861783809?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/5912330389861783809/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/06/http.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5912330389861783809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5912330389861783809'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/06/http.html' title='【筆記】HTTP (01)'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oF_vbQi9p8w/TAkgrVr7zvI/AAAAAAAAFag/F2hmLauHkoo/s72-c/HTTP.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-4671969587584423530</id><published>2010-05-17T10:05:00.000-07:00</published><updated>2010-05-17T10:05:33.143-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工作筆記'/><title type='text'>【筆記】SQL Server 2008 效能計數器登錄區一致性問題排除</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;這是安裝 SQL Server 2008 看到的錯誤訊息，看不太懂微軟上的解釋 ^^;;;&lt;/div&gt;後來在別人的 Blog 找到解決方式。以下開始記錄。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S_Fy80gWP1I/AAAAAAAAFY8/S3aTa8uxNTU/s1600/01.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S_Fy80gWP1I/AAAAAAAAFY8/S3aTa8uxNTU/s640/01.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;錯誤訊息長這樣子，點選『檢視詳細資料報表』，可以連結微軟的官網。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S_FzwW-GEhI/AAAAAAAAFZE/BFqffnSK4R4/s1600/02.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="364" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S_FzwW-GEhI/AAAAAAAAFZE/BFqffnSK4R4/s640/02.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;『開始』→『執行』→輸入 regedit &lt;/div&gt;找到『HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Perlib』&lt;br /&gt;修改 LastCount 、 LastHelp 的值就可以了...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S_F0iKojyYI/AAAAAAAAFZM/GJ7wzBilroM/s1600/02-004Count.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="362" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S_F0iKojyYI/AAAAAAAAFZM/GJ7wzBilroM/s640/02-004Count.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;同一層有 004,009 兩個目錄&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;點選 Count，直接拉到最下方，以這個例子來看 004 的 Count 最大值是 &lt;b style="color: red;"&gt;8966&lt;/b&gt; &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S_F1I5dTEqI/AAAAAAAAFZU/7KoLCWd33Uo/s1600/02-009Count.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="364" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S_F1I5dTEqI/AAAAAAAAFZU/7KoLCWd33Uo/s640/02-009Count.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;依同樣的方式看009的Count，以這個例子來看 009 的 Count 最大值是 &lt;b style="color: red;"&gt;7290&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b style="color: red;"&gt;&lt;span style="color: #351c75;"&gt;所以，LastCount 的值就是 004中的8966&lt;/span&gt;&amp;nbsp;&lt;/b&gt; &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S_F1poNFNGI/AAAAAAAAFZc/QVDa7A9qVRo/s1600/02-004Help.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="364" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S_F1poNFNGI/AAAAAAAAFZc/QVDa7A9qVRo/s640/02-004Help.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;依同樣的方式來看 004 中的 Help，這個值是&lt;b style="color: red;"&gt;8967&lt;/b&gt; &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S_F1_qMIkbI/AAAAAAAAFZk/NqH5vySGBgk/s1600/02-009Help.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="364" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S_F1_qMIkbI/AAAAAAAAFZk/NqH5vySGBgk/s640/02-009Help.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;依同樣的方式看009的Help，以這個例子來看 009 的 Help 最大值是 &lt;b style="color: red;"&gt;7281&lt;/b&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b style="color: red;"&gt;&lt;span style="color: #351c75;"&gt;所以，LastHelp 的值就是 004中的8967&lt;/span&gt;&amp;nbsp;&lt;/b&gt; &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;接下來將 LastCount、LastHelp 分別重新填入 &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;LastCount&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S_F2kcaHPKI/AAAAAAAAFZs/FYtgLxRvhNo/s1600/02-LastCount.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="364" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S_F2kcaHPKI/AAAAAAAAFZs/FYtgLxRvhNo/s640/02-LastCount.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;回到Perflib中，將剛才LastCount填入；選擇&lt;b style="color: red;"&gt;十進制&lt;/b&gt;，數值為：&lt;b style="color: red;"&gt;8966&lt;/b&gt;。 &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;LastHelp&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S_F3AtBUWDI/AAAAAAAAFZ0/aXN0eRxBM1Y/s1600/02-LastHelp.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="364" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S_F3AtBUWDI/AAAAAAAAFZ0/aXN0eRxBM1Y/s640/02-LastHelp.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;回到Perflib中，將剛才LastHelp填入；選擇&lt;b style="color: red;"&gt;十進制&lt;/b&gt;，數值為：&lt;b style="color: red;"&gt;8967&lt;/b&gt;。 &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;修改完成，回去繼續安裝 SQL Server 2008。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-4671969587584423530?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/4671969587584423530/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/05/sql-server-2008.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4671969587584423530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4671969587584423530'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/05/sql-server-2008.html' title='【筆記】SQL Server 2008 效能計數器登錄區一致性問題排除'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oF_vbQi9p8w/S_Fy80gWP1I/AAAAAAAAFY8/S3aTa8uxNTU/s72-c/01.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-8278428985971989618</id><published>2010-05-04T04:58:00.000-07:00</published><updated>2010-05-04T04:58:32.863-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Vulnerability Scanner'/><title type='text'>【筆記】Web弱點掃瞄工具掃瞄模組運作方式</title><content type='html'>Web弱點掃瞄工具的掃瞄運作方式大致分成2類：爬站、弱點掃瞄。&lt;br /&gt;&lt;br /&gt;運作流程：弱點掃瞄之前通常會先爬站，瞭解網站架構，再針對各個的連結進行弱點掃瞄的工作；有些軟體會省略爬站的動作，直接對特定的連結進行弱點掃瞄。&lt;br /&gt;&lt;br /&gt;這篇文章記錄弱點掃瞄的做法：&lt;br /&gt;&lt;br /&gt;&lt;b&gt;一、SecuBat：&lt;/b&gt; 每一個弱點掃瞄方式，寫成一個可以獨立使用的 plugin ，在主程式中選擇掛載、勾選使用。（弱點掃瞄的 “規則” 分散存在於各個 plugin之中）。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S99fymT0ThI/AAAAAAAAFXM/H_x91Y6m_fo/s1600/SecuBat.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="390" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S99fymT0ThI/AAAAAAAAFXM/H_x91Y6m_fo/s640/SecuBat.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;SecuBat 新增 Plugin的畫面，可以在主畫面選擇使用 plugin &lt;/div&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;＊新增符合格式的 plugin&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;二、Nikto&lt;/b&gt;：Nikto 的主程式在運作時，會自動檢查可用的 plugin，執行掃瞄時直接使用。plugin程式的組成，比較特別的是 Nikto_tests.plugin 這個程式。Nikto 將大部份的掃瞄弱點“規則化”寫入 db_test之中，Nikto_test.plugin 直接導入 db_test的資料做弱點掃瞄。無法處理的其他部份才新增其他的 plugin程式處理。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S-AIzpquGZI/AAAAAAAAFXc/IFx9NOh1-G8/s1600/Nikto_db_test.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S-AIzpquGZI/AAAAAAAAFXc/IFx9NOh1-G8/s640/Nikto_db_test.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;＊可以編輯 db_test 新增規則 或者 新增符合格式的 plugin&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;三、Wapiti&lt;/b&gt;：Wapiti的主程式運作會參考 attack 中的 __init__.py 中設定欲使用的 plugin 使用選定的方式進行弱點掃瞄。&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;＊可以編輯各個 plugin 在 config目錄中的資料檔新增規則 或者 新增符合格式的 plugin&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;四、Grendel-Scan&lt;/b&gt;： 可以直接從介面勾選要使用的弱點掃瞄方式，程式架構和 Wapiti比較類似，可以在相對應的資料檔新增弱點掃瞄的資料。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S-AKHhJYSvI/AAAAAAAAFXk/-u4hDpXYfC8/s1600/Grendel-Scan.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S-AKHhJYSvI/AAAAAAAAFXk/-u4hDpXYfC8/s640/Grendel-Scan.PNG" width="316" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="color: #000099;"&gt;&lt;b&gt;Grendel-Scan 的使用者介面。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;＊可以在各個 plugin 相對應的資料檔新增弱點掃瞄的資料 或 新增符合格式的 plugin。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;五、SPIKE Proxy&lt;/b&gt;：將所有弱點判斷方式製作成 XML 格式，直接導入 XML 規則做弱點掃瞄；程式沒有異動。&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;＊直接依特定格式新增弱點掃瞄的資料即可。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S99jNF-wqzI/AAAAAAAAFXU/HolHe20SV5I/s1600/SPIKE+Proxy.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="308" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S99jNF-wqzI/AAAAAAAAFXU/HolHe20SV5I/s640/SPIKE+Proxy.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;六、w3af &lt;/b&gt;： 可以直接從介面勾選要使用的弱點掃瞄方式，每個掃瞄方式直接和一個 plugin (.py檔)相對應，測試資料直接包在程式裡面。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S-AKg2XNNCI/AAAAAAAAFXs/AICoA_0anM8/s1600/w3af.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="406" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S-AKg2XNNCI/AAAAAAAAFXs/AICoA_0anM8/s640/w3af.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #000099;"&gt;&lt;b&gt;w3af plugin的設定介面。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;＊必須去修改程式的內容。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;七、paros proxy &lt;/b&gt;： 可以直接從介面勾選要使用的弱點掃瞄方式，設定後可以儲存成profile檔案。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S-ALKYOcXvI/AAAAAAAAFX0/HhLyUtZ2cVE/s1600/paros.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="452" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S-ALKYOcXvI/AAAAAAAAFX0/HhLyUtZ2cVE/s640/paros.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #000099;"&gt;&lt;b&gt;paros proxy 的掃瞄項目設定介面。&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;八、N-stalker &lt;/b&gt;： 可以直接從介面勾選要使用的弱點掃瞄方式，也可以直接選用預設的 profile來用。&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S-ALqL-w9LI/AAAAAAAAFYE/R6f-DOqGA8o/s1600/n-Stalker.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="366" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S-ALqL-w9LI/AAAAAAAAFYE/R6f-DOqGA8o/s640/n-Stalker.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #000099;"&gt;&lt;b&gt;N-Stalker 的掃瞄項目設定介面。&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-8278428985971989618?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/8278428985971989618/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/05/web.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8278428985971989618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8278428985971989618'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/05/web.html' title='【筆記】Web弱點掃瞄工具掃瞄模組運作方式'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oF_vbQi9p8w/S99fymT0ThI/AAAAAAAAFXM/H_x91Y6m_fo/s72-c/SecuBat.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-7259993795640048704</id><published>2010-04-11T06:51:00.000-07:00</published><updated>2010-04-11T06:53:33.702-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='實用工具'/><title type='text'>【工具】Vanish安裝</title><content type='html'>Vanish 是自動毀滅信件的實作&lt;br /&gt;這個軟體可以讓寄出的信件在一定時間後被『&lt;b&gt;消毀&lt;/b&gt;』&lt;br /&gt;參考連結：&lt;a href="http://www.bnext.com.tw/article/view/cid/0/id/2124"&gt;新軟體Vanish讓網路文件覆水可收&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;本來有提供 install 的內容可以直接安裝在 Fireforx上做測試，&lt;br /&gt;不過連結已經被拿掉了&lt;br /&gt;如果還是想試，現在得直接拿 Source Code 去試了...&lt;br /&gt;&lt;br /&gt;Source Code 在這裡：&lt;a href="http://vanish.cs.washington.edu/download.html"&gt;http://vanish.cs.washington.edu/download.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;主程式有這三個：（授權方式不太一樣，要改的可能要注意一下）&lt;br /&gt;&lt;div style="color: #20124d;"&gt;&lt;b&gt;　Vanish Core&lt;br /&gt;Vuze Vanish Backend&lt;br /&gt;Firefox Vanish Plugin&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;程式使用 Java開發，直接使用 Ant 去 build XML 檔之後就可以執行了&lt;/b&gt;&lt;br /&gt;＊vanish 的官方網站上面有詳細的說明...&lt;br /&gt;&lt;br /&gt;Vanish Core 、Vuze Vanish Backend build 成功後&lt;br /&gt;就可以測試對檔案做 加/解密了...&lt;br /&gt;&lt;br /&gt;Firefox Vanish Plugin 是把這個功能在 Firefox 中實現&lt;br /&gt;EX：Gmail&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh4.ggpht.com/_oF_vbQi9p8w/S71ekusQpYI/AAAAAAAAFNc/BPu72YZJy4U/s1600/Vanish_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="411" src="http://lh4.ggpht.com/_oF_vbQi9p8w/S71ekusQpYI/AAAAAAAAFNc/BPu72YZJy4U/s640/Vanish_01.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;安裝之後可以在 Firefox的工具下看到選項 &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_oF_vbQi9p8w/S73t5aOexsI/AAAAAAAAFOA/XjXNI1oUzL0/s1600/sucess01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="94" src="http://lh5.ggpht.com/_oF_vbQi9p8w/S73t5aOexsI/AAAAAAAAFOA/XjXNI1oUzL0/s640/sucess01.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;選取文字之後選擇 Create Vanish Message 開始進行編碼，&lt;/div&gt;編碼完成之後如上圖，把編碼後的內容選取寄出就可以了....&lt;br /&gt;收到信件之後使用 Vanish 把密件解開&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://lh4.ggpht.com/_oF_vbQi9p8w/S73t5maU9UI/AAAAAAAAFOE/2C4J3e-wWeM/s1600/sucess02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="70" src="http://lh4.ggpht.com/_oF_vbQi9p8w/S73t5maU9UI/AAAAAAAAFOE/2C4J3e-wWeM/s640/sucess02.png" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;最後這一段是差異性，如果在期限之後，&lt;/div&gt;就算使用 Vanish 也無法將之前的密件還原了....&lt;br /&gt;&lt;b&gt;＊有時效性的密件 &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh3.ggpht.com/_oF_vbQi9p8w/S76JcG2EU7I/AAAAAAAAFOk/-kdP9rUzzjw/s1600/sucess03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="412" src="http://lh3.ggpht.com/_oF_vbQi9p8w/S76JcG2EU7I/AAAAAAAAFOk/-kdP9rUzzjw/s640/sucess03.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-7259993795640048704?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/7259993795640048704/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/04/vanish.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7259993795640048704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7259993795640048704'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/04/vanish.html' title='【工具】Vanish安裝'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_oF_vbQi9p8w/S71ekusQpYI/AAAAAAAAFNc/BPu72YZJy4U/s72-c/Vanish_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-2721898998738446616</id><published>2010-03-25T19:39:00.000-07:00</published><updated>2010-03-25T20:18:39.807-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='實用工具'/><title type='text'>【工具】Vmware 新增硬碟</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;使用Vmware一定會遇到這個問題，磁碟空間不夠用 ^^y&lt;br /&gt;在網路上查詢到一個方式直接使用指令增加磁碟空間&lt;br /&gt;這裡介紹另一個方式，直接在 Vmare中再新增另一個空的磁碟...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;一、首先點選『Edit Visual Machine Settings』 ，新增 Visual Machine中的設備~~&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6wWwHFmtvI/AAAAAAAAFIE/mgKLWfAmNys/s1600/N_01.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="484" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6wWwHFmtvI/AAAAAAAAFIE/mgKLWfAmNys/s640/N_01.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;二、進入後可以看到目前的配置，點選 Add，新增要加入的設備&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wXFVi8I4I/AAAAAAAAFIM/P5n1_IlDv_c/s1600/N_02.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="562" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wXFVi8I4I/AAAAAAAAFIM/P5n1_IlDv_c/s640/N_02.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;三、新增硬體，選擇硬碟&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6wX90TH2uI/AAAAAAAAFIk/qd5zeRJbVNI/s1600/N_03.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="636" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6wX90TH2uI/AAAAAAAAFIk/qd5zeRJbVNI/s640/N_03.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;四、新增磁碟，新增or加入原有的設定內容&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6wXwXwhfNI/AAAAAAAAFIc/iw7mC9sy838/s1600/N_04.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6wXwXwhfNI/AAAAAAAAFIc/iw7mC9sy838/s640/N_04.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;五、新增硬碟、基本設定 IDE/SCSI …&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S6wYORz6rhI/AAAAAAAAFIs/0FgjCaGmh64/s1600/N_05.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S6wYORz6rhI/AAAAAAAAFIs/0FgjCaGmh64/s640/N_05.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;六、設定硬碟空間&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6wYfEFOAlI/AAAAAAAAFI0/NVr7UEo-47U/s1600/N_06.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="638" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6wYfEFOAlI/AAAAAAAAFI0/NVr7UEo-47U/s640/N_06.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;七、儲存新增設定檔的檔名&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wYqwnqTRI/AAAAAAAAFI8/MHseJTuahco/s1600/N_07.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wYqwnqTRI/AAAAAAAAFI8/MHseJTuahco/s640/N_07.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;八、新的硬碟開出來了（這是新增後的設定檔）&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wY3uPr6xI/AAAAAAAAFJE/okmbBZzDeKw/s1600/N_08.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wY3uPr6xI/AAAAAAAAFJE/okmbBZzDeKw/s640/N_08.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;九、設定完成，開機看看（沒看到新加入的硬碟）&lt;/div&gt;&lt;b style="color: red;"&gt;之後的步驟，跟新加入一顆碟碟做的事一樣&lt;/b&gt; &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S6wZQOFAFQI/AAAAAAAAFJU/EbOxPkuRJKM/s1600/N_09.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="432" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S6wZQOFAFQI/AAAAAAAAFJU/EbOxPkuRJKM/s640/N_09.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;十、去控制台 → 系統管理工具 看看 &amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wZty0qhlI/AAAAAAAAFJc/CSWJRFSSnqg/s1600/N_10.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wZty0qhlI/AAAAAAAAFJc/CSWJRFSSnqg/s640/N_10.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;十一、去 控制台 → 系統管理工具 → 電腦管理 &amp;nbsp;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6waFf7ZMNI/AAAAAAAAFJk/dnos_A6ojvA/s1600/N_11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6waFf7ZMNI/AAAAAAAAFJk/dnos_A6ojvA/s640/N_11.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;十二、 電腦管理 （硬碟確實有新增出來，但是還沒有配置） &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6waS1jf3dI/AAAAAAAAFJs/-UXv5ydC3tg/s1600/N_12.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="552" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6waS1jf3dI/AAAAAAAAFJs/-UXv5ydC3tg/s640/N_12.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;十三、初始化之後將這顆硬碟配置進來~~  &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wao0eSnzI/AAAAAAAAFJ0/UoUcq4-kNAY/s1600/N_13.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="460" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wao0eSnzI/AAAAAAAAFJ0/UoUcq4-kNAY/s640/N_13.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;十四、設定磁碟類型，太複雜我不會用，沒其他可以選更好&amp;nbsp; ^^y&amp;nbsp;&amp;nbsp;  &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wa5ZGgAfI/AAAAAAAAFJ8/ih8D7ElOeh0/s1600/N_14.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="460" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wa5ZGgAfI/AAAAAAAAFJ8/ih8D7ElOeh0/s640/N_14.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;十五、把這顆硬碟加進來... &amp;nbsp; &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S6wbPNy3WJI/AAAAAAAAFKE/MyZMNsI-E2s/s1600/N_15.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="456" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S6wbPNy3WJI/AAAAAAAAFKE/MyZMNsI-E2s/s640/N_15.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;十六、設定磁碟代號 （看個人狀況；C 是原來那個，D被光碟機用掉了；E 剛好） &lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wb8kED11I/AAAAAAAAFKU/UtsXPQZnQio/s1600/N_16.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="464" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S6wb8kED11I/AAAAAAAAFKU/UtsXPQZnQio/s640/N_16.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;十七、 設定完成看一下基本資訊~~&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S6wcktW-mGI/AAAAAAAAFKs/HUd2OefTGKE/s1600/N_18.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="464" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S6wcktW-mGI/AAAAAAAAFKs/HUd2OefTGKE/s640/N_18.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;十八、新磁碟被加進來了，開始格式化~~&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S6wcsv39xYI/AAAAAAAAFK0/vMT3ZpPh9Bs/s1600/N_19.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="580" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S6wcsv39xYI/AAAAAAAAFK0/vMT3ZpPh9Bs/s640/N_19.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;十九、回到我的電腦看看....現在多一顆硬碟可以用了 ^^y&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S6wc178kcfI/AAAAAAAAFK8/qRW9x6E-Xok/s1600/N_20.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="428" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S6wc178kcfI/AAAAAAAAFK8/qRW9x6E-Xok/s640/N_20.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;結論：&lt;br /&gt;看起來雖然很長，&lt;br /&gt;其實重點是直接在 Vmware上掛載需要的設備就能用了。&lt;br /&gt;後面的設定和實際新增硬碟後做的動作完全一模一樣 ~~~&lt;br /&gt;&lt;br /&gt;另一個做法是直接使用 Vmware中提供的 &lt;b style="color: red;"&gt;vmware-vdiskmanager.exe &lt;/b&gt;直接執行這個指令，會出現使用說明~~&lt;br /&gt;這篇文章，不另外說明了&amp;nbsp; ^_____^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-2721898998738446616?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/2721898998738446616/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/03/vmware.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2721898998738446616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2721898998738446616'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/03/vmware.html' title='【工具】Vmware 新增硬碟'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oF_vbQi9p8w/S6wWwHFmtvI/AAAAAAAAFIE/mgKLWfAmNys/s72-c/N_01.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-880424579728460456</id><published>2010-03-18T19:44:00.000-07:00</published><updated>2011-10-04T23:29:32.057-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><title type='text'>【筆記】libcurl練習</title><content type='html'>用過一些 Web Vulnerability Scanner工具 &amp;amp; 實際的看了 Nikto、Wapiti 的 Source Code&lt;br /&gt;實際 trace code 的過程比較能體會 Web Vulnerability Scanner 的『動作』&lt;br /&gt;&lt;br /&gt;回歸到工具的起點，看 cURL怎麼用？&lt;br /&gt;先瞭解 http的運作模式，比較能理解那些工具為什麼這樣運作&lt;br /&gt;&lt;br /&gt;cURL的官網：&lt;a href="http://curl.haxx.se/"&gt;http://curl.haxx.se/&lt;/a&gt;&lt;br /&gt;cURL可以直接用，官網也提供了可以供開發者使用的 Library – libcurl&lt;br /&gt;&lt;br /&gt;選擇這個工具的原因之一：&lt;br /&gt;&lt;b&gt;License：MIT&lt;/b&gt;&lt;br /&gt;&lt;div style="background-color: white; color: #cc0000;"&gt;&lt;b&gt;＊最寬鬆的授權方式之一，僅要求使用者的每頁要標明MIT授權；使用、修改程式碼之後，可以自行決定使用其他的授權方式（和GPL、LGPL相容）&lt;/b&gt;&lt;/div&gt;&lt;div style="background-color: white; color: #351c75;"&gt;&lt;br /&gt;&lt;/div&gt;使用方式：libcurl 是使用C語言開發的工具，可以用來截取一堆協定的封包內容。&lt;br /&gt;&lt;br /&gt;安裝　 &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6LYkmj2RfI/AAAAAAAAFCQ/ltugF2B_6tw/s1600-h/download.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="84" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S6LYkmj2RfI/AAAAAAAAFCQ/ltugF2B_6tw/s640/download.bmp" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;寫一小段 code 試用一下 libcurl：&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S6Ld6_c6b3I/AAAAAAAAFCY/xlj2TtAZT4I/s1600-h/libcurl.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="516" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S6Ld6_c6b3I/AAAAAAAAFCY/xlj2TtAZT4I/s640/libcurl.bmp" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;1. 加入 &lt;b style="color: red;"&gt;#include&lt;curl curl.h=""&gt; &lt;/curl&gt;&lt;/b&gt;有裝 curl Compiler就會過&lt;br /&gt;&lt;br /&gt;2.初始化：先把curl的參數初始化　curl = &lt;b&gt;&lt;span style="color: magenta;"&gt;curl_easy_init();&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;其實有很多參數可以用。&lt;br /&gt;&lt;br /&gt;3,4 命令：&lt;b&gt; &lt;span style="color: magenta;"&gt;curl_easy_setopt&lt;/span&gt;(curl,CURLOPT_&lt;span style="color: red;"&gt;XXX&lt;/span&gt;,argv[1]);&lt;/b&gt;&lt;br /&gt;curl_easy_setopt 這個 Function負責執行 curl 很多的動作，後兩個參數分別傳入&lt;b style="color: red;"&gt;指令&lt;/b&gt;、&lt;b&gt;&lt;span style="color: red;"&gt;參數&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;5.執行初始化：先把curl的參數初始化　&lt;b style="color: magenta;"&gt;curl = curl_easy_perform();&lt;/b&gt;&lt;br /&gt;其實有很多參數可以用。&lt;br /&gt;&lt;br /&gt;6.結束： &lt;b&gt;&lt;span style="color: magenta;"&gt;curl_easy_cleanup&lt;/span&gt;(curl);&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;執行&lt;/b&gt;&lt;b&gt;結果：&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S6LhPXfxuLI/AAAAAAAAFCg/C7_PZCRfQ-4/s1600-h/%E6%9C%AA%E5%91%BD%E5%90%8D.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="388" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S6LhPXfxuLI/AAAAAAAAFCg/C7_PZCRfQ-4/s640/%E6%9C%AA%E5%91%BD%E5%90%8D.bmp" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;順利的取得網頁內容了。&lt;br /&gt;&lt;br /&gt;程式的流程大致如上：&lt;br /&gt;更進階的使用，使用 SSL 的設定，使用 PROXY 的設定…&lt;br /&gt;上傳 Request 的 Header，取得 Response Header,Content 大部份都由 &lt;b&gt;&lt;span style="color: magenta;"&gt;curl_easy_setopt&lt;/span&gt;()&lt;/b&gt;&lt;br /&gt;執行，需要的參數及取得內容的方法可以參閱 libcurl的使用手冊 或 範例程式。&lt;br /&gt;&lt;br /&gt;使用手冊：&lt;a href="http://curl.haxx.se/libcurl/c/"&gt;http://curl.haxx.se/libcurl/c/&lt;/a&gt;&lt;br /&gt;範例程式：&lt;a href="http://curl.haxx.se/libcurl/c/example.html"&gt;http://curl.haxx.se/libcurl/c/example.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #351c75;"&gt;Web Vulnerability Scanner 的運作上，通常上傳特殊的 request header、特定路徑&lt;br /&gt;檢查 response 的 Header、Content 內容來判斷網站是否有可攻擊的弱點。&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-880424579728460456?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/880424579728460456/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/03/libcurl.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/880424579728460456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/880424579728460456'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/03/libcurl.html' title='【筆記】libcurl練習'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oF_vbQi9p8w/S6LYkmj2RfI/AAAAAAAAFCQ/ltugF2B_6tw/s72-c/download.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-3411062446915834154</id><published>2010-03-08T07:13:00.000-08:00</published><updated>2010-03-08T07:13:35.499-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Vulnerability Scanner'/><title type='text'>【筆記】Web弱點掃瞄工具掃瞄結果分析</title><content type='html'>&lt;div style="text-align: justify;"&gt;這篇報告自行建置了可以用來做攻擊測試的網站，選用了幾個Web弱點掃瞄工具對網站做自動化弱點掃瞄產生報表之後，以Acunetix為基準去比較幾個工具的掃瞄能力產生的報表內容。&lt;/div&gt;&lt;br /&gt;&lt;div style="background-color: #0b5394; color: white;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;1. 選擇攻擊測試網站&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;OWASP的官方網站中提供了一些可供測試環境 ( &lt;a href="http://www.owasp.org/index.php/Phoenix/Tools"&gt;http://www.owasp.org/index.php/Phoenix/Tools&lt;/a&gt; )，這些網站，這些內容部份是直接公開建置，可以直接讓使用者做攻擊測試的網站，其中有幾個網站中也提供了軟體讓使用者可以自行建置獨立做測試，為了避免其他的干擾，選擇直接在VM的環境下自行建置測試環境。&lt;/div&gt;&lt;br /&gt;&lt;b&gt;測試環境：&lt;/b&gt;&lt;br /&gt;&lt;div style="color: #351c75;"&gt;&lt;b&gt;A. BadStore：&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;BadStore是一個以GPL授權的開放原始碼軟體，目的在幫助使用者瞭解駭客入侵過程所以使用的方法跟步驟，可以直接在BadStore的官網( &lt;a href="http://www.badstore.net/%20"&gt;http://www.badstore.net/ &lt;/a&gt;) 下載。&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #351c75;"&gt;&lt;b&gt;B. Hacme Casino：&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Hacme Casino是由Foundstone免費提供的安全測試平台(&lt;b style="color: #cc0000;"&gt;Foundstone還提供了Hacme Travel、Hacme Books2 Hacme Shipping…等測試平台&lt;/b&gt;) ，這個平台使用&lt;b&gt;Ruby&lt;/b&gt;建置，軟體可以在&lt;a href="http://www.foundstone.com/us/%20resources/proddesc/hacmecasino.htm"&gt;http://www.foundstone.com/us/ resources/proddesc/hacmecasino.htm&lt;/a&gt;下載。&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #351c75;"&gt;C. WebGoat：&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;WebGoat是OWASP的發展的專案之一，目的在幫助使用者做攻擊練習。&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #0b5394; color: white;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;2. 選擇Web弱點掃瞄工具的選擇&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;在工具的選擇上全部都選擇具有自動掃瞄功能的工具，不對工具做其他細部設定，這些工具中只有Actuniex是商業軟體；另外，Paros Proxy這個軟體主要以Web資料弱點過濾為主，但是也兼具掃瞄工具。Wapiti的主要作用在做攻擊測試，所以報表分類上也直接以各項弱點：SQL Injection、Cross-site Script…等做為分類方式。&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="background-color: red; color: white;"&gt;A. Actuniex：(測試版本為 V5.1 Enterprise，更新日期：2008/09/16)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;官方網站：&lt;a href="http://www.acunetix.com/"&gt;http://www.acunetix.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;授權方式：商業&lt;/li&gt;&lt;li&gt;程式語言：--&lt;/li&gt;&lt;li&gt;弱點資料庫：Actuniex&lt;/li&gt;&lt;li&gt;最新版本：V6.5.20100210&lt;/li&gt;&lt;li&gt;最後更新日期：2009/02/10&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="background-color: red; color: white;"&gt;B.Grendel-Scan：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;官方網站：&lt;a href="http://grendel-scan.com/"&gt;http://grendel-scan.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;授權方式：GPL&lt;/li&gt;&lt;li&gt;程式語言：Java&lt;/li&gt;&lt;li&gt;弱點資料庫：OSVDB、自訂&lt;/li&gt;&lt;li&gt;最新版本：V1.0&lt;/li&gt;&lt;li&gt;最後更新日期：2008/08/10&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="background-color: red; color: white;"&gt;C.Nikto：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;官方網站：&lt;a href="http://cirt.net/nikto2"&gt;http://cirt.net/nikto2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;授權方式：GPL&lt;/li&gt;&lt;li&gt;程式語言：Perl&lt;/li&gt;&lt;li&gt;弱點資料庫：OSVDB &lt;/li&gt;&lt;li&gt;最新版本：V2.1.1&lt;/li&gt;&lt;li&gt;最後更新日期：2010/02/01&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="background-color: red; color: white;"&gt;D.Paros Proxy：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;官方網站：&lt;a href="http://www.parosproxy.org/index.shtml"&gt;http://www.parosproxy.org/index.shtml&lt;/a&gt;&lt;/li&gt;&lt;li&gt;授權方式：EULA&lt;/li&gt;&lt;li&gt;程式語言：Java&lt;/li&gt;&lt;li&gt;弱點資料庫：自訂&lt;/li&gt;&lt;li&gt;最新版本：V3.2.13&lt;/li&gt;&lt;li&gt;最後更新日期：2006/08/08&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="background-color: red; color: white;"&gt;E.Wapiti：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;官方網站：&lt;a href="http://wapiti.sourceforge.net/"&gt;http://wapiti.sourceforge.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;授權方式：GPL&lt;/li&gt;&lt;li&gt;程式語言：Python&lt;/li&gt;&lt;li&gt;弱點資料庫：自訂&lt;/li&gt;&lt;li&gt;最新版本：V2.2.1&lt;/li&gt;&lt;li&gt;最後更新日期：2009/12/29&lt;/li&gt;&lt;/ul&gt;&lt;b style="background-color: red; color: white;"&gt;F.Wikto：&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;官方網站：&lt;a href="http://www.sensepost.com/research/wikto/"&gt;http://www.sensepost.com/research/wikto/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;授權方式：GPL&lt;/li&gt;&lt;li&gt;程式語言：C#&lt;/li&gt;&lt;li&gt;最新版本：V2.1.00&lt;/li&gt;&lt;li&gt;最後更新日期：2008/12/14&lt;/li&gt;&lt;/ul&gt;&lt;div style="background-color: #0b5394; color: white;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;3. Web弱點掃瞄工具掃瞄結果簡述&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;A.BadStore：&lt;br /&gt;平台：Apache 1.3.28 (Unix) mod_ssl/2.8.15 OpenSSL 0.97。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S5UQi6mCE3I/AAAAAAAAFAo/r1zix_7d04I/s1600-h/BadStore.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="414" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S5UQi6mCE3I/AAAAAAAAFAo/r1zix_7d04I/s640/BadStore.bmp" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;B.Hacme Casino&lt;br /&gt;平台：WEBrick/1.3.1 (Ruby/1.8.2/2004-12-25)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S5UQkedD8uI/AAAAAAAAFAw/4cbgt3TEvAM/s1600-h/Casion.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="416" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S5UQkedD8uI/AAAAAAAAFAw/4cbgt3TEvAM/s640/Casion.bmp" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;C.WebGoat&lt;br /&gt;平台：Apache-Coyote/1.1 ( Tomcat)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_oF_vbQi9p8w/S5UQlt_msRI/AAAAAAAAFA4/9ZQE3-0vwKQ/s1600-h/WebGoat.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="456" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S5UQlt_msRI/AAAAAAAAFA4/9ZQE3-0vwKQ/s640/WebGoat.bmp" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;掃瞄出的弱點可以簡單分成幾類：Server及套件版本未更新造成的弱點、Server建置設定造成的弱點、程式的弱點。&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="background-color: red; color: white;"&gt;A. Server及套件版本未更新造成的弱點：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;從BadStore可以明顯觀察出這類型的弱點，BadStore Server使用的平台是Apache 1.3.28這個版本在2003年釋出，相關的弱點早已被發現而且已經更新釋出新版本。關於這方面弱點列出比較詳細的有：Actuniex、Grendel-Scan、Nikto、Wikto…等。&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="background-color: red; color: white;"&gt;B. Server建置設定造成的弱點：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;三個測試平台都有這類型的弱點，其中WebGoat被發現的幾乎都是這一類的弱點，WebGoat使用Tomcat Server建置，這類型的弱點包括Server建置後的Server導引頁面甚至給Server管理的訊息直接被發現，icons、image、backup預設目錄，提供搜尋用的robots.txt檔中設定的disallow目錄可能反招致攻擊、http是否允許了其他不安全的method (TRACE、DELETE、PUT…等)。關於這方面弱點除了wapiti其他的工具幾乎都可以發現。&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="background-color: red; color: white;"&gt;&lt;br /&gt;C. 程式的弱點：&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;這類的弱點最常見的Cross-Site Scripting、SQL Injection，通常工具出現誤判也多是在這個部份Grendel-Scan、Nikto、Wikto雖然也號稱能檢測這些弱點，不過從結果看來偏弱；Wapiti原來的作用就是在檢測這方面的弱點，就結果看起來還是沒有商業軟體Actuniex好。&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color: #0b5394; color: white;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;4. Web弱點掃瞄工具的報表&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;b style="color: magenta;"&gt;A.Actuniex&lt;/b&gt;&lt;b&gt;&lt;span style="color: #741b47;"&gt;：&lt;/span&gt;(&lt;span style="color: red;"&gt;測試版本：V5.1 Enterprise，更新日期：2008/09/16&lt;/span&gt;)&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Actuniex的報表在掃瞄資訊之後，會給網站的危險性一個Level 1~5 (愈高愈危險) 的評比，然後先簡單列出弱點高、中、低的統計圖表。接下來再列出被找到的所有弱點清單，最後才是每一個弱點的詳細內容。開始看到Actuniex掃瞄結果的數據時會很訝異商業版和其他免費版的差異。因為&lt;b&gt;&lt;span style="color: blue;"&gt;Actuniex把同一個地方用不同手法攻擊成功同一個的弱點累計成不同的弱點&lt;/span&gt;。&lt;/b&gt;不過因為這種做法被Actuniex列出弱點位置的準確性相對的高，Actuniex在每一項弱點處都會仔細的敘述弱點、攻擊手法、Request、Response。因為版本過舊造成的問題Actuniex也能找出來不過內容很囉嗦。舉例來說：BadStore使用Apache 1.3.28的版本造成的問題，&lt;b&gt;&lt;span style="color: blue;"&gt;Actuniex列出的更新建議中會要求更新至Apache 1.3.29、Apache 1.3.31、Apache 1.3.34…等，依此類推不會直接要求更新至最新版本&lt;/span&gt;&lt;/b&gt;，這樣同類的弱點也是一次建議列為一個弱點。最後是網站建置時設定造成的問題，有些建置者常會使用預設值，這些已知的預設值造成的訊息Actuniex通常也能檢查出來給予建議。在檢測過程中發現Actuniex也導入GHDB (Google Hacker Database) 的資料做檢查，GHDB的檢查能有效的找出網站建置時設定造成的問題；但是這部份的內容似乎和Actuniex本身的資料庫沒有完全整合，所以導致一樣的弱點有重覆描述的現象。&lt;/div&gt;&lt;br /&gt;&lt;b style="color: magenta;"&gt;B.Grendel-Scan：&lt;/b&gt;&lt;br /&gt;Grendel-Scan的報表內容分成兩段，前段是使用Nikto掃瞄的內容，之後才是Grendel-Scan自己掃瞄的內容，格式上會直接列出弱點名稱、這項弱點危險性(高、中、低、資訊)、找到這項弱點的路徑，然後再對弱點做敘述解釋這項弱點可能造成的影響，最後的建議會直接附上參考資料的連結。&lt;b&gt;&lt;span style="color: blue;"&gt;Grendel-Scan雖然將Nikto的弱點資料庫直接拿來使用，但是似乎沒有後續的更新掃瞄出來的內容和Nikto的資料不盡相同，掃瞄結果對於Server版本過舊、建置時的設定問題比較有效，沒找到任何關於應用程式的弱點。&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: magenta;"&gt;C.Nikto：&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Nikto的報表會先簡述掃瞄網站的資訊之後再依序列出弱點內容，效果方面Nikto對於Server版本、Server設定造成的問題幾乎都能找出來，另外，&lt;b style="color: blue;"&gt;Nikto雖然標榜可以對Cross-Site Scripting、SQL Injection…等程式弱點做掃瞄，不過實際效果看起來不是很好&lt;/b&gt;；報表方面Nikto直接和OSVDB 對應連結，但是仍然沒有對照連結的弱點 (Nikto直接把編號設成0 ) 而且只是簡單的條列，&lt;b style="color: blue;"&gt;沒有將弱點依危險性直接分類&lt;/b&gt;。&lt;/div&gt;&lt;br /&gt;&lt;b style="color: magenta;"&gt;D.ParosProxy&lt;/b&gt;：&lt;b style="color: red;"&gt;＊無法對WebGoat做測試&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;其實把Paros Proxy放進來做比較並不公平，因為Paros Proxy主要的功能是在過濾http讓使用者在request/response觀察變化，弱點掃瞄方面對於因為版本問題造成的弱點幾乎毫無知覺，可以檢查出Server設定造成的問題；另外，Grendel-Scan、Nikto沒找到的Cross-Site Scripting、SQL Injection…等程式弱點Paros Proxy有找出幾個。報表方面Paros Proxy在最前方有統計表統計弱點的數量 (高、中、低、訊息)，再依序條列出弱點訊息，在參考資料方面沒有特定對應的弱點資料庫。&lt;/div&gt;&lt;br /&gt;&lt;b style="color: magenta;"&gt;E.Wapiti：&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Wapiti這個工具開始的目的就是為了檢測特定的弱點，所以&lt;b style="color: blue;"&gt;對於Server的版本、設定的問題全部沒有處理&lt;/b&gt;， Acunetix有發現的Cross-Site Scripting、SQL Injection…等程式弱點Wapiti也能找順利找到。報表方面Wapiti將弱點區分成幾個類別再依高、中、低、訊息畫出統計圖、列表。弱點內容方面也是直接依弱點分類，對該項弱點做敘述，再列出找到這項弱點的路徑、使用的參數以及其他參考資訊。&lt;/div&gt;&lt;br /&gt;&lt;b style="color: magenta;"&gt;F.Wikto&lt;/b&gt;：&lt;b style="color: red;"&gt;＊無法對WebGoat做測試&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Wikto的內容雖然&lt;b style="color: blue;"&gt;使用了Nikto的弱點資料庫，但是似乎很久沒有更新了，檢測結果和Nikto不盡相同&lt;/b&gt;；此外對Hacme Casino的掃瞄結果顯然錯亂，報表內容列出了一堆不相干版本的警告訊息。Wikto的報表以CSV的格式呈現，可以用Excel開啟。雖然配合Nikto的弱點資料庫使用，但是&lt;b style="color: blue;"&gt;報表中自行敘述弱點並沒有和OSVDB做結合。&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-3411062446915834154?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/3411062446915834154/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/03/web.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3411062446915834154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3411062446915834154'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/03/web.html' title='【筆記】Web弱點掃瞄工具掃瞄結果分析'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oF_vbQi9p8w/S5UQi6mCE3I/AAAAAAAAFAo/r1zix_7d04I/s72-c/BadStore.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-1111119047741198355</id><published>2010-02-24T23:56:00.000-08:00</published><updated>2010-02-28T22:41:31.791-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Vulnerability Scanner'/><title type='text'>【資料】Web弱點測試網站</title><content type='html'>Web 弱點測試網站&lt;br /&gt;&lt;br /&gt;線上的，可以直接對網站做測試~~ &lt;br /&gt;&lt;ul&gt;&lt;li&gt;SPI Dynamics (live)&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://zero.webappsecurity.com/"&gt;http://zero.webappsecurity.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Cenzic (live)&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://crackme.cenzic.com/"&gt;http://crackme.cenzic.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Watchfire (live)&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://demo.testfire.net/"&gt;http://demo.testfire.net/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Acunetix (live)&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://zero.webappsecurity.com/"&gt;http://testphp.acunetix.com/ http://testasp.acunetix.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;WebMaven / Buggy Bank&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt; &lt;a class="external free" href="http://www.mavensecurity.com/webmaven" rel="nofollow" title="http://www.mavensecurity.com/webmaven"&gt;http://www.mavensecurity.com/webmaven&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&amp;nbsp;這３個要自己裝~~ &lt;br /&gt;&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;li&gt;WebGoat &lt;/li&gt;&lt;ul&gt;&lt;li&gt; &lt;a class="external free" href="http://www.owasp.org/index.php/OWASP_WebGoat_Project" rel="nofollow" title="http://www.owasp.org/index.php/OWASP_WebGoat_Project"&gt;http://www.owasp.org/index.php/OWASP_WebGoat_Project&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Foundstone Hacme &lt;/li&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://www.foundstone.com/us/resources/termsofuse.asp?file=hacmecasino_installer.zip"&gt;http://www.foundstone.com/us/resources/termsofuse.asp?file=hacmecasino_installer.zip&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;BadStore&lt;/li&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="http://www.badstore.net/"&gt;http://www.badstore.net/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;來源：&lt;a href="http://www.owasp.org/index.php/Phoenix/Tools"&gt;OWASP&lt;/a&gt; 、&lt;a href="http://www.webappsec.org/"&gt;WASC&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;為什麼一堆Web弱點測試用的網站都要弄成銀行的樣子丫？&lt;br /&gt;假裝攻破銀行會比較認真學習嗎？&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-1111119047741198355?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/1111119047741198355/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/02/web.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1111119047741198355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1111119047741198355'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/02/web.html' title='【資料】Web弱點測試網站'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-3373816458865673959</id><published>2010-02-24T06:55:00.001-08:00</published><updated>2010-02-24T07:24:40.465-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Vulnerability Scanner'/><title type='text'>【筆記】RatProxy</title><content type='html'>RatProxy&lt;br /&gt;&lt;ul&gt;&lt;li&gt;　官網：&lt;a href="http://code.google.com/p/ratproxy/"&gt;http://code.google.com/p/ratproxy/&lt;/a&gt;&lt;a href="http://wapiti.sourceforge.net/"&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;　授權條款：Apache Licnese 2.0&lt;br /&gt;&lt;/li&gt;&lt;li&gt;　程式語言：C&lt;/li&gt;&lt;li&gt;　目前版本：1.58 beta（2009/05）&lt;/li&gt;&lt;/ul&gt;　RatProxy 使用 C 開發，&lt;br /&gt;　目前支援 Linux, FreeBSD, MacOS X, Windows (Cygwin)，&lt;br /&gt;　跟之前介面的Nikto、Wapiti不太一樣，RatProxy 以“被動式”方式對Web做掃瞄，&lt;br /&gt;　從瀏覽器設定 proxy　&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;127.0.0.1 / port 8080&lt;/span&gt;&lt;br /&gt;　瀏覽網頁的時候RatProxy就會開始進行檢查~~&lt;br /&gt;&lt;br /&gt;　RatProxy的檔案結構：&lt;br /&gt;　RatProxy的程式，不像Wapiti用目錄分的這麼清楚~~&lt;br /&gt;　可是至少檔案也有分開....&lt;br /&gt;&lt;ul style="color: rgb(0, 0, 153);"&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;　主程式從 ratproxy.c 開始 &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;　SSL的部份由 ssl.c、ssl.h負責；&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;　HTTP收送由 http.c、http.h負責&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;　MIME內容檢查由 mime.c、mime.h負責。&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;　預設值定義在 config.h&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;　&lt;img src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S4VB1aq4IdI/AAAAAAAAE7M/7oP6atAJm1c/s800/1-ratproxy_structure-001.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;　RatProxy主程式流程：&lt;br /&gt;&lt;br /&gt;　RatProxy的主程式從ratproxy.c 開始和Nikto、Wapiti最大的差異是&lt;br /&gt;　ratproxy程式執行之後，先依使用者設定參數，然後就保持在“&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;等待&lt;/span&gt;”的狀態，&lt;br /&gt;　ratproxy等待接收到的 request ，繼續送出 request、回傳 response之後；&lt;br /&gt;　再檢查這些 data 是否有錯誤 ....&lt;br /&gt;　瀏覽器關閉後，ratproxy依檢查結果製出報表。&lt;br /&gt;　&lt;img src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S4VB1r_XuzI/AAAAAAAAE7U/zRekx9BLtCY/s800/1-ratproxy_structure-002.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-3373816458865673959?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/3373816458865673959/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/02/ratproxy.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3373816458865673959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3373816458865673959'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/02/ratproxy.html' title='【筆記】RatProxy'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oF_vbQi9p8w/S4VB1aq4IdI/AAAAAAAAE7M/7oP6atAJm1c/s72-c/1-ratproxy_structure-001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-4217969819349369846</id><published>2010-02-07T18:02:00.000-08:00</published><updated>2010-02-07T19:41:27.225-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Vulnerability Scanner'/><title type='text'>【筆記】Wapiti</title><content type='html'>　&lt;img src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S29ykpSJUBI/AAAAAAAAE3E/Iqd2V3OvB8o/s800/Wapiti.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;　官網：&lt;a href="http://wapiti.sourceforge.net/"&gt;http://wapiti.sourceforge.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;　授權條款：GPL&lt;/li&gt;&lt;li&gt;　程式語言：python&lt;/li&gt;&lt;li&gt;　底層使用：lswww 2.3.1 &lt;/li&gt;&lt;li&gt;　目前版本：2.21（2009/12/29）&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;　＊特殊事蹟：OWASP LiveCD 將 Wapiti列入檢測項目&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　Wapiti使用python開發，可以跨平台；&lt;br /&gt;　小試了一下掃瞄速度相當快（和其他的Web弱點掃瞄軟體比較）&lt;br /&gt;　Google 搜尋了一下，很多人拿這個軟體跟 Nikto 比較&lt;br /&gt;&lt;br /&gt;　它們都是：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;授權方式一樣（GPL）&lt;/li&gt;&lt;li&gt;沒有GUI介面&lt;/li&gt;&lt;li&gt;跨平台（Nikto使用 Perl）&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;　再細看會發現其實 Wapiti連程結架構都跟 Nikto有幾分相似，&lt;br /&gt;　使用了另一個完整的套件來幫助 http 內容的分析；&lt;br /&gt;　Nikto使用 LibWhisker，Wapiti使用 lswww （這是 Open Source 的常態嗎？）&lt;br /&gt;&lt;br /&gt;　Wapiti整體的程式架構像這樣：（README）&lt;br /&gt;　&lt;img src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S292x6OPlDI/AAAAAAAAE3c/fAw8xD1zFpI/s800/Wapiti_S.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;　程式流程從 Wapiti.py開始，開始會讀取相關資料（語系、設定檔、報表格式）；&lt;br /&gt;　呼叫 attack目錄下的 Function去進行掃瞄～～&lt;br /&gt;&lt;br /&gt;　attack目錄的檔案全部以 mod_xxx記錄，代表了各種的攻擊手法；&lt;br /&gt;　掃瞄過程會依序去呼叫使用，&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;可以在目錄中的 __init__.py設定是否使用模組&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　scans掃瞄完成之後的 xml 內容會放在這個目錄（臨時）&lt;br /&gt;　再製成使用設定的名稱&lt;br /&gt;&lt;br /&gt;　&lt;span style="font-weight: bold;"&gt;＊&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Nikto 修改掃瞄設定即可改變掃瞄項目，plugin的彈性更高。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;　＊Wapiti 在 2.20版之後也直接導入 Nikto的弱點資料庫 &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;db_tests&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　Wapiti的掃瞄項目放在 &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Config/attacks&lt;/span&gt;目錄底下，以條列式的方式陳列（下圖）&lt;img style="width: 688px; height: 401px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S292RWU2vxI/AAAAAAAAE3U/nsqB2b3xKAo/s800/attack.JPG" alt="" id="BLOGGER_PHOTO_ID_5435693315682385682" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;　Wapiti支援 en/fr/es．三國語言，且架構明確，&lt;br /&gt;　使用者依個別需要，小修一下程式就可以增加其他的語系&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;　Wapiti的掃瞄結果：&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;　Wapiti直接以弱點項目分類（SQL Injection、XSS…等）&lt;/li&gt;&lt;li&gt;　報表內容包含 統計圖、表以及各項清單。&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-4217969819349369846?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/4217969819349369846/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/02/wapiti.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4217969819349369846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4217969819349369846'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/02/wapiti.html' title='【筆記】Wapiti'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oF_vbQi9p8w/S29ykpSJUBI/AAAAAAAAE3E/Iqd2V3OvB8o/s72-c/Wapiti.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-6521043190964805499</id><published>2010-02-04T23:56:00.001-08:00</published><updated>2010-10-27T06:18:08.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 設定–Windows平台</title><content type='html'>之前程式在 Ubuntu 9.04上寫的，直接抓現成的 SDK來用，&lt;br /&gt;所以，完全沒有考慮過什麼設定的問題～～&lt;br /&gt;&lt;br /&gt;結果才把Code拿給朋友，請人幫忙測試，&lt;br /&gt;執行上就立刻有 “記憶體連結錯誤” 的問題...&lt;br /&gt;朋友建議我看一下 &lt;a href="http://doc.trolltech.com/4.1/deployment-windows.html#building-qt-statically"&gt;&lt;span style="font-weight: bold;"&gt;static link&lt;/span&gt;&lt;/a&gt; 的內容，重新看看編譯的問題&lt;br /&gt;所以，乾脆直接把 code 拿來 Windows 上試用、調整~~&lt;br /&gt;&lt;br /&gt;＊SDK在Qt的官網有提供～～&lt;br /&gt;Qt官網：&lt;a href="http://qt.nokia.com/"&gt;http://qt.nokia.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;一、先裝 Qt SDK（Qt  SDK以LGPL方式授權）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;二、安裝 Qt SDK（Qt  SDK很貼心的連 MinGW都提供了）&lt;br /&gt;&lt;img height="314" src="http://lh6.ggpht.com/_oF_vbQi9p8w/S2vPWGLecuI/AAAAAAAAExE/S5N7SZbU6mE/s400/Qt_03.jpg" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;三、安裝完成做 static link 的相關設定　&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;進入Qt安裝目錄&lt;br /&gt;&lt;span style="color: red; font-weight: bold;"&gt;configure.exe -static -release&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;然後Qt會先詢問&lt;br /&gt;(1) 授權方式 &lt;span style="font-weight: bold;"&gt;c(商業) /o(Open Source)&lt;/span&gt;&lt;br /&gt;(2) 是否同意授權條款 &lt;span style="font-weight: bold;"&gt;y&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;img height="396" src="http://lh6.ggpht.com/_oF_vbQi9p8w/S2vR9ikIUGI/AAAAAAAAExM/kGH4PLk3x68/s400/Qt_07.jpg" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;然後就是等....&lt;br /&gt;這個步驟要進行一段時間，&lt;br /&gt;有人說要 1~2 小時，我估計，肯定沒那麼久...&lt;br /&gt;&lt;br /&gt;&lt;img height="395" src="http://lh3.ggpht.com/_oF_vbQi9p8w/S2vR-GqrCZI/AAAAAAAAExU/UzFj_4LE1iI/s400/Qt_09.jpg" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;四、進去 Project的目錄重製 Makefile&lt;br /&gt;&lt;pre style="-moz-background-inline-policy: continuous; background: none repeat scroll 0% 0% rgb(240, 240, 240); border: 1px solid rgb(204, 204, 204); color: #000099; overflow: auto;"&gt;依序執行這些動作：&lt;br /&gt;(1)mingw32-make clean &lt;span style="font-weight: bold;"&gt;(清除原來的東西)&lt;/span&gt;&lt;br /&gt;(2)qmake -config release &lt;span style="font-weight: bold;"&gt;(產生 release 版本的 Makefile)&lt;/span&gt;&lt;br /&gt;(3)mingw32-make &lt;span style="font-weight: bold;"&gt;(make)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red; font-weight: bold;"&gt;＊其實前三項部步驟完成後，這項動作就可以直接從SDK提供的QtCreator介面中，&lt;/span&gt;&lt;span style="color: red; font-weight: bold;"&gt;直接以Build的方式去編譯程式了&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;五、在 Make的過程，可能有些 Function找不到的問題需要排除，&lt;br /&gt;全部排除了，就會看到結果了~~&lt;br /&gt;&lt;br /&gt;六、搞了這麼久~~&lt;br /&gt;最後PO個Windows版本的成果&lt;br /&gt;&lt;img height="313" src="http://lh6.ggpht.com/_oF_vbQi9p8w/S2vV3j94ueI/AAAAAAAAExc/NHNKv8fV8PU/s400/Qt_11.jpg" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;結論：&lt;br /&gt;＊可能因為程式畫面是在 Ubuntu 上調整，在Windows上雖然有編譯成功&lt;br /&gt;，可是看起來還是有點不太習慣~~&lt;br /&gt;&lt;br /&gt;＊另一項待排除的問題是 Linux平台和Windows平台上的路徑方向不同，&lt;br /&gt;當時沒有考慮，程式必須再調整&lt;br /&gt;&lt;br /&gt;＊參考資料：&lt;br /&gt;Qt線上說明：&lt;a href="http://doc.trolltech.com/4.1/deployment-windows.html#building-qt-statically"&gt;http://doc.trolltech.com/4.1/deployment-windows.html#building-qt-statically&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-6521043190964805499?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/6521043190964805499/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/02/qt-windows.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6521043190964805499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6521043190964805499'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/02/qt-windows.html' title='【筆記】Qt 設定–Windows平台'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_oF_vbQi9p8w/S2vPWGLecuI/AAAAAAAAExE/S5N7SZbU6mE/s72-c/Qt_03.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-3759933967931747579</id><published>2010-02-03T04:54:00.000-08:00</published><updated>2010-02-07T17:57:33.805-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='資訊安全'/><title type='text'>【筆記】資安監控中心 (SOC, Security Operation Center) 簡介</title><content type='html'>　&lt;img src="http://lh4.ggpht.com/_oF_vbQi9p8w/S2lyX2drSZI/AAAAAAAAEwk/zFzyPoh-DcM/s800/01.JPG" /&gt;&lt;br /&gt;　&lt;span style="font-weight: bold;"&gt;SOC,Security Operation Center的模組架構圖&lt;/span&gt;&lt;br /&gt;　模組架構：&lt;br /&gt;　&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;事件產生器（E Box）：IDS、Firewall、Anti-Virus…等防禦機制。&lt;/span&gt;&lt;br /&gt;　&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;事件蒐集器（C Box）&lt;/span&gt;：把這些機制產生的訊息，標準化成同一格式。&lt;br /&gt;　&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;事件資料庫（D Box）&lt;/span&gt;：資料庫。&lt;br /&gt;　&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;事件分析（A Box）+知識庫（K Box）：&lt;/span&gt;查覺未知的弱點。&lt;br /&gt;　&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;事件反應（R Box）：&lt;/span&gt;即時察覺入侵、定時提出安全防衛的報告。&lt;br /&gt;&lt;br /&gt;　&lt;img src="http://lh5.ggpht.com/_oF_vbQi9p8w/S2lyXRciwbI/AAAAAAAAEwc/NTsxbdEF6MM/s800/02.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;　SOC實際建置的方式：&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;　(1)自建SOC&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;　&lt;span style="color: rgb(255, 0, 0);"&gt;(2)SOC委外&lt;/span&gt;&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;　(3)協同維護,分時代管&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　&lt;img src="http://lh3.ggpht.com/_oF_vbQi9p8w/S2lyXCAlIZI/AAAAAAAAEwU/zVwYB4LZVbM/s800/03.JPG" /&gt;&lt;br /&gt;　&lt;span style="font-weight: bold;"&gt;SOC委外廠商的評選方式&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　&lt;img src="http://lh3.ggpht.com/_oF_vbQi9p8w/S2lyWvSv17I/AAAAAAAAEwM/hQqFh-zBTSM/s800/04.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;　&lt;span style="font-weight: bold;"&gt;目前可以導入SOC的公司&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　&lt;img src="http://lh4.ggpht.com/_oF_vbQi9p8w/S2l2Vi9EDXI/AAAAAAAAEws/0paZzO7_BFI/s800/05.JPG" /&gt;&lt;br /&gt;　&lt;span style="font-weight: bold;"&gt;實現SOC平台的軟體&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　雖然看了幾篇文章還是覺得SOC很抽象；&lt;br /&gt;　可是看過兩個SOC代管的公司 ArcSight、數聯資安提出的內容&lt;br /&gt;　發現每個模組都有相對應的軟體程式，&lt;br /&gt;　但是沒有看過實際的東西還是覺得這個東西很抽象&lt;br /&gt;　目前對於&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;事件產生器→事件蒐集&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;器&lt;/span&gt;的過程以及&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;事件反應&lt;/span&gt;有比較多的疑問&lt;br /&gt;&lt;br /&gt;　(1)事件產生器：這些事件包括Anti-Virus、IDS、Firewall…等。&lt;br /&gt;　　感覺上很難想像，如果是IDS還好理解一點，以Snort為例：有些可能&lt;br /&gt;　　只是訊息記錄、有些是警示訊息。可是如果是Anti-Virus 出現警示通&lt;br /&gt;　　常就是發現病毒了，都確認有問題了還要分析什麼？&lt;br /&gt;&lt;br /&gt;　(2)事件蒐集器：它負責一個很“雜”的責任：&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;整合。&lt;/span&gt;&lt;br /&gt;　　問題是來源過多？實際建置的過程中，是否會排除無法處理的訊息？&lt;br /&gt;　　另一部份是資料量應該會很大，所以處理上是否有什特定的順序？&lt;br /&gt;&lt;br /&gt;　(3)事件反應：最後是事件反應，SOC常標榜 7*24 的防護，&lt;br /&gt;　　SOC代管的廠商只負責即時發給通報，還是會有其他特別的處理？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　最後附上另一則新聞：&lt;a href="http://www.zdnet.com.tw/news/software/0,2000085678,20113305,00.htm"&gt;國內某SOC疑遭駭客入侵&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　國內某SOC疑遭駭客入侵&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　記者鍾翠玲／台北報導 2006/12/26 21:02:37 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　國內某家SOC昨(25)日疑似出現網站遭入侵，並植入&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;危及機密資料的木馬程式。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　這家SOC網站首頁及其他幾個部份今天被發現被置入&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;特定圖案，顯示遭到外人入&lt;br /&gt;　侵，安全專家表示。安全&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;專家同時發現，這家安全業者也可能被植入惡意程式&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;，&lt;br /&gt;　賦予遠端駭客在網站上為所欲為的權利，包括竊取&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;客戶資料。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　所謂SOC (Security Operations Center)是指一種安全&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;委外服務業者，甚至可以&lt;br /&gt;　做到由外24x7不間斷監控企&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;業網路流量，以便偵測可能的駭客入侵或蠕蟲爆發行&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　為。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　首先發現該問題的安全顧問已經通報這家安全服務業&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;者。他表示，由於可在Google&lt;br /&gt;　上搜尋到問題網頁，顯&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;示被置換已有一段時間。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　但另一名安全顧問則相信，置換首頁之外，入侵者可&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;能做了其他事，因為該網站被&lt;br /&gt;　發現可能遭植入木馬程&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;式。它可讓駭客在網站上做任何想做的事，「看你是&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;要搜尋&lt;br /&gt;　密碼檔或資料庫內的資料，或是執行任何指令&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;，」CA安全技術顧問林宏嘉說。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　該業者已於晚上將被修改的首頁恢復、並將木馬清除&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;、漏洞修補掉。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　安全專家表示，被植入圖片或木馬程式許多企業可能&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;都會發生，但是發生在安全服&lt;br /&gt;　務業者網站上，問題更&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;顯嚴重，因為此類服務的客戶多半是掌管許多民眾資&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;料的單&lt;br /&gt;　位，如金融及政府機關。SOC業者安全水準直&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;接或間接關係到重要機構的資訊安全&lt;br /&gt;　--以及一般民眾&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;的身份隱私或財產安全。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　這家安全服務公司擁有多家中央與地方警、政、金融&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;及外商公司等企業客戶。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　只要駭客技術高超，透過木馬了解到網路架構、破解&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;密碼，「要竊取客戶資料易如&lt;br /&gt;　反掌，」林宏嘉說。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　此類案件對正在起步中的安全監控服務業(SOC)也造成&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;不利影響，不願透露姓名的&lt;br /&gt;　安全顧問也指出。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;　到截稿時間為止，記者未能與該公司發言人取得聯繫。&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;不過該公司代表表示，「我&lt;br /&gt;　們已在處理中，後續問題也&lt;/span&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;都在查詢當中。」&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-3759933967931747579?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/3759933967931747579/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/02/soc-security-operation-center.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3759933967931747579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3759933967931747579'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/02/soc-security-operation-center.html' title='【筆記】資安監控中心 (SOC, Security Operation Center) 簡介'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_oF_vbQi9p8w/S2lyX2drSZI/AAAAAAAAEwk/zFzyPoh-DcM/s72-c/01.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-6513786292378617436</id><published>2010-01-22T07:11:00.001-08:00</published><updated>2011-10-04T23:29:31.994-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Vulnerability Scanner'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 練習–Nikto_GUI(02)</title><content type='html'>前一個版本更新&lt;br /&gt;1.修正 Bug&lt;br /&gt;(1) password 輸入的部份，改成以 * 顯示 （太蠢了，居然用明碼）&lt;br /&gt;(2)錯誤檢查的部份有錯 Orz&lt;br /&gt;&lt;br /&gt;2.新增多國語系&lt;br /&gt;本來只想弄正體中文&amp;amp;簡體中文試試多國語系，&lt;br /&gt;可是，Qt 支援 utf-8 實在太方便了~~&lt;br /&gt;所以一直手癢連日文、韓文一起放了（看不懂，錯了也是Google大神的錯）&lt;br /&gt;&lt;br /&gt;3.線上更新 → 除了按鍵，開啟時會自動執行&lt;br /&gt;＊之前看過 N-Stalker 也是這樣搞，因為有人死都不會想要更新程式版本？&lt;br /&gt;&lt;br /&gt;4.Nikto版本，Nikto指令順便補一下&lt;br /&gt;&lt;br /&gt;畫面(1)&lt;br /&gt;多國語系在上方切換，順便試 QAction中 Check &amp;amp; 內嵌圖片的功能&lt;br /&gt;&lt;img height="311" src="http://lh5.ggpht.com/_oF_vbQi9p8w/S1nAWGjDHUI/AAAAAAAAEvo/Nm2H3dwAB00/s400/TW.png" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;畫面(2) 韓文&lt;br /&gt;&lt;img height="310" src="http://lh6.ggpht.com/_oF_vbQi9p8w/S1nAVrXqAII/AAAAAAAAEvg/1X8uMh1QrNI/s400/KR.png" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;畫面(3) 日文，下方的訊息是版本訊息&lt;br /&gt;＊Nikto 的更新有一個特色，只更新“有異動的檔案”，&lt;br /&gt;所以除非是非常久沒有更新，不然更新的速度真的蠻快的~~&lt;br /&gt;&lt;img height="309" src="http://lh3.ggpht.com/_oF_vbQi9p8w/S1nBJ1zepaI/AAAAAAAAEvw/Npkxfoz6reg/s400/ver.png" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;畫面(3) 韓文，下方的訊息是 Nikto 的指令用法&lt;br /&gt;要不要學, namp 的視窗版，留一個直接輸入Command的地方啊？&lt;br /&gt;&lt;img height="310" src="http://lh4.ggpht.com/_oF_vbQi9p8w/S1nAUvmAPDI/AAAAAAAAEvQ/gNGzWkIfM8A/s400/Help.png" width="400" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-6513786292378617436?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/6513786292378617436/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/qt-niktogui02.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6513786292378617436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6513786292378617436'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/qt-niktogui02.html' title='【筆記】Qt 練習–Nikto_GUI(02)'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_oF_vbQi9p8w/S1nAWGjDHUI/AAAAAAAAEvo/Nm2H3dwAB00/s72-c/TW.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-4237820997064687336</id><published>2010-01-21T07:01:00.001-08:00</published><updated>2011-10-04T23:29:31.921-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Vulnerability Scanner'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 練習–Nikto_GUI</title><content type='html'>寫這個程式的目的是為了綀習 Qt ，&lt;br /&gt; Nikto 是一個開放原始碼的 Web 弱點掃瞄軟體&lt;br /&gt; 沒有 GUI 介面，這是選擇以 Nikto GUI 為題來練習 Qt 的原因&lt;br /&gt;&lt;br /&gt;邊學邊寫，對 Qt 的用法還不是太熟...&lt;br /&gt;所以程式碼有點混亂&lt;br /&gt;這是第一個功能較完整的版本&lt;br /&gt;2010/01/21．Star&lt;br /&gt;&lt;br /&gt;畫面(1)&lt;br /&gt;設定要掃瞄的 IP,Port, 選擇 SSL&lt;br /&gt;設定完成後點選　開始掃瞄&lt;br /&gt;提供　Nikto 線上更新&lt;br /&gt;&lt;br /&gt;　&lt;img src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S1hstFPzN8I/AAAAAAAAEvA/j9o6sDb4-j0/s800/01.png" /&gt;&lt;br /&gt;&lt;br /&gt;畫面(2)&lt;br /&gt;掃瞄項目設定 （這些項目是，原來 Nikto 的預設值）&lt;br /&gt;　&lt;img src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S1hsi5-tHUI/AAAAAAAAEu4/cGKf5vWX3qU/s800/02.png" /&gt;&lt;br /&gt;&lt;br /&gt;畫面(3)&lt;br /&gt; 掃瞄Cgi 項目設定&lt;br /&gt;變異測試（勾了 速度會變很慢）&lt;br /&gt;&lt;br /&gt;　&lt;img src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S1hsiXKwlVI/AAAAAAAAEuw/f5ye8KqYn18/s800/03.png" /&gt;&lt;br /&gt;&lt;br /&gt;畫面(4)&lt;br /&gt;規避 IDS 項目設定 → 這是 Nikto 的特色&lt;br /&gt;（因為 Nikto 底層用了LibWhisker 過濾 http 封包）&lt;br /&gt;&lt;br /&gt;　&lt;img src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S1hsiI5Q6xI/AAAAAAAAEuo/xOAkBFJuQWo/s800/04.png" /&gt;&lt;br /&gt;&lt;br /&gt;畫面(5)&lt;br /&gt;Nikto的路徑 （這個程式，裡面內存了 Nikto；不想用可以指定自己需要的位置）&lt;br /&gt;列印報表的格式及輸出檔案存放的位置&lt;br /&gt;需要身份驗證用的 id/password&lt;br /&gt;proxy 設定 → 其實只有這個是設定檔的內容 ^^;;&lt;br /&gt;&lt;br /&gt;　&lt;img src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S1hsho9-zbI/AAAAAAAAEug/HizZfQER8FM/s800/05.png" /&gt;&lt;br /&gt;&lt;br /&gt;畫面(6)&lt;br /&gt;about 這是我最先學會的 Qt 功能&lt;br /&gt;本來還要放 Nikto 的指令集，可是都不需要指令&lt;br /&gt;放了好像也是白放？&lt;br /&gt;&lt;br /&gt;　&lt;img src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S1hshen62tI/AAAAAAAAEuY/QhQ1X5e4t8I/s800/06.png" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-4237820997064687336?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/4237820997064687336/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/qt-niktogui.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4237820997064687336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4237820997064687336'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/qt-niktogui.html' title='【筆記】Qt 練習–Nikto_GUI'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oF_vbQi9p8w/S1hstFPzN8I/AAAAAAAAEvA/j9o6sDb4-j0/s72-c/01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-5752784393803744057</id><published>2010-01-18T05:20:00.000-08:00</published><updated>2011-10-04T23:29:31.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 使用中文</title><content type='html'>(1)在 main.cpp&lt;br /&gt;  記得 include 這個&lt;br /&gt;  &lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;#include &amp;lt;QTextCodec&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  直接加這一行&lt;br /&gt;   &lt;span style="color: rgb(51, 51, 255); font-weight: bold;"&gt;QTextCodec::setCodecForTr(QTextCodec::codecForLocale());&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(2)可以直接在 MessageBox中使用&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(51, 51, 255); font-weight: bold;"&gt;QMessageBox::about(this,tr("Debug"),tr("中文測試"));&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-5752784393803744057?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/5752784393803744057/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/qt_18.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5752784393803744057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5752784393803744057'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/qt_18.html' title='【筆記】Qt 使用中文'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-6383524790266412007</id><published>2010-01-15T07:05:00.000-08:00</published><updated>2011-10-04T23:29:31.978-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt4.6 –使用qtcreator</title><content type='html'>前面兩篇的目的只是想大略了解，Qt 的作用在程式結構中的位置&lt;br /&gt;但是，如果每個元件都得這樣用程式慢慢兜，&lt;br /&gt;大概沒人會想用Qt&lt;br /&gt;&lt;br /&gt;所以，這裡介紹 qtcreator&lt;br /&gt;＊我在 Qt 的官網抓到的版本是 Qt 4.6 ，其他版本適不適用不清楚&lt;br /&gt;&lt;br /&gt;開始了~~&lt;br /&gt;&lt;br /&gt;一、qtcreator 的 ICON 長這樣&lt;br /&gt;　&lt;img src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S1CFZrUejXI/AAAAAAAAEpo/PP_GjB3_ufU/s800/01.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;二、qtcreator的介面，很不錯吧~~&lt;br /&gt;　&lt;img src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S1CGAzVv5fI/AAAAAAAAEpw/VgqlWTvXELA/s800/02.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;三、開新專案 File→New File or Project&lt;br /&gt;　&lt;img src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S1CGbuGDnII/AAAAAAAAEp4/7diYSFaBQ9E/s800/03.JPG"/&gt;&lt;br /&gt;&lt;br /&gt;四、選 Project的類型 選 Qt4 GUI Application&lt;br /&gt;　&lt;img src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S1CG1MAVOtI/AAAAAAAAEqA/qzgFO2gBVqM/s800/04.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;五、替新專案取個名字 &amp;amp; 選好儲存的位置&lt;br /&gt;　&lt;img src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S1CHTvjwPQI/AAAAAAAAEqI/l63imvPajwI/s800/05.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;六、選擇要用到的 modules&lt;br /&gt;　&lt;img src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S1CHsH9alSI/AAAAAAAAEqQ/8CIlRslIAm8/s800/06.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;七、Project產生的檔案&lt;br /&gt;Class的名稱、主程式的檔案、UI介面的檔案 ~~&lt;br /&gt;　&lt;img src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S1CINBGaIsI/AAAAAAAAEqY/1LP0p-H8NN8/s800/07.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;八、Project產生好了~~&lt;br /&gt;　&lt;img src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S1CIqub-r9I/AAAAAAAAEqg/o2FbYzXe9ko/s800/08.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;九、Form&lt;br /&gt;除了畫視窗排元件之外，這裡也可以預設一些 SIGNALS &amp;amp; SLOT&lt;br /&gt;　&lt;img src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S1CP1GHNCOI/AAAAAAAAEqw/4VHUOTcZKB8/s800/17.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;十、mainwindows.h&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#ifndef MAINWINDOW_H&lt;br /&gt;#define MAINWINDOW_H&lt;br /&gt;&lt;br /&gt;#include &amp;lt;QMainWindow&amp;gt;&lt;br /&gt;&lt;br /&gt;namespace Ui {&lt;br /&gt;class MainWindow;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class MainWindow : public QMainWindow {&lt;br /&gt;Q_OBJECT&lt;br /&gt;public:&lt;br /&gt;MainWindow(QWidget *parent = 0);&lt;br /&gt;~MainWindow();&lt;br /&gt;&lt;br /&gt;protected:&lt;br /&gt;void changeEvent(QEvent *e);&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt;Ui::MainWindow *ui;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;private slots:&lt;/span&gt; &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;   &lt;br /&gt;  void about();&lt;/span&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;#endif // MAINWINDOW_H&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;十一、mainwindows.cpp&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#include &amp;lt;QtGui&amp;gt;&lt;br /&gt;#include "mainwindow.h"&lt;br /&gt;#include "ui_mainwindow.h"&lt;br /&gt;&lt;br /&gt;MainWindow::MainWindow(QWidget *parent) :&lt;br /&gt;QMainWindow(parent),&lt;br /&gt;ui(new Ui::MainWindow)&lt;br /&gt;{&lt;br /&gt;ui-&amp;gt;setupUi(this);&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;QObject::connect(ui-&amp;gt;aboutAction,SIGNAL(triggered()),&lt;br /&gt;        this,SLOT(about()));&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MainWindow::~MainWindow()&lt;br /&gt;{&lt;br /&gt;delete ui;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void MainWindow::changeEvent(QEvent *e)&lt;br /&gt;{&lt;br /&gt;QMainWindow::changeEvent(e);&lt;br /&gt;switch (e-&amp;gt;type()) {&lt;br /&gt;case QEvent::LanguageChange:&lt;br /&gt; ui-&amp;gt;retranslateUi(this);&lt;br /&gt; break;&lt;br /&gt;default:&lt;br /&gt; break;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;void MainWindow::about()&lt;/span&gt; &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;&lt;br /&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;QMessageBox::about(this, tr("Qt GUI"),&lt;br /&gt;     &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;tr("Star's' Qt Exercise",&lt;br /&gt;     &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;"&amp;lt;p&amp;gt;from:2010/01/15"));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;十二、Build ALL&lt;br /&gt;　&lt;img src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S1CUMOJIFqI/AAAAAAAAEq4/9kt_zYl9_Ns/s800/18.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;十三、所有的檔案&lt;br /&gt;　&lt;img src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S1CJzAMmBzI/AAAAAAAAEqo/gk5Bp9ISFlY/s800/12.JPG" /&gt;&lt;br /&gt;&lt;br /&gt;十四、執行&lt;br /&gt;&lt;img src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S1CU3ayvlLI/AAAAAAAAErA/drX7HcYdcuY/s800/19.JPG" /&gt;　&lt;img src="http://4.bp.blogspot.com/_oF_vbQi9p8w/S1CU3qZLQaI/AAAAAAAAErI/Arh7GNwlcZE/s800/20.JPG" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-6383524790266412007?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/6383524790266412007/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/qt46-qtcreator.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6383524790266412007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6383524790266412007'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/qt46-qtcreator.html' title='【筆記】Qt4.6 –使用qtcreator'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/S1CFZrUejXI/AAAAAAAAEpo/PP_GjB3_ufU/s72-c/01.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-9107855848601408379</id><published>2010-01-13T06:56:00.000-08:00</published><updated>2011-10-04T23:29:32.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Qt 元件控制</title><content type='html'>&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;/* Qt 用connect 這個 Function 控制一些 Qt 的元件 */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;/* Qt用到的Library包進來 */&lt;/span&gt;&lt;br /&gt;#include &amp;lt;QApplication&amp;gt;&lt;br /&gt;#include &amp;lt;QHBoxLayout&amp;gt;&lt;br /&gt;#include &amp;lt;QSlider&amp;gt;&lt;br /&gt;#include &amp;lt;QSpinBox&amp;gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[])&lt;br /&gt;{&lt;br /&gt; QApplication app(argc,argv);&lt;br /&gt;&lt;br /&gt; QWidget *window = new QWidget;&lt;br /&gt; window-&amp;gt;setWindowTitle("Enter your age:");&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;   /* 宣告 spinBox &amp;amp; 設定 spinBox 可接受值的範圍 */&lt;/span&gt;&lt;br /&gt; QSpinBox *spinBox = new QSpinBox;&lt;br /&gt; spinBox-&amp;gt;setRange(0,130);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;   /* 宣告 slider &amp;amp; 設定 slider 可接受值的範圍 */&lt;/span&gt;&lt;br /&gt; QSlider *slider = new QSlider;&lt;br /&gt; slider-&amp;gt;setRange(0,130);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;   /* spinBox &amp;amp; slider 相互影響&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;      spinBox 的值被改變，slider 也被設定成改變後的值&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;      slider 的值被改變，spinBox 也被設定成改變後的值 */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; QObject::connect(spinBox,SIGNAL(valueChanged(int)),&lt;br /&gt;                  slider,SLOT(setValue(int)));&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;   /* connect(object1,SIGNAL(fun1()),object2,SLOT(fun2()))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;      object1 從 SIGNAL()接收訊號，反應至 object2 執行 SLOT()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;      這是 Qt 在控制元件之間互動常用的方式，藉由這個方式&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;      即使 object1,object2 不知道對方的存在，還是可以互動 */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; QObject::connect(slider,SIGNAL(valueChanged(int)),&lt;br /&gt;                  spinBox,SLOT(setValue(int)));&lt;br /&gt;&lt;br /&gt; spinBox-&amp;gt;setValue(35);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;   /* Layout Windows版面設置&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;      依 QHBoxLayout的格式，依序放入 spinBox &amp;amp; slider */&lt;/span&gt;&lt;br /&gt; QHBoxLayout *layout = new QHBoxLayout;&lt;br /&gt; layout-&amp;gt;addWidget(spinBox);&lt;br /&gt; layout-&amp;gt;addWidget(slider);&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;  /* Windows 設定格式、畫出來 */&lt;/span&gt;&lt;br /&gt; window-&amp;gt;setLayout(layout);&lt;br /&gt; window-&amp;gt;show();&lt;br /&gt;&lt;br /&gt; return app.exec();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(1)、(2)都在解釋 Qt 的結構、運作方式...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Qt有 qtcreator 可以直接拉視窗，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;如果學會這部份，後面就比較省事了&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-9107855848601408379?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/9107855848601408379/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/qt.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/9107855848601408379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/9107855848601408379'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/qt.html' title='【筆記】Qt 元件控制'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-6973054969520509285</id><published>2010-01-05T04:23:00.000-08:00</published><updated>2011-10-04T23:29:32.019-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><title type='text'>【筆記】Hello Qt</title><content type='html'>在 Fedora 9 Linux 上試Qt，&lt;br /&gt;安裝的時候很貪心的把 Qt的選項都打勾了&lt;br /&gt;結果 Qt3.3 &amp;amp; Qt4 有點混淆（&lt;span style="font-weight: bold;"&gt;下面會解釋到&lt;/span&gt;）&lt;br /&gt;&lt;br /&gt;一、這是 Source Code ...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S0Mvs4w1Z2I/AAAAAAAAEoo/HMUIJHj4CZg/s1600-h/01.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 206px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S0Mvs4w1Z2I/AAAAAAAAEoo/HMUIJHj4CZg/s400/01.png" alt="" id="BLOGGER_PHOTO_ID_5423230824482170722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;二、&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;qmake-qt4 -projects&lt;/span&gt;&lt;br /&gt;產生 hello.pro&lt;br /&gt;＊qmake-qt4 （如果是用 Qt 3.3就是直接打 &lt;span style="font-weight: bold;"&gt;qmake -projects&lt;/span&gt;）&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S0MvnqEPm6I/AAAAAAAAEog/w0N1OHt6smA/s1600-h/02.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 176px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S0MvnqEPm6I/AAAAAAAAEog/w0N1OHt6smA/s400/02.png" alt="" id="BLOGGER_PHOTO_ID_5423230734637702050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;三、&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;qmake-qt4 &lt;/span&gt;&lt;br /&gt;產生 Makefile&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/S0MvnZJ6sKI/AAAAAAAAEoY/R5kFsa9lbc8/s1600-h/03.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 206px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/S0MvnZJ6sKI/AAAAAAAAEoY/R5kFsa9lbc8/s400/03.png" alt="" id="BLOGGER_PHOTO_ID_5423230730098094242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;四、&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;make &lt;/span&gt;&lt;br /&gt;真的要開始 Compiler了 ~~&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/S0MvnCz4GrI/AAAAAAAAEoQ/xVZ_GsV_xlg/s1600-h/04.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 261px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/S0MvnCz4GrI/AAAAAAAAEoQ/xVZ_GsV_xlg/s400/04.png" alt="" id="BLOGGER_PHOTO_ID_5423230724100070066" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;五、&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;hello &lt;/span&gt;&lt;br /&gt;執行看看...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/S0Mvm3sKVwI/AAAAAAAAEoI/C4DRmjNrmgo/s1600-h/05.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 300px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/S0Mvm3sKVwI/AAAAAAAAEoI/C4DRmjNrmgo/s400/05.png" alt="" id="BLOGGER_PHOTO_ID_5423230721114920706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;＊ qmake 是 Qt 提供的工具，可以幫忙產生可以 Compiler 的工具&lt;br /&gt;可以在 /usr/lib/qt&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;xx&lt;/span&gt; 找到相關的內容 ~~&lt;br /&gt;&lt;br /&gt;測試&lt;br /&gt;原始碼來源：&lt;a href="http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/FirstQt.html"&gt;http://caterpillar.onlyfun.net/Gossip/Qt4Gossip/FirstQt.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-6973054969520509285?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/6973054969520509285/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/hello-qt.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6973054969520509285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6973054969520509285'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/hello-qt.html' title='【筆記】Hello Qt'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oF_vbQi9p8w/S0Mvs4w1Z2I/AAAAAAAAEoo/HMUIJHj4CZg/s72-c/01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-239007545523254823</id><published>2010-01-01T01:23:00.000-08:00</published><updated>2010-01-01T01:51:57.115-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='資訊安全'/><category scheme='http://www.blogger.com/atom/ns#' term='程式練習'/><title type='text'>【筆記】Phate聖誕節 wargame (02)</title><content type='html'>從圖片中找出密碼：（&lt;span style="font-weight: bold;"&gt;圖片在題目二中下載&lt;/span&gt;）&lt;br /&gt;&lt;br /&gt;用可以編輯Hex的工具去看剛好看到後面有一堆 password的東西&lt;br /&gt;應該就是答案：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/Sz3AFOOmxjI/AAAAAAAAEhw/mlPgaMPYp58/s1600-h/0.JPG"&gt;&lt;img style="cursor: pointer; width: 547px; height: 35px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/Sz3AFOOmxjI/AAAAAAAAEhw/mlPgaMPYp58/s400/0.JPG" alt="" id="BLOGGER_PHOTO_ID_5421700722375181874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;可以直接把檔案改成 htm,html 檔案&lt;br /&gt;用 Firefox 使用不同編碼讀讀看...&lt;br /&gt;最下面藏在 password 之後的亂碼就可以看到了　&lt;br /&gt;&lt;br /&gt;圖：&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/Sz3FT2a9pJI/AAAAAAAAEh4/99ku41cUvNk/s1600-h/1.JPG"&gt;&lt;img style="cursor: pointer; width: 624px; height: 363px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/Sz3FT2a9pJI/AAAAAAAAEh4/99ku41cUvNk/s400/1.JPG" alt="" id="BLOGGER_PHOTO_ID_5421706471240737938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;原始出處 Phate ：&lt;a href="http://www.phate.tw/"&gt;http://www.phate.tw/&lt;/a&gt;&lt;br /&gt;題目二下載處：&lt;a href="http://www.badongo.com/cn/file/19454233"&gt;http://www.badongo.com/cn/file/19454233&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-239007545523254823?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/239007545523254823/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/phate-wargame-02.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/239007545523254823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/239007545523254823'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/phate-wargame-02.html' title='【筆記】Phate聖誕節 wargame (02)'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oF_vbQi9p8w/Sz3AFOOmxjI/AAAAAAAAEhw/mlPgaMPYp58/s72-c/0.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-6455663547069391636</id><published>2010-01-01T00:39:00.000-08:00</published><updated>2010-01-01T01:22:30.590-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='資訊安全'/><category scheme='http://www.blogger.com/atom/ns#' term='程式練習'/><title type='text'>【筆記】Phate聖誕節 wargame (01)</title><content type='html'>Phate在聖誕節辦了 wargame的活動，一共有2題：&lt;br /&gt;第一題：&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;如果此檔案用Dev-C++ 4.9.9.2或是Visual C++ 6.0在Windows XP下編譯與執行, 結果如下:&lt;br /&gt;&lt;br /&gt;32405&lt;br /&gt;28551&lt;br /&gt;17796&lt;br /&gt;22466&lt;br /&gt;30810&lt;br /&gt;5319&lt;br /&gt;30799&lt;br /&gt;18686&lt;br /&gt;13323&lt;br /&gt;11973&lt;br /&gt;&lt;br /&gt;請問：這個檔案是在什麼時候執行的?&lt;span style="color: rgb(255, 255, 255);font-size:0px;" &gt;8 e! Q, z! M0 k% [&lt;/span&gt;&lt;/pre&gt;思考方向：&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;srand( &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;time( NULL )&lt;/span&gt; );&lt;/span&gt;&lt;br /&gt;int i;&lt;br /&gt;for ( i = 0; i &amp;lt; 10; i++ ) {&lt;br /&gt;printf( "%lu\n", rand() );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;＊ srand 的作用在製作亂數的種子，所以只要確定 time(NULL)抓取的時間&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　就可以知道程式執行的時間...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;用最笨的暴力解...&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;直接把 seconds 的值依序帶入比對，對出結果再轉換回時間&lt;/span&gt;&lt;br /&gt;程式碼如下：&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#include &lt;stdio.h&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;time.h&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt; int i;&lt;br /&gt; &lt;br /&gt; int a[10]={32405,28551,17796,22466,30810,5319,30799,18686,13323,11973};&lt;br /&gt;  &lt;br /&gt;   time_t seconds;&lt;br /&gt;   struct tm * timeinfo;&lt;br /&gt;  &lt;br /&gt;   seconds = 0;&lt;br /&gt;   do{&lt;br /&gt;       srand(seconds);&lt;br /&gt;       for ( i = 0; i &lt; 10; i++ ) {&lt;br /&gt;           if(rand()!= a[i])&lt;br /&gt;           {&lt;br /&gt;               break;&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;        if(i==10)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;            timeinfo = localtime ( &amp;amp;seconds );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;            printf ( "Current local time and date: %s", asctime (timeinfo) );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;        }&lt;/span&gt;&lt;br /&gt;       seconds +=1;&lt;br /&gt;   }while(i&lt;10);          &lt;br /&gt;   system("pause");&lt;br /&gt; return 0;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;原始出處 Phate ：&lt;a href="http://www.phate.tw/"&gt;http://www.phate.tw/&lt;/a&gt;&lt;br /&gt;題目一下載處：：&lt;a href="http://www.badongo.com/file/19454229"&gt;http://www.badongo.com/file/19454229&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-6455663547069391636?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/6455663547069391636/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/phate-wargame-01.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6455663547069391636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6455663547069391636'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2010/01/phate-wargame-01.html' title='【筆記】Phate聖誕節 wargame (01)'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-7603125220486539630</id><published>2009-12-24T07:06:00.000-08:00</published><updated>2009-12-24T07:37:41.968-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='資訊安全'/><category scheme='http://www.blogger.com/atom/ns#' term='Snort'/><title type='text'>【筆記】Snort Rules調校練習(01)</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;一、把拿到的測試檔餵給 snort 做測試&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-weight: bold;"&gt;snort -r xxx.pcap -c /etc/snort/snort.conf&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;-r 接要測試的封包內容&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;-c 接snort的設定檔&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;二、去 log看看是否產生 alert的記錄？&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;[**] [1:&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;1387&lt;/span&gt;:10]&lt;span style="font-weight: bold;"&gt; SQL raiserror possible buffer overflow&lt;/span&gt; [**]&lt;br /&gt;[Classification: Attempted User Privilege Gain] [Priority: 1]&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;11/06-09:02:49.431452&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;0.113.44.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;144:1639 -&gt; 10.52.80.50&lt;/span&gt;:&lt;span style="font-weight: bold;"&gt;1433&lt;/span&gt;&lt;br /&gt;TCP TTL:119 TOS:0x0 ID:34185 IpLen:20 DgmLen:788 DF&lt;br /&gt;***AP*** Seq: 0x5232E96E  Ack: 0x3F5DC9FB  Win: 0xFFFF  TcpLen: 20&lt;br /&gt;[Xref =&gt; http://cgi.nessus.org/plugins/dump.php3?id=11217]&lt;br /&gt;[Xref =&gt; http://cve.mitre.org/cgi-bin/cvename.cgi?name=2001-0542]&lt;br /&gt;[Xref =&gt; http://www.securityfocus.com/bid/3733]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;sid：1387&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;錯誤訊息：&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;SQL raiserror possible buffer overflow&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;時間：&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;11/06-09:02:49.431452&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;來源 &amp;amp; 目的：1&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;0.113.44.144:1639 -&gt; 10.52.80.50&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PORT：&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;1433&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;三、查詢 sid 看看這是何方神聖？&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;sid:1387在 &lt;span style="font-weight: bold;"&gt;sql.rules&lt;/span&gt;中被找到&lt;br /&gt;&lt;br /&gt;rule 1387 長這樣子 ....&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;alert&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;tcp&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;$EXTERNAL_NET any -&gt; $SQL_SERVERS 1433 &lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;msg:"SQL raiserror possible buffer overflow";&lt;br /&gt;flow:to_server,established;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;content:"r|00|a|00|i|00|s|00|e|00|r|00|r|00|o|00|r|00|";&lt;/span&gt;&lt;br /&gt;nocase; reference:bugtraq,3733;&lt;br /&gt;reference:cve,2001-0542;&lt;br /&gt;reference:nessus,11217;&lt;br /&gt;classtype:&lt;br /&gt;attempted-user; sid:1387; rev:10;&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;＊如果從外部 IP 傳給 SQL Server （PORT 1433）的封包&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　含有這段內容，就丟出 1387 的 alert&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;四、用WireShark看看封包的樣子？&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(01) 用WireShark開啟封包檔&lt;br /&gt;(02) 可以直接從時間找到對應的封包&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SzOHjYkg0EI/AAAAAAAAEdg/T_SzzMMCFfY/s1600-h/wireshark_1387.bmp"&gt;&lt;img style="cursor: pointer; width: 360px; height: 400px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SzOHjYkg0EI/AAAAAAAAEdg/T_SzzMMCFfY/s400/wireshark_1387.bmp" alt="" id="BLOGGER_PHOTO_ID_5418823818617606210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;＊看起來是一段 SQL，判斷是否要執行 raiserror的訊息，&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;但是 snort 誤判了...冏&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;五、所以接下來要修改 sid: 1387 這條 rules 解決誤判的情況...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-weight: bold;"&gt;修改後的：　&lt;br /&gt;&lt;br /&gt;alert&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;tcp&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;$EXTERNAL_NET any -&gt; $SQL_SERVERS 1433 &lt;/span&gt;&lt;br /&gt;(&lt;br /&gt;msg:"SQL raiserror possible buffer overflow";&lt;br /&gt;flow:to_server,established;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;content:!"i|00|f|00|";&lt;/span&gt;　→　多放了這一行...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;content:"r|00|a|00|i|00|s|00|e|00|r|00|r|00|o|00|r|00|";&lt;/span&gt;&lt;br /&gt;nocase; reference:bugtraq,3733;&lt;br /&gt;reference:cve,2001-0542;&lt;br /&gt;reference:nessus,11217;&lt;br /&gt;classtype:&lt;br /&gt;attempted-user; sid:1387; rev:10;&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;＊加上封包中不能出現 if 的字樣&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;（有 if 就把他當作程式判斷 raiserror是否該被啟用？）&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;六、修改後再測一次&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-weight: bold;"&gt;snort -r xxx.pcap -c /etc/snort/snort.conf&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;span&gt;原來在 alert 中會出現的 1387 訊息這時候應該不見了~~&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;結論：&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;　 Snort 本身的設定、安裝過程不會太繁複，&lt;br /&gt;　但是 rules的調校會警示訊息的內容；&lt;br /&gt;　需要研究弱點的特徵，才有辨法訂出有效的阻擋的規則，&lt;br /&gt;　在訂規則的同時也要考慮誤判的情況發生。&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-7603125220486539630?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/7603125220486539630/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/snort-rules01.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7603125220486539630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7603125220486539630'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/snort-rules01.html' title='【筆記】Snort Rules調校練習(01)'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/SzOHjYkg0EI/AAAAAAAAEdg/T_SzzMMCFfY/s72-c/wireshark_1387.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-1588951815437099211</id><published>2009-12-22T21:30:00.000-08:00</published><updated>2009-12-22T21:49:14.399-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>【Linux】yum 設定（Fedora 6）</title><content type='html'>要來別人裝好的 Linux （Fedora 6）想做一些測試，沒想到連 Gcc 都沒裝&lt;br /&gt;想從 Fedora 6 新增……結果 yum  不能用 Orz&lt;br /&gt;&lt;br /&gt;設定檔的位置：&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　/etc/yum.conf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　/etc/yum.repos.d&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;不能更新的原因主要是因為設定檔裡面的 &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;baseurl&lt;/span&gt; 已經不在了...&lt;br /&gt;所以把&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="font-weight: bold;"&gt;baseurl&lt;/span&gt; &lt;/span&gt;打開、連結更新就好了...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;網路上一直查詢到義守大學的伺服器（http://ftp.isu.edu.tw/）可以用...&lt;br /&gt;現在已經搬到　http://archives.fedoraproject.org/pub/　&lt;br /&gt;我目前的設定 ↓ （使用前可以先連連看是否可以進去？）&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;檔案：fedora-core.repo&lt;/span&gt;&lt;br /&gt;[core]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/$releasever/$basearch/os/&lt;br /&gt;&lt;br /&gt;[core-debuginfo]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/$releasever/$basearch/debug/&lt;br /&gt;&lt;br /&gt;[core-source]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/$releasever/source/SPRMS/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;檔案：fedora-development.repo&lt;/span&gt;&lt;br /&gt;[development]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/development&lt;br /&gt;&lt;br /&gt;[development-debuginfo]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/development/$basearch/debug/&lt;br /&gt;&lt;br /&gt;[development-source]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/development/source/SRPMS/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;檔案：fedora-updates.repo&lt;/span&gt;&lt;br /&gt;[updates]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/updates/$releasever/$basearch/&lt;br /&gt;&lt;br /&gt;[updates-debuginfo]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/updates/$releasever/$basearch/debug/&lt;br /&gt;&lt;br /&gt;[updates-source]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/core/$releasever/$basearch/os/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;檔案：fedora-updates-testing.repo&lt;/span&gt;&lt;br /&gt;[updates-testing]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/updates/testing/$releasever/$basearch/&lt;br /&gt;&lt;br /&gt;[updates-testing-debuginfo]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/updates/testing/$releasever/$basearch/debug/&lt;br /&gt;&lt;br /&gt;[updates-testing-source]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/updates/testing/$releasever/SPRMS/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;檔案：fedora-extras.repo&lt;/span&gt;&lt;br /&gt;[extras]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/extras/$releasever/$basearch/&lt;br /&gt;&lt;br /&gt;[extras-debuginfo]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/extras/$releasever/$basearch/debug/&lt;br /&gt;&lt;br /&gt;[extras-source]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/extras/$releasever/SRPMS/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;檔案：fedora-extras-development.repo&lt;/span&gt;&lt;br /&gt;[extras-development]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/extras/development/$basearch/&lt;br /&gt;&lt;br /&gt;[extras-development-debuginfo]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/extras/development/$basearch/debug/&lt;br /&gt;&lt;br /&gt;[extras-development-source]&lt;br /&gt;baseurl=http://archives.fedoraproject.org/pub/archive/fedora/linux/extras/development/SRPMS/&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-1588951815437099211?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/1588951815437099211/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/linuxyum-fedora-6.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1588951815437099211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/1588951815437099211'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/linuxyum-fedora-6.html' title='【Linux】yum 設定（Fedora 6）'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-4111227717214026314</id><published>2009-12-19T23:24:00.000-08:00</published><updated>2011-10-04T23:29:31.906-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式練習'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><category scheme='http://www.blogger.com/atom/ns#' term='密碼學研究'/><title type='text'>【Code】CRT運算</title><content type='html'>同學的研究有用到 CRT（中國剩餘定理）&lt;br /&gt;有時候要幫忙算 CRT 的答案..&lt;br /&gt;一堆加減乘除，算到都神智不清了&lt;br /&gt;寫個小程式來幫算 ^^y&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;/* CRT 計算  */&lt;br /&gt;/* Author: Star Lee */&lt;br /&gt;/* Date: 2009/12/20 */&lt;br /&gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#define MAX 5&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;/* 最大公因數 */&lt;/span&gt;&lt;br /&gt;int gcd(int a,int b)&lt;br /&gt;{&lt;br /&gt; //swap &lt;br /&gt; if(a &amp;lt; b)&lt;br /&gt; {&lt;br /&gt;     a = a+b;&lt;br /&gt;     b = a-b;&lt;br /&gt;     a = a-b;&lt;br /&gt; }&lt;br /&gt;    &lt;br /&gt; if(b == 1)&lt;br /&gt;     return b;&lt;br /&gt; else&lt;br /&gt;     return gcd(b,(a%b));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;/* 計算 M 值 */&lt;/span&gt;&lt;br /&gt;int Get_M(int m[],int t)&lt;br /&gt;{&lt;br /&gt; int i,j,r;&lt;br /&gt; int M = 1;&lt;br /&gt;&lt;br /&gt; for(i=0;i&amp;lt;t-1;i++)&lt;br /&gt; {&lt;br /&gt;     for(j=i+1;j&amp;lt;t;j++)&lt;br /&gt;     {&lt;br /&gt;         r = gcd(m[i],m[j]);&lt;br /&gt;         if(r!=1)&lt;br /&gt;         {&lt;br /&gt;             return M;&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; for(i=0;i&amp;lt;t;i++)&lt;br /&gt; {&lt;br /&gt;     M*=m[i];&lt;br /&gt; } &lt;br /&gt; return M;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;/*計算 y 值*/&lt;/span&gt;&lt;br /&gt;int Get_y(int M,int m)&lt;br /&gt;{&lt;br /&gt; int y;&lt;br /&gt; for(y=1;y&amp;lt;m;y++)&lt;br /&gt; {&lt;br /&gt;     if((( M / m * y )% m) == 1 )&lt;br /&gt;         return y;&lt;br /&gt; }&lt;br /&gt; //return y;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;/* 主程式 */&lt;/span&gt;&lt;br /&gt;int main (void)&lt;br /&gt;{&lt;br /&gt; int T,i;&lt;br /&gt; int m[MAX],v[MAX],y[MAX];&lt;br /&gt; int M,X;&lt;br /&gt;&lt;br /&gt; /* Initial */&lt;br /&gt; for(i=0;i&amp;lt;MAX;i++)&lt;br /&gt; {&lt;br /&gt;     m[i]=0;&lt;br /&gt;     v[i]=0;&lt;br /&gt;     y[i]=0;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;/* Input */&lt;/span&gt;&lt;br /&gt; do&lt;br /&gt; {&lt;br /&gt;     printf("共有幾組算式（最多5組）？");  &lt;br /&gt;     scanf("%d,",&amp;amp;T);  &lt;br /&gt;  &lt;br /&gt;     if((T &amp;gt; MAX)||(T &amp;lt; 0))&lt;br /&gt;     {&lt;br /&gt;         printf(" %d 超出本程式計算範圍無法計算 !! ",T);  &lt;br /&gt;     }&lt;br /&gt;     else&lt;br /&gt;     {&lt;br /&gt;         &lt;span style="font-weight: bold;"&gt;//題目  &lt;/span&gt;&lt;br /&gt;         printf("EX：一次取 3 個最後剩 2 個，請輸入 3,2 \n");&lt;br /&gt;         for(i=0;i&amp;lt;T;i++)&lt;br /&gt;         {&lt;br /&gt;             printf("請輸第 %2d 組值：",(i+1));&lt;br /&gt;             scanf("%d,%d",&amp;amp;m[i],&amp;amp;v[i]);&lt;br /&gt;             if((m[i]==0)||(v[i]==0))&lt;br /&gt;             {&lt;br /&gt;                 printf("第 %2d 組值輸入錯誤!!\n：",(i+1));&lt;br /&gt;                ("格式：一次取 3 個最後剩 2 個，請輸入 3,2 \n");&lt;br /&gt;                 i--;&lt;br /&gt;             }&lt;br /&gt;         }&lt;br /&gt;      &lt;br /&gt;         &lt;span style="font-weight: bold;"&gt;//列出題目&lt;/span&gt;&lt;br /&gt;         printf("\n您要計算的題目：\n");&lt;br /&gt;         for(i=0;i&amp;lt;T;i++)&lt;br /&gt;         {&lt;br /&gt;             printf(" X mod %d = %d \n",m[i],v[i]);&lt;br /&gt;         }&lt;br /&gt;         printf("\n 求 X的值？\n");&lt;br /&gt;      &lt;br /&gt;         printf("\n M的值：");&lt;br /&gt;         &lt;span style="font-weight: bold;"&gt;/*M*/&lt;/span&gt;&lt;br /&gt;         M = Get_M(m,T);&lt;br /&gt;      &lt;br /&gt;         if(M == 1)&lt;br /&gt;         {&lt;br /&gt;             printf("m[i]的值：");&lt;br /&gt;             for(i=0;i&amp;lt;T;i++)&lt;br /&gt;             {&lt;br /&gt;                 printf(" %d",m[i]);&lt;br /&gt;             }&lt;br /&gt;             printf("沒有 互質 不符合 CRT 公式的要求 !! \n");&lt;br /&gt;         }&lt;br /&gt;         else&lt;br /&gt;         {&lt;br /&gt;             printf(" M = %d \n",M);&lt;br /&gt;          &lt;br /&gt;            &lt;span style="font-weight: bold;"&gt; /*y*/&lt;/span&gt;&lt;br /&gt;             printf("\n yi的值：\n");&lt;br /&gt;             for(i=0;i&amp;lt;T;i++)&lt;br /&gt;             {&lt;br /&gt;                 y[i] = Get_y(M,m[i]);&lt;br /&gt;                 printf(" y%d = %d \n",(i+1),y[i]);&lt;br /&gt;             }&lt;br /&gt;              &lt;br /&gt;             &lt;span style="font-weight: bold;"&gt;/*總數：X*/&lt;/span&gt;&lt;br /&gt;             X = 0;&lt;br /&gt;          &lt;br /&gt;             printf("\n 代入公式：\n");&lt;br /&gt;             printf(" X = ");&lt;br /&gt;             for(i=0;i&amp;lt;T;i++)&lt;br /&gt;             {&lt;br /&gt;                 printf(" (M/m[%d])*v%d*y%d ",i,i,i);&lt;br /&gt;                 if(i&amp;lt;T-1)&lt;br /&gt;                     printf("+");&lt;br /&gt;                 else&lt;br /&gt;                     printf("\n");&lt;br /&gt;             }&lt;br /&gt;          &lt;br /&gt;             printf("   = ");&lt;br /&gt;             for(i=0;i&amp;lt;T;i++)&lt;br /&gt;             {&lt;br /&gt;                 printf(" (%d/%d)*%d*%d ",M,m[i],v[i],y[i]);&lt;br /&gt;                 X += v[i]*(M/m[i])*y[i];&lt;br /&gt;              &lt;br /&gt;                 if(i&amp;lt;T-1)&lt;br /&gt;                     printf("+");&lt;br /&gt;                 else&lt;br /&gt;                     printf("\n");&lt;br /&gt;             }&lt;br /&gt;             X = X % M;&lt;br /&gt;             printf("   = %2d ←答案",X);&lt;br /&gt;         }&lt;br /&gt;     } &lt;br /&gt; }while(0);&lt;br /&gt; system("pause");&lt;br /&gt;&lt;br /&gt; return 0; &lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-4111227717214026314?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/4111227717214026314/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/codecrt.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4111227717214026314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4111227717214026314'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/codecrt.html' title='【Code】CRT運算'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-8434719535117346508</id><published>2009-12-18T22:33:00.000-08:00</published><updated>2011-10-04T23:29:32.049-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><title type='text'>【筆記】在C中使用Regular Expression</title><content type='html'>前天旁聽了一個莫名其妙的會議？&lt;br /&gt;不過還是有聽一下，會議中有討論到一些規則的 parse 有點困難~~&lt;br /&gt;當時覺得 Regular Expression 應該可以做到。&lt;br /&gt;&lt;br /&gt;一、下載可以在 C 裡面使用的 Regular Expression Library ：Regex&lt;br /&gt;&lt;br /&gt;二、 Compiler Regex&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;(1) 編譯 Regex：&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;make -f Makefile.Mingw32&lt;/span&gt;&lt;br /&gt;(2) 過程：&lt;br /&gt;　　gcc -I. -DPOSIX_MISTAKE  -DWIN32   -c -o regcomp.o regcomp.c&lt;br /&gt;　　gcc -I. -DPOSIX_MISTAKE  -DWIN32   -c -o regexec.o regexec.c&lt;br /&gt;　　gcc -I. -DPOSIX_MISTAKE  -DWIN32   -c -o regerror.o regerror.c&lt;br /&gt;　　gcc -I. -DPOSIX_MISTAKE  -DWIN32   -c -o regfree.o regfree.c&lt;br /&gt;　　del libregex.a&lt;br /&gt;　　找不到 C:\User\fbtip\others\regex\libregex.a　&lt;br /&gt;　　ar cr libregex.a regcomp.o regexec.o regerror.o regfree.o&lt;br /&gt;　　ranlib libregex.a&lt;br /&gt;&lt;br /&gt;＊ 用 Windows XP 在 Dev C++ 上做測試，所以記得設定路徑...&lt;br /&gt;&lt;/pre&gt;三、 把檔案搬進 Dev C++來用：&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;(1) Library：&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;把 libregex.a 搬進 C:\Dev-Cpp\lib&lt;/span&gt;&lt;br /&gt;(2) .H檔：&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;regex.h 搬進 C:\Dev-Cpp\include&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;四、寫程式來試試看~~&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;石頭閒語：文章最後有程式碼測試&lt;a href="http://blog.roodo.com/rocksaying/archives/3866523.html"&gt; http://blog.roodo.com/rocksaying/archives/3866523.html&lt;/a&gt;&lt;br /&gt;＊ Compiler 程式用的指令： &lt;span style="font-weight: bold; color: rgb(102, 0, 0);"&gt;gcc -o pmatch pmatch.c &lt;span style="color: rgb(255, 0, 0);"&gt;-lregex&lt;/span&gt;&lt;/span&gt; 記得把 regex link 進程式 ~~&lt;br /&gt;&lt;/pre&gt;五、編譯好的內容：&lt;a href="http://www.badongo.com/file/19141764"&gt;下載&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;參考資料：&lt;br /&gt;　朝陽科大資管系．洪朝貴老師：&lt;a title="http://www.cyut.edu.tw/~ckhung/olbook/gnulinux/regexp.shtml" href="http://www.cyut.edu.tw/%7Eckhung/olbook/gnulinux/regexp.shtml"&gt;http://www.cyut.edu.tw/~ckhung/b/re/&lt;/a&gt;&lt;br /&gt;　石頭閒語：&lt;a href="http://blog.roodo.com/rocksaying/archives/3866523.html"&gt;http://blog.roodo.com/rocksaying/archives/3866523.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-8434719535117346508?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/8434719535117346508/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/cregular-expression.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8434719535117346508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8434719535117346508'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/cregular-expression.html' title='【筆記】在C中使用Regular Expression'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-4005355147479607678</id><published>2009-12-17T18:36:00.000-08:00</published><updated>2011-10-04T23:29:31.898-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='程式練習'/><category scheme='http://www.blogger.com/atom/ns#' term='C/C++/C#'/><title type='text'>【Code】完全數</title><content type='html'>/** 程式內容：完全數檢查 **/&lt;br /&gt;/** 完全數的定義：等於除了自己之外所有因數的和。 **/&lt;br /&gt;/**  舉例來說： 6 = 1 + 2 + 3 ，6 就是一個完全數**/&lt;br /&gt;&lt;br /&gt;/** 測試資料： 6 28 496 8128 **/&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;bool Check_Divisor(int Final)&lt;br /&gt;{&lt;br /&gt; int i,Check_Limit,Sum;&lt;br /&gt;&lt;br /&gt; Check_Limit = Final; &lt;br /&gt; Sum = 1;&lt;br /&gt;&lt;br /&gt; printf("Sum = %2d ",Sum);&lt;br /&gt; for(i=2;i &amp;lt; Check_Limit ;i++)&lt;br /&gt;  {&lt;br /&gt;      if((Final % i)==0)&lt;br /&gt;      {&lt;br /&gt;          {&lt;br /&gt;              Sum += i + (Final / i);              &lt;br /&gt;              printf(" + ( %2d + %2d ) ",i,(Final / i));&lt;br /&gt;          }&lt;br /&gt;          Check_Limit = (Final / i);          &lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if(Final == Sum)&lt;br /&gt;      return true;  &lt;br /&gt;  return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(void)&lt;br /&gt;{&lt;br /&gt;  int Final;&lt;br /&gt;&lt;br /&gt;  printf("隨意輸入一個值：");&lt;br /&gt;  scanf("%d",&amp;amp;Final);&lt;br /&gt;  if(Check_Divisor(Final))&lt;br /&gt;      printf("YES!!");&lt;br /&gt;  else&lt;br /&gt;      printf("NO!!");&lt;br /&gt;&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-4005355147479607678?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/4005355147479607678/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/code.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4005355147479607678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4005355147479607678'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/code.html' title='【Code】完全數'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-3820888367335954991</id><published>2009-12-17T06:22:00.000-08:00</published><updated>2009-12-17T07:18:15.803-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='資訊安全'/><title type='text'>【筆記】CWE/SANS Top 25</title><content type='html'>關於CWE (Common Weakness Enumeration)&lt;br /&gt;CWE於1999年9月成立，是一個&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;由美國國土安全部的國家網路安全部門所贊&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;助成立的保障軟體安全的策略計畫，這個計畫的目標在替所有的軟體漏洞建&lt;/span&gt; &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;立正式統一的辭典。&lt;/span&gt;用來取代目前各公司創造的術語，透過這個辭典，MITRE希望提供辨別、防止軟體漏洞的標準。同時也可以作為人們選擇軟體的安全衡量標準。另外，CWE也有助於廠商了解開發軟體時應該注意的事項，目前CWE的網站由 MITRE公司負責管理維護。&lt;br /&gt;&lt;br /&gt;關於SANS (SysAdmin, Audit, Network, Security)&lt;br /&gt;SANS成立於1989年，是&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;目前全世界最大的資訊安全培訓、認證的研究、&lt;/span&gt; &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;教育組織。&lt;/span&gt;目前約有165,000名安全專家分佈在世界各地和企業跟大學合作幫助資訊安全領域的研究。&lt;br /&gt;&lt;br /&gt;SANS免費提供所有的資訊：&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Internet Storm Center（網路安全監測警示系統） &lt;/li&gt;&lt;li&gt;資訊安全相關新聞（每周更新）&lt;/li&gt;&lt;li&gt;資訊安全弱點警示（每周更新）&lt;/li&gt;&lt;li&gt;1,200多篇獲獎的資訊安全相關的論文&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;CWE/SANS Top 25&lt;br /&gt;由 CWE/SANS 資安專安共同公布的25個程式常見的錯誤&lt;br /&gt;&lt;br /&gt;分成3類：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Insecure Interaction Between Componetnts&lt;/li&gt;&lt;li&gt;Risky Resource Management&lt;/li&gt;&lt;li&gt;Porous Defenses&lt;/li&gt;&lt;/ol&gt;第一名是輸入的內容沒有確實的驗證；裡面有些內容在 OWASP TOP 10 中出現了EX： Injection、Cross-site Scripting (XSS)、CSRF…&lt;br /&gt;Injection 被拆成3塊，還都有入榜 冏rz&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQL Injection&lt;/li&gt;&lt;li&gt;Command Injection&lt;/li&gt;&lt;li&gt;Code Injection&lt;/li&gt;&lt;/ul&gt;CWE/SANS Top 25&lt;br /&gt;&lt;ul style="font-weight: bold; color: rgb(255, 0, 0);"&gt;&lt;li&gt;Insecure Interaction Between Components&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;CWE-20: Improper Input Validation&lt;/li&gt;&lt;li&gt;CWE-116: Improper Encoding or Escaping of Output&lt;/li&gt;&lt;li&gt;CWE-89: Failure to Preserve SQL Query Structure ('SQL Injection')&lt;/li&gt;&lt;li&gt;CWE-79: Failure to Preserve Web Page Structure ('Cross-site Scripting')&lt;/li&gt;&lt;li&gt;CWE-78: Improper Sanitization of Special Elements used in an OS Command ('OS Command Injection')&lt;/li&gt;&lt;li&gt;CWE-319: Cleartext Transmission of Sensitive Information&lt;/li&gt;&lt;li&gt;CWE-352: Cross-Site Request Forgery (CSRF)&lt;/li&gt;&lt;li&gt;CWE-362: Race Condition&lt;/li&gt;&lt;li&gt;CWE-209: Error Message Information Leak&lt;/li&gt;&lt;/ol&gt;&lt;ul style="color: rgb(255, 0, 0);"&gt;&lt;li&gt;Risky Resource Management&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;CWE-119: Failure to Constrain Operations within the Bounds of a Memory Buffer&lt;/li&gt;&lt;li&gt;CWE-642: External Control of Critical State Data&lt;/li&gt;&lt;li&gt;CWE-73: External Control of File Name or Path&lt;/li&gt;&lt;li&gt;CWE-426: Untrusted Search Path&lt;/li&gt;&lt;li&gt;CWE-94: Failure to Control Generation of Code ('Code Injection')&lt;/li&gt;&lt;li&gt;CWE-494: Download of Code Without Integrity Check&lt;/li&gt;&lt;li&gt;CWE-404: Improper Resource Shutdown or Release&lt;/li&gt;&lt;li&gt;CWE-665: Improper Initialization&lt;/li&gt;&lt;li&gt;CWE-682: Incorrect Calculation&lt;/li&gt;&lt;/ol&gt;&lt;ul style="color: rgb(255, 0, 0);"&gt;&lt;li&gt;Porous Defenses&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;CWE-285: Improper Access Control (Authorization) &lt;/li&gt;&lt;li&gt;CWE-327: Use of a Broken or Risky Cryptographic Algorithm &lt;/li&gt;&lt;li&gt;CWE-259: Hard-Coded Password &lt;/li&gt;&lt;li&gt;CWE-732: Incorrect Permission Assignment for Critical Resource &lt;/li&gt;&lt;li&gt;CWE-330: Use of Insufficiently Random Values &lt;/li&gt;&lt;li&gt;CWE-250: Execution with Unnecessary Privileges &lt;/li&gt;&lt;li&gt;CWE-602: Client-Side Enforcement of Server-Side Security &lt;/li&gt;&lt;/ol&gt; &lt;span style="font-weight: bold;"&gt;===分隔線===分隔線===分隔線===分隔線===分隔線===分隔線===&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;順便介紹一下 SANS Top 20&lt;br /&gt;SANS Top 20 是 SANS這個組織列的20個網路風險的來源，看了一下覺得他們把有連上網路的工具都包了。這裡只有簡介一下，其實 SANS 列的更詳細，舉例來說列到 Web Browsers 然後還有更細部去條列 IE這種瀏覽器常見的弱點…等，可以到 SANS網站看更詳細的內容&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　Client-Side Vulnerabilities:　客戶端&lt;/span&gt;&lt;ul&gt;&lt;li&gt;C1. Web Browsers&lt;/li&gt;&lt;li&gt;C2. Office Software&lt;/li&gt;&lt;li&gt;C3. Email Clients&lt;/li&gt;&lt;li&gt;C4. Media Players&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　Server-Side Vulnerabilities in:　伺服器端&lt;/span&gt;&lt;ul&gt;&lt;li&gt;S1. Web Applications&lt;/li&gt;&lt;li&gt;S2. Windows Services&lt;/li&gt;&lt;li&gt;S3. Unix and Mac OS Services&lt;/li&gt;&lt;li&gt;S4. Backup Software&lt;/li&gt;&lt;li&gt;S5. Ant-virus Software&lt;/li&gt;&lt;li&gt;S6. Management Servers&lt;/li&gt;&lt;li&gt;S7. Database Softeare&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　Security Policy and Persionnel:　安全規則&lt;/span&gt;&lt;ul&gt;&lt;li&gt;H1. Excessive User Right and Unauthorized Devices&lt;/li&gt;&lt;li&gt;H2. Phishing/Spear Phishing&lt;/li&gt;&lt;li&gt;H3. Unencrypted Laptops and Removable Media&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　Application Abuse:　應用程式&lt;/span&gt;&lt;ul&gt;&lt;li&gt;A1. Instant Messaging&lt;/li&gt;&lt;li&gt;A2. Peer-to-Peer Programs&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　Network Devices:　網路裝置&lt;/span&gt;&lt;ul&gt;&lt;li&gt;N1. VOIP Servers and Phones&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;　Zero Day Attacks:　零時差攻擊&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Z1. Zero Day Attacks&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-3820888367335954991?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/3820888367335954991/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/cwesans-top-25.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3820888367335954991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3820888367335954991'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/cwesans-top-25.html' title='【筆記】CWE/SANS Top 25'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-3427817046530046805</id><published>2009-12-10T04:30:00.000-08:00</published><updated>2009-12-11T08:39:05.429-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='逆向工程'/><title type='text'>【筆記】Reverse Engineering–記憶體配置</title><content type='html'>這篇的目的是要觀察，程式運行期間 memory 的變化&lt;br /&gt;這個檔案是要看的程式原始碼：&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;br /&gt;#include "stdafx.h"&lt;br /&gt;&lt;br /&gt;int func_B(int arg_B1,int arg_B2)&lt;br /&gt;{&lt;br /&gt;int var_B1,var_B2;&lt;br /&gt;var_B1 = arg_B1 + arg_B2;&lt;br /&gt;var_B2 = arg_B1 - arg_B2;&lt;br /&gt;return var_B1 * var_B2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int func_A(int arg_A1,int arg_A2)&lt;br /&gt;{&lt;br /&gt;int var_A;&lt;br /&gt;var_A = func_B(arg_A1,arg_A2)+arg_A1;&lt;br /&gt;return var_A;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char* argv[])&lt;br /&gt;{&lt;br /&gt;int var_main;&lt;br /&gt;var_main = func_A(4,3);&lt;br /&gt;return var_main;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;程式很簡單，從 main()開始，去呼叫 func_A()；func_A() 裡面又再去呼叫 func_B()&lt;br /&gt;&lt;br /&gt;main 的 C程式碼：&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;int main(int argc, char* argv[])&lt;br /&gt;{&lt;br /&gt;int var_main;&lt;br /&gt;var_main = func_A(4,3);&lt;br /&gt;return var_main;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;IDA pro 轉出來的 main：&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;(1)&lt;/span&gt;&lt;br /&gt;.text:004010E0 main            proc near               ; CODE XREF: _mainj&lt;br /&gt;.text:004010E0&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;//位址宣告&lt;/span&gt;&lt;br /&gt;.text:004010E0 var_44          = dword ptr -44h &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//呼叫到的函式Func_A&lt;/span&gt;&lt;br /&gt;.text:004010E0 var_4           = dword ptr -4 &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;//var_main&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;變數位址（VC6由右→左） int main(int argc, char* argv[])&lt;/span&gt;&lt;br /&gt;.text:004010E0 arg_0           = dword ptr  8 &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;//argv[]&lt;/span&gt;&lt;br /&gt;.text:004010E0 arg_4           = dword ptr  0Ch &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//argc&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;.text:004010E0&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;儲存ebp的位址&lt;/span&gt;&lt;br /&gt;.text:004010E0     push    ebp&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;移到新的esp的位址&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;(2)&lt;/span&gt;&lt;br /&gt;.text:004010E1     mov     ebp, esp&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;ebp移到新的esp的位址 Func_A&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;(3)&lt;/span&gt;&lt;br /&gt;.text:004010E3     sub     esp, 44h&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//進去Func_A之前把變數存好&lt;/span&gt;&lt;br /&gt;.text:004010E6                 push    ebx&lt;br /&gt;.text:004010E7                 push    esi&lt;br /&gt;.text:004010E8                 push    edi&lt;br /&gt;.text:004010E9                 lea     edi, [ebp+var_44]&lt;br /&gt;.text:004010EC                 mov     ecx, 11h&lt;br /&gt;.text:004010F1                 mov     eax, 0CCCCCCCCh&lt;br /&gt;.text:004010F6                 rep stosd&lt;br /&gt;.text:004010F8                 push    3&lt;br /&gt;.text:004010FA                 push    4&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//跳進Func_A&lt;/span&gt;&lt;br /&gt;.text:004010FC                 call    j_func_A&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//從Func_A 回來了&lt;/span&gt;&lt;br /&gt;.text:00401101                 add     esp, 8&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//在進Func_A存的變數，現在再讀回來&lt;/span&gt;&lt;br /&gt;.text:00401104                 mov     [ebp+var_4], eax&lt;br /&gt;.text:00401107                 mov     eax, [ebp+var_4]&lt;br /&gt;.text:0040110A                 pop     edi&lt;br /&gt;.text:0040110B                 pop     esi&lt;br /&gt;.text:0040110C                 pop     ebx&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;//Esp的位址挪回來&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;(4)&lt;/span&gt;&lt;br /&gt;.text:0040110D                 add     esp, 44h&lt;br /&gt;.text:00401110                 cmp     ebp, esp&lt;br /&gt;.text:00401112                 call    __chkesp&lt;br /&gt;.text:00401117                 mov     esp, ebp&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;(5)&lt;br /&gt;&lt;/span&gt;.text:00401119                 pop     ebp&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;//回去原來的地方（Function結束）&lt;/span&gt;&lt;br /&gt;.text:0040111A                 retn&lt;br /&gt;.text:0040111A main            endp&lt;br /&gt;&lt;/pre&gt;main 的記憶體放置：&lt;br /&gt;　main 一開始放置會呼叫到的Function Func_A&lt;br /&gt;　然後是 main 裡面宣告的 var_main&lt;br /&gt;　最後是 執行 main 時傳進來的參數&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;＊這個程式用的是VC，所以是由右至左&lt;/span&gt;&lt;br /&gt;　&lt;img style="cursor: pointer; width: 161px; height: 161px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SyD4FaRwFCI/AAAAAAAAEb4/eHk3uBTTZPY/s400/main.JPG" alt="" id="BLOGGER_PHOTO_ID_5413599523936146466" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;main 執行時 memory 的變化：&lt;br /&gt;esp : Function 的頂端；ebp : Function 的底端&lt;br /&gt;&lt;br /&gt;(01) esp : main的頂端；ebp : main 的底端&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;執行 Func_A&lt;/span&gt;&lt;br /&gt;(02) esp : main 的頂端；ebp : func_A的底端&lt;br /&gt;(03) esp : func_A 的頂端；ebp : func_A的底端&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;回到 main&lt;/span&gt;&lt;br /&gt;(04) esp : main 的頂端；ebp : func_A 的底端&lt;br /&gt;(05) esp : main 的頂端；ebp : main 的底端&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SyD726OvHQI/AAAAAAAAEcQ/c-FLWfMITvE/s1600-h/memory_03.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 186px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SyD726OvHQI/AAAAAAAAEcQ/c-FLWfMITvE/s400/memory_03.JPG" alt="" id="BLOGGER_PHOTO_ID_5413603672861908226" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;參考資料：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;0day安全：軟件漏洞分析技術&lt;br /&gt;作者：王清&lt;br /&gt;ISBN：978-7-121-06077-9&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-3427817046530046805?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/3427817046530046805/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/reverse-engineering_10.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3427817046530046805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/3427817046530046805'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/reverse-engineering_10.html' title='【筆記】Reverse Engineering–記憶體配置'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oF_vbQi9p8w/SyD4FaRwFCI/AAAAAAAAEb4/eHk3uBTTZPY/s72-c/main.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-7309013737354172245</id><published>2009-12-08T07:58:00.000-08:00</published><updated>2009-12-11T08:39:05.433-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='逆向工程'/><title type='text'>【筆記】Reverse Engineering</title><content type='html'>Reverse Engineering（反向工程）：拆解封閉原始碼之二進位應用程式的方法&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;目的：&lt;/span&gt; &lt;ul&gt;&lt;li&gt;　安全審查&lt;/li&gt;&lt;li&gt;　移除版權保護&lt;/li&gt;&lt;li&gt;　定製嵌入式系統&lt;/li&gt;&lt;li&gt;　內部修補或更新&lt;/li&gt;&lt;li&gt;　滿足好奇心&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;常用方法&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;觀察信息交換進行分析&lt;/span&gt;：常用於法協議做逆向工程，它使用匯流排分析器和數據包嗅探器，通過分析匯流排或網路的活動，做出一個獨立的實現用以模擬那些活動。這個方法對於設備驅動的逆向工程特別有用。&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;使用反彙編器進行反彙編&lt;/span&gt;：藉助機器碼助記符讀取和理解已經被編譯成原始機器碼的程序。這個方法對任何計算機程序都有效，但是相當耗時，特別是對於不熟悉機器碼的人。&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;使用反編譯器進行反編譯&lt;/span&gt;：對只有機器碼或位元組碼形式的程序，重建高級語言形式的原始碼。這種方法得到的原始碼結果不是唯一的。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;常用工具&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;系統監視：Regmon、 Filemon&lt;/li&gt;&lt;li&gt;拆封器：Portable Executable、ProcDump&lt;/li&gt;&lt;li&gt;除錯器：SoftICE&lt;/li&gt;&lt;li&gt;反組譯器：IDA Pro&lt;/li&gt;&lt;li&gt;十六進制編輯：Ultra Edit&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/Sx55HAqf3qI/AAAAAAAAEaQ/SZ6_GmhPajM/s1600-h/1.JPG"&gt;&lt;img style="cursor: pointer; width: 560px; height: 116px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/Sx55HAqf3qI/AAAAAAAAEaQ/SZ6_GmhPajM/s400/1.JPG" alt="" id="BLOGGER_PHOTO_ID_5412896963490209442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;一個很簡單的範例：&lt;br /&gt;　執行這個程式之後會詢問密碼，輸入錯誤會繼續問&lt;br /&gt;　現在要利用這些工具通過“密碼”&lt;br /&gt;&lt;br /&gt;(1) 用 IDA Pro 去看執行檔，檔案會被轉成這個樣子 ~~&lt;br /&gt;（只貼主程式的部份）&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;.text:00401070 main            proc near               ; CODE XREF: _mainj&lt;br /&gt;.text:00401070&lt;br /&gt;.text:00401070 var_444         = dword ptr -444h&lt;br /&gt;.text:00401070 var_404         = dword ptr -404h&lt;br /&gt;.text:00401070 var_4           = dword ptr -4&lt;br /&gt;.text:00401070&lt;br /&gt;.text:00401070                 push    ebp&lt;br /&gt;.text:00401071                 mov     ebp, esp&lt;br /&gt;.text:00401073                 sub     esp, 444h&lt;br /&gt;.text:00401079                 push    ebx&lt;br /&gt;.text:0040107A                 push    esi&lt;br /&gt;.text:0040107B                 push    edi&lt;br /&gt;.text:0040107C                 lea     edi, [ebp+var_444]&lt;br /&gt;.text:00401082                 mov     ecx, 111h&lt;br /&gt;.text:00401087                 mov     eax, 0CCCCCCCCh&lt;br /&gt;.text:0040108C                 rep stosd&lt;br /&gt;.text:0040108E                 mov     [ebp+var_4], 0&lt;br /&gt;.text:00401095&lt;br /&gt;.text:00401095 loc_401095:                             ; CODE XREF: main:loc_4010F5j&lt;br /&gt;.text:00401095                 mov     eax, 1&lt;br /&gt;.text:0040109A                 test    eax, eax&lt;br /&gt;.text:0040109C                 jz      short loc_4010F7&lt;br /&gt;.text:0040109E                 push    offset aPleaseInputPas ; "please input password:"&lt;br /&gt;.text:004010A3                 call    printf&lt;br /&gt;.text:004010A8                 add     esp, 4&lt;br /&gt;.text:004010AB                 lea     ecx, [ebp+var_404]&lt;br /&gt;.text:004010B1                 push    ecx&lt;br /&gt;.text:004010B2                 push    offset aS       ; "%"&lt;br /&gt;.text:004010B7                 call    scanf&lt;br /&gt;.text:004010BC                 add     esp, 8&lt;br /&gt;.text:004010BF                 lea     edx, [ebp+var_404]&lt;br /&gt;.text:004010C5                 push    edx&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.text:004010C6                 call    j_verify_password&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.text:004010CB                 add     esp, 4&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.text:004010CE                 mov     [ebp+var_4], eax&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.text:004010D1                 cmp     [ebp+var_4], 0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.text:004010D5                 jz      short loc_4010E6&lt;/span&gt;&lt;br /&gt;.text:004010D7                 push    offset aIncorrect ; "Incorrect!!\n"&lt;br /&gt;.text:004010DC                 call    printf&lt;br /&gt;.text:004010E1                 add     esp, 4&lt;br /&gt;.text:004010E4                 jmp     short loc_4010F5&lt;br /&gt;.text:004010E6 ; 闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡?&lt;br /&gt;.text:004010E6&lt;br /&gt;.text:004010E6 loc_4010E6:                             ; CODE XREF: main+65j&lt;br /&gt;.text:004010E6                 push    offset aPass    ; "Pass!!\n"&lt;br /&gt;.text:004010EB                 call    printf&lt;br /&gt;.text:004010F0                 add     esp, 4&lt;br /&gt;.text:004010F3                 jmp     short loc_4010F7&lt;br /&gt;.text:004010F5 ; 闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡?&lt;br /&gt;.text:004010F5&lt;br /&gt;.text:004010F5 loc_4010F5:                             ; CODE XREF: main+74j&lt;br /&gt;.text:004010F5                 jmp     short loc_401095&lt;br /&gt;.text:004010F7 ; 闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡闡?&lt;br /&gt;.text:004010F7&lt;br /&gt;.text:004010F7 loc_4010F7:                             ; CODE XREF: main+2Cj&lt;br /&gt;.text:004010F7                                         ; main+83j&lt;br /&gt;.text:004010F7                 xor     eax, eax&lt;br /&gt;.text:004010F9                 pop     edi&lt;br /&gt;.text:004010FA                 pop     esi&lt;br /&gt;.text:004010FB                 pop     ebx&lt;br /&gt;.text:004010FC                 add     esp, 444h&lt;br /&gt;.text:00401102                 cmp     ebp, esp&lt;br /&gt;.text:00401104                 call    __chkesp&lt;br /&gt;.text:00401109                 mov     esp, ebp&lt;br /&gt;.text:0040110B                 pop     ebp&lt;br /&gt;.text:0040110C                 retn&lt;br /&gt;.text:0040110C main            endp&lt;br /&gt;&lt;/pre&gt;Trace Code之後發現這幾行是關鍵：&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span&gt;.text:004010C6                 call    j_verify_password&lt;/span&gt;&lt;br /&gt;&lt;span&gt;.text:004010CB                 add     esp, 4&lt;/span&gt;&lt;br /&gt;&lt;span&gt;.text:004010CE                 mov     [ebp+var_4], eax&lt;/span&gt;&lt;br /&gt;&lt;span&gt;.text:004010D1                 cmp     [ebp+var_4], 0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;.text:004010D5                 jz      short loc_4010E6&lt;/span&gt;&lt;/pre&gt;0x004010C6 會去呼叫 verify_password&lt;br /&gt;0x004010D5 比對傳回值，如果回傳值為 0 則跳到執行 0x004010E6&lt;br /&gt;&lt;br /&gt;所以跳過密碼檢驗的方法：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;繼續觀察j_verify_password 找出正確的密碼&lt;/li&gt;&lt;li&gt;把jz 改成 jmp 跳過比對&lt;/li&gt;&lt;/ol&gt;試用 2 的做法：&lt;br /&gt;&lt;br /&gt;使用 Portable Executable 去讀取執行檔，找到 0x004010D5 在檔案中的實際位置&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/Sx59Abie6lI/AAAAAAAAEag/IpdBQEaOyh4/s1600-h/3.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 177px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/Sx59Abie6lI/AAAAAAAAEag/IpdBQEaOyh4/s400/3.JPG" alt="" id="BLOGGER_PHOTO_ID_5412901248491776594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/Sx59Ake_4HI/AAAAAAAAEao/2JEO8OPyjWI/s1600-h/4.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 124px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/Sx59Ake_4HI/AAAAAAAAEao/2JEO8OPyjWI/s400/4.JPG" alt="" id="BLOGGER_PHOTO_ID_5412901250893078642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;br /&gt;.text:004010D5&lt;/span&gt;    jz      short loc_4010E6&lt;/span&gt;&lt;br /&gt;依照 Portable Executable 拆解出來的值&lt;br /&gt;代入公式：&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 153); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;span style="font-weight: bold;"&gt;文件偏移位址 = 虛擬位址 – (映像基址 – 節偏移位址）&lt;/span&gt;&lt;/pre&gt;0x004010D5 - 0x00400000 – (0x00001000 - 0x00001000) = &lt;span style="font-weight: bold;"&gt;0x000010D5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;所以要找的 jz 就在檔案中的 0x000010D5的位置&lt;br /&gt;&lt;br /&gt;使用PSPad去編輯16進制的內容：&lt;br /&gt;&lt;br /&gt;原來代表 jz 的 &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;74&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/Sx5_Aeb97vI/AAAAAAAAEaw/tN6q4e1WPoo/s1600-h/5.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 100px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/Sx5_Aeb97vI/AAAAAAAAEaw/tN6q4e1WPoo/s400/5.JPG" alt="" id="BLOGGER_PHOTO_ID_5412903448293011186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;改成代表 jmp的&lt;span style="color: rgb(255, 0, 0);"&gt;EB&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/Sx5_AvSlgzI/AAAAAAAAEa4/SfA6iV_KxPk/s1600-h/6.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 100px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/Sx5_AvSlgzI/AAAAAAAAEa4/SfA6iV_KxPk/s400/6.JPG" alt="" id="BLOGGER_PHOTO_ID_5412903452817064754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;看看效果：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/Sx5_acAY7fI/AAAAAAAAEbA/wktJ1UVhzN4/s1600-h/7.JPG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 145px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/Sx5_acAY7fI/AAAAAAAAEbA/wktJ1UVhzN4/s400/7.JPG" alt="" id="BLOGGER_PHOTO_ID_5412903894317067762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;原來輸入 123 得到 Incorrect!!&lt;br /&gt;修改後再輸入一樣的 123 結果變成 pass!! 了！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;參考資料：&lt;br /&gt;&lt;ol&gt;&lt;li&gt;防駭戰士/O'REILLY作者：Cyrus Peikari &amp;amp; Anton Chuvakin&lt;br /&gt;譯者：陳建勳&lt;br /&gt;ISBN：978-986-6840-04-3&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;0day安全：軟件漏洞分析技術&lt;br /&gt;作者：王清&lt;br /&gt;ISBN：978-7-121-06077-9&lt;/li&gt;&lt;br /&gt;&lt;li&gt;維基百科：反向工程&lt;br /&gt;&lt;a href="http://zh.wikipedia.org/zh-tw/%E5%8F%8D%E5%90%91%E5%B7%A5%E7%A8%8B"&gt;http://zh.wikipedia.org/zh-tw/反向工程&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;==================================&lt;br /&gt;因為想了解一些攻擊技巧，&lt;br /&gt;所以查詢了網路上推荐的書單看了防駭戰士這本書，&lt;br /&gt;這本書的第一部份前５章講的東西都跟反向工程有關&lt;br /&gt;&lt;ol&gt;&lt;li&gt;組合語言&lt;/li&gt;&lt;li&gt;Windows 的反向工程&lt;/li&gt;&lt;li&gt;Linux的反向工程&lt;/li&gt;&lt;li&gt;Windows CE 的反向工程&lt;/li&gt;&lt;li&gt;溢位攻擊&lt;/li&gt;&lt;/ol&gt;不過好像都沒有很深入的探討反向工程&lt;br /&gt;似乎是好玩的東西~~&lt;br /&gt;&lt;br /&gt;光是那個 IDA Pro 這個工具就很好玩了&lt;br /&gt;除了解析出上面的程式碼，&lt;br /&gt;還可以繪出整個程式的流程分岐（&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;更容易找到切入的點&lt;/span&gt;）&lt;br /&gt;&lt;br /&gt;然後這個一樣的程式，&lt;br /&gt;嘗試過用 Gcc &amp;amp; VC 去 Compiler&lt;br /&gt;結果以 IDA Pro 解析出來的內容完全不同&lt;br /&gt;（VC比較好讀，可以看到 main，比較容易找到入口）&lt;br /&gt;&lt;br /&gt;最後，發現看這個時間好攽可以過得很快 &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/Sx6Go2-a_MI/AAAAAAAAEbQ/kIYugIIBtxw/s1600-h/1775465359.jpg.gif"&gt;&lt;img style="cursor: pointer; width: 50px; height: 50px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/Sx6Go2-a_MI/AAAAAAAAEbQ/kIYugIIBtxw/s400/1775465359.jpg.gif" alt="" id="BLOGGER_PHOTO_ID_5412911838656134338" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;所以有沒有專門教反向工程的書啊？&lt;br /&gt;&lt;br /&gt;推荐一下吧&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/Sx6FddZl8SI/AAAAAAAAEbI/EhUXdL64NX0/s1600-h/1167138989.gif"&gt;&lt;img style="cursor: pointer; width: 50px; height: 50px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/Sx6FddZl8SI/AAAAAAAAEbI/EhUXdL64NX0/s400/1167138989.gif" alt="" id="BLOGGER_PHOTO_ID_5412910543300587810" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-7309013737354172245?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/7309013737354172245/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/reverse-engineering.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7309013737354172245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7309013737354172245'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/reverse-engineering.html' title='【筆記】Reverse Engineering'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oF_vbQi9p8w/Sx55HAqf3qI/AAAAAAAAEaQ/SZ6_GmhPajM/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-4954289203163263801</id><published>2009-12-03T17:41:00.000-08:00</published><updated>2009-12-17T07:42:07.181-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='資訊安全'/><title type='text'>【筆記】OWASP Top 10 –2010</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/Sxho4I_cDrI/AAAAAAAAEZo/KpIc0rLFfiY/s1600-h/OWASP_10.JPG"&gt;&lt;img style="cursor: pointer; width: 407px; height: 218px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/Sxho4I_cDrI/AAAAAAAAEZo/KpIc0rLFfiY/s400/OWASP_10.JPG" alt="" id="BLOGGER_PHOTO_ID_5411190265981177522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;OWASP Top 10 （2010）跟 2007 的差異&lt;br /&gt;&lt;br /&gt;2007 的&lt;br /&gt;A3 Malicious File Execution&lt;br /&gt;A6 Information Leakage and Improper Error Handling&lt;br /&gt;被剔除了&lt;br /&gt;&lt;br /&gt;2010 新增了&lt;br /&gt;A6 – Security Misconfiguration&lt;br /&gt;任何相關的設定必須依照當下的網路情況設置&lt;br /&gt;必須避免直接使用&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;“預設值”&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;&lt;br /&gt;＊ 曾經在 OWASP TOP 10 2004 的 A10 出現過&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A8 – UnvalidatedRedirects and Forwards&lt;br /&gt;沒經過驗證、不安全的自動轉址&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;全文：&lt;a href="http://www.owasp.org/images/0/0f/OWASP_T10_-_2010_rc1.pdf"&gt;http://www.owasp.org/images/0/0f/OWASP_T10_-_2010_rc1.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-4954289203163263801?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/4954289203163263801/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/owasp-top-10-2010.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4954289203163263801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/4954289203163263801'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/12/owasp-top-10-2010.html' title='【筆記】OWASP Top 10 –2010'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/Sxho4I_cDrI/AAAAAAAAEZo/KpIc0rLFfiY/s72-c/OWASP_10.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-5410790603255514946</id><published>2009-11-29T21:33:00.000-08:00</published><updated>2009-12-11T08:39:05.442-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工作筆記'/><title type='text'>【筆記】JSValidation驗證欄位內容</title><content type='html'>&lt;span style="font-weight: bold; font-style: italic;"&gt;JSValidation&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;這是一個驗證欄位內容正不正確的 Java Script 套件，&lt;br /&gt;網頁中內容常常會出現一些需要檢查的欄位，&lt;br /&gt;每次都要寫一段 Java Script來檢查很麻煩，&lt;br /&gt;JSValication 就是在幫忙做這個動作的工具。&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;JSValidation &lt;/span&gt;位址： &lt;a href="http://cosoft.org.cn/project/showfiles.php?group_id=5223&amp;amp;release_id=5504"&gt;下載&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;下載後解壓縮可以看到這堆檔案：&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/SxNajsuyMdI/AAAAAAAAEZg/KqTvLJXN5cE/s1600/0.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 203px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/SxNajsuyMdI/AAAAAAAAEZg/KqTvLJXN5cE/s400/0.bmp" alt="" id="BLOGGER_PHOTO_ID_5409767146751406546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;只有用到這3個：&lt;br /&gt;&lt;br /&gt;validation-framework.js&lt;br /&gt;validation-config.xml&lt;br /&gt;validation-config.dtd&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;使用方法：&lt;br /&gt;(1) 把這3個檔案放進要放的目錄位置&lt;br /&gt;(2) 修改 xml 檔，內容對映到 html 中相對映的欄位名檔及檢查方式&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SxNajUopD6I/AAAAAAAAEZY/-cnJY_1nB1I/s1600/1.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 217px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SxNajUopD6I/AAAAAAAAEZY/-cnJY_1nB1I/s400/1.bmp" alt="" id="BLOGGER_PHOTO_ID_5409767140283191202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(3) html 檔案中，把 java script 檔案 include 進來..&lt;br /&gt;(4) html 中欄位名稱和 xml 中的欄位名稱 要互相對應&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SxNajJPv5xI/AAAAAAAAEZQ/cedV9JI3IkE/s1600/2.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 205px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SxNajJPv5xI/AAAAAAAAEZQ/cedV9JI3IkE/s400/2.bmp" alt="" id="BLOGGER_PHOTO_ID_5409767137225991954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(5) 全部設定好之後，表單在送的過程就會以 JSValication 做檢查各項欄位了&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-5410790603255514946?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/5410790603255514946/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/jsvalidation.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5410790603255514946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5410790603255514946'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/jsvalidation.html' title='【筆記】JSValidation驗證欄位內容'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oF_vbQi9p8w/SxNajsuyMdI/AAAAAAAAEZg/KqTvLJXN5cE/s72-c/0.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-6615288290894507184</id><published>2009-11-24T00:54:00.000-08:00</published><updated>2009-12-11T08:39:05.455-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>【筆記】Java 使用 jsbc和 MySQL連繫</title><content type='html'>先去 MySQL 的網站抓 &lt;em&gt;mysql java&lt;/em&gt; jdbc drvier&lt;br /&gt;在這裡抓：&lt;a href="http://dev.mysql.com/downloads/connector/j/5.1.html"&gt;http://dev.mysql.com/downloads/connector/j/5.1.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;一、把 &lt;em&gt;mysql java&lt;/em&gt; jdbc drvier  加進來用&lt;br /&gt;在開發的 Project 中按右鍵，選 “&lt;em&gt;Properties&lt;/em&gt;”&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwufdcnY9CI/AAAAAAAAEY4/qkizHxB6dSE/s1600/JDBC_01.bmp"&gt;&lt;img style="cursor: pointer; width: 203px; height: 400px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwufdcnY9CI/AAAAAAAAEY4/qkizHxB6dSE/s400/JDBC_01.bmp" alt="" id="BLOGGER_PHOTO_ID_5407591105834841122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;二、在 &lt;span style="font-style: italic;"&gt;Java Builder Path&lt;/span&gt; 中的 Libaries 加入 下載的 mysql 檔案&lt;br /&gt;選擇 &lt;span style="font-style: italic;"&gt;Add External JARs&lt;/span&gt; 把檔案加入&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwufdD7AKSI/AAAAAAAAEYw/RC072LEUrBQ/s1600/JDBC_02.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 304px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwufdD7AKSI/AAAAAAAAEYw/RC072LEUrBQ/s400/JDBC_02.bmp" alt="" id="BLOGGER_PHOTO_ID_5407591099206215970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;三、加入了...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/Swufc9BgUCI/AAAAAAAAEYo/QN4ezX62DrA/s1600/JDBC_03.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 304px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/Swufc9BgUCI/AAAAAAAAEYo/QN4ezX62DrA/s400/JDBC_03.bmp" alt="" id="BLOGGER_PHOTO_ID_5407591097354440738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;可以開始試試看了...&lt;br /&gt;一、新增 Class 檔，試試效果..&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwufcUb71yI/AAAAAAAAEYg/VgKULrwUgQQ/s1600/JDBC_04.bmp"&gt;&lt;img style="cursor: pointer; width: 358px; height: 400px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwufcUb71yI/AAAAAAAAEYg/VgKULrwUgQQ/s400/JDBC_04.bmp" alt="" id="BLOGGER_PHOTO_ID_5407591086459442978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;二、這是我的測試程式：&lt;br /&gt;&lt;br /&gt;參考資料：&lt;a href="http://catyku.pixnet.net/blog/post/22240368"&gt;http://catyku.pixnet.net/blog/post/22240368&lt;/a&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;/*&lt;br /&gt;* 參考資料：http://catyku.pixnet.net/blog/post/22240368&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;package db;&lt;br /&gt;&lt;br /&gt;import java.sql.Connection;&lt;br /&gt;import java.sql.DriverManager;&lt;br /&gt;import java.sql.ResultSet;&lt;br /&gt;import java.sql.SQLException;&lt;br /&gt;import java.sql.Statement;&lt;br /&gt;&lt;br /&gt;public class jdbcmysql {&lt;br /&gt;//連接&lt;br /&gt;private Connection conn = null; //Database objects&lt;br /&gt;//執行,傳入之sql為完整字串&lt;br /&gt;private Statement stat = null;&lt;br /&gt;//結果&lt;br /&gt;private ResultSet rs = null;&lt;br /&gt;&lt;br /&gt;//JDBC連接 MySQL&lt;br /&gt;public jdbcmysql(){&lt;br /&gt;try{&lt;br /&gt;//註冊 Driver&lt;br /&gt;   Class.forName("com.mysql.jdbc.Driver");&lt;br /&gt;&lt;br /&gt;   conn = DriverManager.getConnection(&lt;br /&gt;   "jdbc:mysql://127.0.0.1/test",&lt;br /&gt;   "root","star");&lt;br /&gt;}&lt;br /&gt;catch(ClassNotFoundException e){&lt;br /&gt;//Driver 執行錯誤&lt;br /&gt;System.out.println("DriverClassNotFound :"+e.toString());&lt;br /&gt;  }&lt;br /&gt;  catch(SQLException x) {&lt;br /&gt;   //SQL執行錯誤&lt;br /&gt;   System.out.println("Exception :"+x.toString());&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//顯示目前存在的資料庫&lt;br /&gt;public void showDB(){&lt;br /&gt;try{&lt;br /&gt;stat = conn.createStatement();&lt;br /&gt;rs = stat.executeQuery("show databases");&lt;br /&gt;//show result&lt;br /&gt;while(rs.next()){&lt;br /&gt; System.out.println(rs.getString("Database"));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;catch(SQLException e){&lt;br /&gt;System.out.println("show database Error!!");&lt;br /&gt;}&lt;br /&gt;finally{&lt;br /&gt;//Command Finish&lt;br /&gt;if(rs!=null){&lt;br /&gt; try{&lt;br /&gt;  rs.close();  &lt;br /&gt; }&lt;br /&gt;    catch(SQLException x) {&lt;br /&gt;     //SQL執行錯誤&lt;br /&gt;     System.out.println("Exception :"+x.toString());&lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;if(stat!=null){&lt;br /&gt; try{&lt;br /&gt;  stat.close();  &lt;br /&gt; }&lt;br /&gt;    catch(SQLException x) {&lt;br /&gt;     //SQL執行錯誤&lt;br /&gt;     System.out.println("Exception :"+x.toString());&lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void jdbcClose(){&lt;br /&gt;//關閉連結&lt;br /&gt;if(conn!=null){&lt;br /&gt;try{&lt;br /&gt; conn.close();  &lt;br /&gt;}&lt;br /&gt;   catch(SQLException x) {&lt;br /&gt;    //SQL執行錯誤&lt;br /&gt;    System.out.println("Exception :"+x.toString());&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* @param args&lt;br /&gt;*/&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;//測看看&lt;br /&gt;jdbcmysql test = new jdbcmysql();&lt;br /&gt;test.showDB();&lt;br /&gt;test.jdbcClose();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;三、執行結果&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwufcBrfOCI/AAAAAAAAEYY/udcoNWO-NZE/s1600/JDBC_05.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 91px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwufcBrfOCI/AAAAAAAAEYY/udcoNWO-NZE/s400/JDBC_05.bmp" alt="" id="BLOGGER_PHOTO_ID_5407591081424402466" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-6615288290894507184?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/6615288290894507184/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/java-jsbc-mysql.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6615288290894507184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/6615288290894507184'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/java-jsbc-mysql.html' title='【筆記】Java 使用 jsbc和 MySQL連繫'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/SwufdcnY9CI/AAAAAAAAEY4/qkizHxB6dSE/s72-c/JDBC_01.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-2138604260817721318</id><published>2009-11-22T22:29:00.000-08:00</published><updated>2009-12-11T08:39:05.460-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>【筆記】Java JSP</title><content type='html'>一直用 Servlet 在那裡 println(" ooxx ");&lt;br /&gt;的編輯 HTML&lt;br /&gt;應該寫到快瘋了  ~~&lt;br /&gt;↑書上說的&lt;br /&gt;&lt;br /&gt;呃~~&lt;br /&gt;其實還好啦&lt;br /&gt;因為 MyEclipse 都會開好現成的套件來改&lt;br /&gt;&lt;br /&gt;不過還是要介紹 JSP啦... ^^y&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/Swor5JB1FeI/AAAAAAAAEYQ/jtoJ4whK6Vk/s1600/JSP_01.bmp"&gt;&lt;img style="cursor: pointer; width: 377px; height: 400px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/Swor5JB1FeI/AAAAAAAAEYQ/jtoJ4whK6Vk/s400/JSP_01.bmp" alt="" id="BLOGGER_PHOTO_ID_5407182563287832034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;一樣直接開 JSP 檔..&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/Swor4sn-qhI/AAAAAAAAEYI/wMuNvggie8g/s1600/JSP_02.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 380px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/Swor4sn-qhI/AAAAAAAAEYI/wMuNvggie8g/s400/JSP_02.bmp" alt="" id="BLOGGER_PHOTO_ID_5407182555663215122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;都說 JSP 了，副檔名當然就存成 JSP了&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/Swor4WlcPPI/AAAAAAAAEYA/pSrCPHN8h9s/s1600/JSP_03.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 263px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/Swor4WlcPPI/AAAAAAAAEYA/pSrCPHN8h9s/s400/JSP_03.bmp" alt="" id="BLOGGER_PHOTO_ID_5407182549746990322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;開出來的東西像是夾雜 HTML &amp;amp; Java 的東西...&lt;br /&gt;就是這種東西..&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(204, 204, 204); background: rgb(240, 240, 240) none repeat scroll 0% 0%; overflow: auto; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;br /&gt;程式之間用 &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;&lt;% Java程式 %&gt;&lt;/span&gt; 表示&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;看到這種混雜的方式又開始頭痛了...&lt;br /&gt;每次看到這這樣混用的內容就覺得很煩，&lt;br /&gt;＊格式怎麼跟 php 那麼像 一一a&lt;br /&gt;&lt;br /&gt;對程式裡要直接呈現  HTML的內容的確是方便許多 ...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/Swor4M2vgAI/AAAAAAAAEX4/R6GrqSfCEBk/s1600/JSP_04.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 272px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/Swor4M2vgAI/AAAAAAAAEX4/R6GrqSfCEBk/s400/JSP_04.bmp" alt="" id="BLOGGER_PHOTO_ID_5407182547135201282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;回去 Tomcat 看一下...&lt;br /&gt;執行過的程式在 Server 會產生 &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;ooxx_.jsp &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;和&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt; ooxx_jsp.class&lt;/span&gt;&lt;br /&gt;兩個檔案，下次再執行 java 的時候，就可以直接用&lt;br /&gt;速度會比第一次執行快 ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-2138604260817721318?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/2138604260817721318/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/java-jsp.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2138604260817721318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2138604260817721318'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/java-jsp.html' title='【筆記】Java JSP'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_oF_vbQi9p8w/Swor5JB1FeI/AAAAAAAAEYQ/jtoJ4whK6Vk/s72-c/JSP_01.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-2525523341179894841</id><published>2009-11-16T23:30:00.000-08:00</published><updated>2009-12-11T08:39:05.472-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>【筆記】Java Servlet–Use MyEclipse</title><content type='html'>跟前一篇一樣要試 Java Servlet&lt;br /&gt;可是這一篇直接用 MyEcplise 這個工具來開發。&lt;br /&gt;&lt;br /&gt;一、新增一個 Web Project&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJRwZEeRxI/AAAAAAAAEVo/iO7lNbF4ZJI/s1600/01.bmp"&gt;&lt;img style="cursor: pointer; width: 320px; height: 400px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJRwZEeRxI/AAAAAAAAEVo/iO7lNbF4ZJI/s400/01.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972394603235090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;二、Project Name&lt;br /&gt;這裡直接用 ROOT 是因為預設路徑的問題&lt;br /&gt;Tomcat 的首頁預設路徑在：&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;C:\Tomcat6\webapps\ROOT&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJRsvQpW3I/AAAAAAAAEVg/kzvWfmGtNCU/s1600/02.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 397px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJRsvQpW3I/AAAAAAAAEVg/kzvWfmGtNCU/s400/02.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972331840396146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;三、建好架構之後&lt;br /&gt;新增 Servlet&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwJRsX7NXrI/AAAAAAAAEVY/4KRMYSHta3I/s1600/03.bmp"&gt;&lt;img style="cursor: pointer; width: 313px; height: 400px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwJRsX7NXrI/AAAAAAAAEVY/4KRMYSHta3I/s400/03.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972325576466098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;四、設定檔名 FirstServlet&lt;br /&gt;自動產生 doGet(), doPost() → 這兩個內容是開發過程最常被改到的東西...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwJRsHFtU6I/AAAAAAAAEVQ/f96M2PnCYcs/s1600/04.bmp"&gt;&lt;img style="cursor: pointer; width: 353px; height: 400px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwJRsHFtU6I/AAAAAAAAEVQ/f96M2PnCYcs/s400/04.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972321057100706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;五、MyEclipse 連 web.xml 的內容都填好了....&lt;br /&gt;看一下，不符合需求可以改一下....&lt;br /&gt;URL 那一欄會關係到上線後的 “路徑” 設個自己喜歡的 ^^b&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwJRrz2_kUI/AAAAAAAAEVI/grV_uVjYW9Q/s1600/05.bmp"&gt;&lt;img style="cursor: pointer; width: 355px; height: 400px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwJRrz2_kUI/AAAAAAAAEVI/grV_uVjYW9Q/s400/05.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972315895107906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;六、整個建好了...&lt;br /&gt;把這個目錄指定給 Tomcat6.x&lt;br /&gt;把要執行的程式都放進來&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJRrhJt7cI/AAAAAAAAEVA/HgsWemJ7jMM/s1600/06.bmp"&gt;&lt;img style="cursor: pointer; width: 355px; height: 400px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJRrhJt7cI/AAAAAAAAEVA/HgsWemJ7jMM/s400/06.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972310873370050" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;七、這是最後步驟了&lt;br /&gt;Tomcat 6.x → Start 把 Server 打開...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJReR5miTI/AAAAAAAAEU4/w2on4LmvhMw/s1600/07.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 272px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJReR5miTI/AAAAAAAAEU4/w2on4LmvhMw/s400/07.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972083440945458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;八、看看結果：&lt;br /&gt;MyEclipse 有提到Browser的功能，可以直接在這裡看 ...&lt;br /&gt;用 MyEclipse 製作的第一個 Servlet 成功了！&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwJReC8dcII/AAAAAAAAEUw/ffAdFCU03rs/s1600/08.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 171px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwJReC8dcII/AAAAAAAAEUw/ffAdFCU03rs/s400/08.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972079426400386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;九、看一下 .java&lt;br /&gt;這是 新增 Servlet （四）自動產生的 java 檔....&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJRd_qkxsI/AAAAAAAAEUo/o6t774X-z8M/s1600/java.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 247px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJRd_qkxsI/AAAAAAAAEUo/o6t774X-z8M/s400/java.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972078546077378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;十、這是新增過程自動產生的 web.xml檔&lt;br /&gt;屬性&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwJRdiOEFvI/AAAAAAAAEUg/nS9N_ojg9ug/s1600/xml_01.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 234px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwJRdiOEFvI/AAAAAAAAEUg/nS9N_ojg9ug/s400/xml_01.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972070641866482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;十一、這是新增過程自動產生的 web.xml檔&lt;br /&gt;這個是原始檔...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwJRdOmAZ2I/AAAAAAAAEUY/SYnfYY_tR9k/s1600/xml_02.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 242px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwJRdOmAZ2I/AAAAAAAAEUY/SYnfYY_tR9k/s400/xml_02.bmp" alt="" id="BLOGGER_PHOTO_ID_5404972065373579106" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;省去了很多編輯的過程，也不用搬來搬去...&lt;br /&gt;甚至不用再開 Browser 看結果...&lt;br /&gt;把路徑、執行程式設定對了...&lt;br /&gt;開啟 Tomcat6 就可以直接在 MyEclipse 看到 java Servlet 的結果...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-2525523341179894841?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/2525523341179894841/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/java-servletuse-myeclipse.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2525523341179894841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2525523341179894841'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/java-servletuse-myeclipse.html' title='【筆記】Java Servlet–Use MyEclipse'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oF_vbQi9p8w/SwJRwZEeRxI/AAAAAAAAEVo/iO7lNbF4ZJI/s72-c/01.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-8826369633886332005</id><published>2009-11-16T18:52:00.000-08:00</published><updated>2009-12-11T08:39:05.489-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>【筆記】Java Servlet</title><content type='html'>Servlet 是 Java用來編寫 Server端程式的技術&lt;br /&gt;試一下怎麼用 ^^&lt;br /&gt;&lt;br /&gt;一、先寫一個 Java檔..&lt;br /&gt;把原來 HttpServletResponse的內容 extends 出來重寫 doGet的內容...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwIQaWfS8GI/AAAAAAAAEUQ/SHC9DYXKTyk/s1600/Servlet_01.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 173px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwIQaWfS8GI/AAAAAAAAEUQ/SHC9DYXKTyk/s400/Servlet_01.bmp" alt="" id="BLOGGER_PHOTO_ID_5404900547697504354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;二、這應該之前裝的時候就設好了，再檢查一下...&lt;br /&gt;設定 Java 的路徑..&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwIQaEUgGjI/AAAAAAAAEUI/H_qISXQsR24/s1600/Servlet_02.bmp"&gt;&lt;img style="cursor: pointer; width: 367px; height: 400px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwIQaEUgGjI/AAAAAAAAEUI/H_qISXQsR24/s400/Servlet_02.bmp" alt="" id="BLOGGER_PHOTO_ID_5404900542820391474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;三、這應該之前裝的時候就設好了，把路徑指好~~&lt;br /&gt;這樣可以直接在命令列下執行 javac 這種 compiler的指令&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwIQZ0tsbYI/AAAAAAAAEUA/I7oFBkNRuBo/s1600/Servlet_03.bmp"&gt;&lt;img style="cursor: pointer; width: 367px; height: 400px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwIQZ0tsbYI/AAAAAAAAEUA/I7oFBkNRuBo/s400/Servlet_03.bmp" alt="" id="BLOGGER_PHOTO_ID_5404900538631089538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;四、把Tomcat6\lib中的 servlet-api.jar copy 到 java 讓 java能找的到&lt;br /&gt;＊不想這樣做，在 compiler的時候直接指定 servlet-api.jar 的位置給 javac用就可以了&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwIQZhm1fCI/AAAAAAAAET4/NU6OExv_kcU/s1600/Servlet_04.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 270px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwIQZhm1fCI/AAAAAAAAET4/NU6OExv_kcU/s400/Servlet_04.bmp" alt="" id="BLOGGER_PHOTO_ID_5404900533502049314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;五、終於可以compiler了&lt;br /&gt;c:\Tomcat6\wepapps\ROOT\WEB-INF&gt; &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;javac HelloServlet.java&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwIQOOA-7UI/AAAAAAAAETw/j6zAiTu4Y3U/s1600/Servlet_05.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 325px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwIQOOA-7UI/AAAAAAAAETw/j6zAiTu4Y3U/s400/Servlet_05.bmp" alt="" id="BLOGGER_PHOTO_ID_5404900339264449858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;六、編輯 web.xml&lt;br /&gt;這個檔案是為了讓 web 可以找到剛才的 HelloServlet&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;&lt;url-pattern&gt; /HelloServlet &lt;/url-pattern&gt;&lt;/span&gt;&lt;br /&gt;這個程式在  http://xxx.xxx.xxx.xxx&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;/HelloServlet&lt;/span&gt; 時被執行&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwIQN1-tyvI/AAAAAAAAETo/tF9XE6Um-68/s1600/Servlet_06.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 182px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwIQN1-tyvI/AAAAAAAAETo/tF9XE6Um-68/s400/Servlet_06.bmp" alt="" id="BLOGGER_PHOTO_ID_5404900332812487410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;六、把程式丟進 WEB-INF 底下...&lt;br /&gt;我的主目錄在：C:\Tomcat6\webapps\ROOT&lt;br /&gt;程式放在 Web-INF底下...&lt;br /&gt;裡面包含&lt;br /&gt;web.xml --&gt; 前面編輯的 xml 檔&lt;br /&gt;classes目錄 --&gt; 放置 javac 製作出來的 &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;HelloServlet.class&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwIQNpnUrII/AAAAAAAAETg/uVwKM4Rcgfk/s1600/Servlet_07.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 144px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwIQNpnUrII/AAAAAAAAETg/uVwKM4Rcgfk/s400/Servlet_07.bmp" alt="" id="BLOGGER_PHOTO_ID_5404900329493146754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;七、開啟 Tomcat6&lt;br /&gt;startup 開啟； shutdown 關閉...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwIQNXIL58I/AAAAAAAAETY/q6rSWo0ebzM/s1600/Servlet_08.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 303px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwIQNXIL58I/AAAAAAAAETY/q6rSWo0ebzM/s400/Servlet_08.bmp" alt="" id="BLOGGER_PHOTO_ID_5404900324530710466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;八、開啟網頁看看成果&lt;br /&gt;http://127.0.0.1&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;/HelloServlet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwIQNAILhwI/AAAAAAAAETQ/8B5mRhUQgQI/s1600/Servlet_09.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 191px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwIQNAILhwI/AAAAAAAAETQ/8B5mRhUQgQI/s400/Servlet_09.bmp" alt="" id="BLOGGER_PHOTO_ID_5404900318356670210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;好像不管學什麼都要先 Hello 一下....&lt;br /&gt;設定成功；可以繼續玩了...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-8826369633886332005?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/8826369633886332005/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/java-servlet.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8826369633886332005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8826369633886332005'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/java-servlet.html' title='【筆記】Java Servlet'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_oF_vbQi9p8w/SwIQaWfS8GI/AAAAAAAAEUQ/SHC9DYXKTyk/s72-c/Servlet_01.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-8478172108891843593</id><published>2009-11-15T21:04:00.000-08:00</published><updated>2009-12-11T08:39:05.500-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>【筆記】MyEclipse 中配置Tomcat</title><content type='html'>一、Windows→Preferences&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwDd4td22nI/AAAAAAAAETI/7frZ1vySevk/s1600/Java_11.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 199px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SwDd4td22nI/AAAAAAAAETI/7frZ1vySevk/s400/Java_11.bmp" alt="" id="BLOGGER_PHOTO_ID_5404563519191833202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;二、左側下拉式選單&lt;br /&gt;選擇 Java → Installed JRE&lt;br /&gt;新增&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwDd4AReZ1I/AAAAAAAAETA/q5k8WVJFPss/s1600/Java_12.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 308px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwDd4AReZ1I/AAAAAAAAETA/q5k8WVJFPss/s400/Java_12.bmp" alt="" id="BLOGGER_PHOTO_ID_5404563507060303698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;三、新增選擇 Standard VM&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwDd38Mc0dI/AAAAAAAAES4/OcGdzvwUfEs/s1600/Java_13.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 363px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwDd38Mc0dI/AAAAAAAAES4/OcGdzvwUfEs/s400/Java_13.bmp" alt="" id="BLOGGER_PHOTO_ID_5404563505965486546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;四、選擇之前安裝 JDK的目錄&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwDdq3fDU8I/AAAAAAAAESw/477nlJUppHE/s1600/Java_14.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 366px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SwDdq3fDU8I/AAAAAAAAESw/477nlJUppHE/s400/Java_14.bmp" alt="" id="BLOGGER_PHOTO_ID_5404563281363030978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;五、裝好了...&lt;br /&gt;多了一個選項，勾選之後按OK&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwDdquv3biI/AAAAAAAAESo/usW35Ie_UC0/s1600/Java_15.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 308px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SwDdquv3biI/AAAAAAAAESo/usW35Ie_UC0/s400/Java_15.bmp" alt="" id="BLOGGER_PHOTO_ID_5404563279017635362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;六、現在設定Tomcat&lt;br /&gt;同一個地方 MyEclipse → Server → Tomcat6&lt;br /&gt;設定 Enable&lt;br /&gt;設好之前安裝 Tomcat6的目錄...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwDdqa-yS-I/AAAAAAAAESg/9Q36dSBHPBs/s1600/Java_21.bmp"&gt;&lt;img style="cursor: pointer; width: 397px; height: 400px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/SwDdqa-yS-I/AAAAAAAAESg/9Q36dSBHPBs/s400/Java_21.bmp" alt="" id="BLOGGER_PHOTO_ID_5404563273711504354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7.設定完成...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-8478172108891843593?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/8478172108891843593/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/myeclipse-tomcat.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8478172108891843593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/8478172108891843593'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/myeclipse-tomcat.html' title='【筆記】MyEclipse 中配置Tomcat'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/SwDd4td22nI/AAAAAAAAETI/7frZ1vySevk/s72-c/Java_11.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-5082400586970416299</id><published>2009-11-15T20:02:00.000-08:00</published><updated>2009-12-11T08:39:05.503-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>【筆記】MyEclipse 7.5 破解</title><content type='html'>&lt;strong&gt;下載MyEclipse–7.5.0&lt;/strong&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;網址：&lt;/span&gt;&lt;a href="http://downloads.myeclipseide.com/downloads/products/eworkbench/7.0/myeclipse-7.5.0-win32.exe"&gt;http://downloads.myeclipseide.com/downloads/products/eworkbench/7.0/myeclipse-7.5.0-win32.exe&lt;/a&gt; &lt;div&gt;&lt;br /&gt;&lt;/div&gt; &lt;div&gt;1. 新增 Java Project → MyEclipseGen&lt;br /&gt;2. 增加 Java Class → cn.yanl.myclipse.MyEclipseGen&lt;br /&gt;3. 輸入程式碼：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;=========================================&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;package cn.yanl.myeclipse;&lt;br /&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;&lt;br /&gt;public class MyEclipseGen {&lt;br /&gt;private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";&lt;br /&gt;public String getSerial(String userId, String licenseNum) {&lt;br /&gt; java.util.Calendar cal = java.util.Calendar.getInstance();&lt;br /&gt; cal.add(1, 3);&lt;br /&gt; cal.add(6, -1);&lt;br /&gt; java.text.NumberFormat nf = new java.text.DecimalFormat("000");&lt;br /&gt; licenseNum = nf.format(Integer.valueOf(licenseNum));&lt;br /&gt; String verTime = new StringBuilder("-").append(&lt;br /&gt;   new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime()))&lt;br /&gt;   .append("0").toString();&lt;br /&gt; String type = "YE3MP-";&lt;br /&gt; String need = new StringBuilder(userId.substring(0, 1)).append(type)&lt;br /&gt;   .append("300").append(licenseNum).append(verTime).toString();&lt;br /&gt; String dx = new StringBuilder(need).append(LL).append(userId)&lt;br /&gt;   .toString();&lt;br /&gt; int suf = this.decode(dx);&lt;br /&gt; String code = new StringBuilder(need).append(String.valueOf(suf))&lt;br /&gt;   .toString();&lt;br /&gt; return this.change(code);&lt;br /&gt;}&lt;br /&gt;private int decode(String s) {&lt;br /&gt; int i;&lt;br /&gt; char[] ac;&lt;br /&gt; int j;&lt;br /&gt; int k;&lt;br /&gt; i = 0;&lt;br /&gt; ac = s.toCharArray();&lt;br /&gt; j = 0;&lt;br /&gt; k = ac.length;&lt;br /&gt; while (j &amp;lt; k) {&lt;br /&gt;  i = (31 * i) + ac[j];&lt;br /&gt;  j++;&lt;br /&gt; }&lt;br /&gt; return Math.abs(i);&lt;br /&gt;}&lt;br /&gt;private String change(String s) {&lt;br /&gt; byte[] abyte0;&lt;br /&gt; char[] ac;&lt;br /&gt; int i;&lt;br /&gt; int k;&lt;br /&gt; int j;&lt;br /&gt; abyte0 = s.getBytes();&lt;br /&gt; ac = new char[s.length()];&lt;br /&gt; i = 0;&lt;br /&gt; k = abyte0.length;&lt;br /&gt; while (i &amp;lt; k) {&lt;br /&gt;  j = abyte0[i];&lt;br /&gt;  if ((j &amp;gt;= 48) &amp;amp;&amp;amp; (j &amp;lt;= 57)) {&lt;br /&gt;   j = (((j - 48) + 5) % 10) + 48;&lt;br /&gt;  } else if ((j &amp;gt;= 65) &amp;amp;&amp;amp; (j &amp;lt;= 90)) {&lt;br /&gt;   j = (((j - 65) + 13) % 26) + 65;&lt;br /&gt;  } else if ((j &amp;gt;= 97) &amp;amp;&amp;amp; (j &amp;lt;= 122)) {&lt;br /&gt;   j = (((j - 97) + 13) % 26) + 97;&lt;br /&gt;  }&lt;br /&gt;  ac[i] = (char) j;&lt;br /&gt;  i++;&lt;br /&gt; }&lt;br /&gt; return String.valueOf(ac);&lt;br /&gt;}&lt;br /&gt;public MyEclipseGen() {&lt;br /&gt; super();&lt;br /&gt;}&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt; try {&lt;br /&gt;  System.out.println("please input register name:");&lt;br /&gt;  BufferedReader reader = new BufferedReader(new InputStreamReader(&lt;br /&gt;    System.in));&lt;br /&gt;  String userId = null;&lt;br /&gt;  userId = reader.readLine();&lt;br /&gt;  MyEclipseGen myeclipsegen = new MyEclipseGen();&lt;br /&gt;  String res = myeclipsegen.getSerial(userId, "5");&lt;br /&gt;  System.out.println("Serial:" + res);&lt;br /&gt;  reader.readLine();&lt;br /&gt; } catch (IOException ex) {&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;=========================================&lt;/span&gt;&lt;br /&gt;4. 執行程式&lt;br /&gt;5. Console端會出現 please input register name：&lt;br /&gt;6. 輸入你要註冊的名稱，會自動產生 註冊號碼&lt;br /&gt;7. 進入 MyEclipse → Subscription Information 填入註冊資料&lt;br /&gt;8. 重新啟動&lt;br /&gt;9. 註冊完成（授權日期至 2012/00/xx）&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-5082400586970416299?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/5082400586970416299/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/myeclipse-75.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5082400586970416299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5082400586970416299'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/11/myeclipse-75.html' title='【筆記】MyEclipse 7.5 破解'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-5245157550287593832</id><published>2009-10-01T05:25:00.000-07:00</published><updated>2009-12-11T08:39:38.450-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='實用工具'/><title type='text'>【工具】Microsoft Security Essentials</title><content type='html'>看新聞說微軟出了免費的防毒軟體，&lt;br /&gt;雖然本來就用免費的小紅傘，可是看到新東西就想試~~&lt;br /&gt;所以，來試試看 ^^b&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;在這裡下載&lt;br /&gt;微軟的免費防毒軟體：&lt;a href="http://www.microsoft.com/security_essentials/"&gt;Microsoft Security Essentials&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SsSgX0G5omI/AAAAAAAAEH0/oOLmHpj9CXM/s1600-h/01.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SsSgX0G5omI/AAAAAAAAEH0/oOLmHpj9CXM/s400/01.bmp" alt="" id="BLOGGER_PHOTO_ID_5387607385226977890" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;點選：Download Now 下載！&lt;br /&gt;&lt;br /&gt;要下載微軟的軟體，當然要驗證 ^^b&lt;br /&gt;驗證下載後，就開始安裝囉~~&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SsSgYd407oI/AAAAAAAAEH8/iVZcjYkkU8g/s1600-h/02.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 313px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SsSgYd407oI/AAAAAAAAEH8/iVZcjYkkU8g/s400/02.bmp" alt="" id="BLOGGER_PHOTO_ID_5387607396442238594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;安裝後，第一件事就會開始執行 “Update”&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SsSgY_fr-fI/AAAAAAAAEIE/GyJfJKqeIbg/s1600-h/03.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 311px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SsSgY_fr-fI/AAAAAAAAEIE/GyJfJKqeIbg/s400/03.bmp" alt="" id="BLOGGER_PHOTO_ID_5387607405463599602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;安裝完之後會掃瞄&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/SsShM2UEPxI/AAAAAAAAEIM/Ff7vLRLKIDc/s1600-h/04.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 215px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/SsShM2UEPxI/AAAAAAAAEIM/Ff7vLRLKIDc/s400/04.bmp" alt="" id="BLOGGER_PHOTO_ID_5387608296352136978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;真的掃到東西了~~&lt;br /&gt;後面可以選擇 移除、隔離、允許&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SsShNUm3OtI/AAAAAAAAEIU/masKizq-NhM/s1600-h/05.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 392px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SsShNUm3OtI/AAAAAAAAEIU/masKizq-NhM/s400/05.bmp" alt="" id="BLOGGER_PHOTO_ID_5387608304484039378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;可以點選 Show Details 看看詳細的資訊....&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_oF_vbQi9p8w/SsShN4cQlxI/AAAAAAAAEIc/UiaXUa6vJZk/s1600-h/06.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 391px;" src="http://2.bp.blogspot.com/_oF_vbQi9p8w/SsShN4cQlxI/AAAAAAAAEIc/UiaXUa6vJZk/s400/06.bmp" alt="" id="BLOGGER_PHOTO_ID_5387608314103240466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;除了完了，還有一段介紹&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_oF_vbQi9p8w/SsSh1mAOahI/AAAAAAAAEIk/AtHVwDEgeJE/s1600-h/07.bmp"&gt;&lt;img style="cursor: pointer; width: 400px; height: 310px;" src="http://3.bp.blogspot.com/_oF_vbQi9p8w/SsSh1mAOahI/AAAAAAAAEIk/AtHVwDEgeJE/s400/07.bmp" alt="" id="BLOGGER_PHOTO_ID_5387608996348586514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;掃瞄完成之後，就是“重開機”&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SsSh2N7ln8I/AAAAAAAAEIs/A4aU3UyHZuU/s1600-h/08.bmp"&gt;&lt;img style="cursor: pointer; width: 270px; height: 61px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SsSh2N7ln8I/AAAAAAAAEIs/A4aU3UyHZuU/s400/08.bmp" alt="" id="BLOGGER_PHOTO_ID_5387609007066554306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;重開機之後就常駐在角落了&lt;br /&gt;&lt;br /&gt;最近試用一些有趣的軟體，&lt;br /&gt;檔案剛貼進去電腦&lt;br /&gt;小紅傘就開始歇斯底里的大叫~~&lt;br /&gt;這些檔案，已經被我丟到資源回收筒裡面了...&lt;br /&gt;可是，這套軟體還是都有掃出來... ^___^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-5245157550287593832?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/5245157550287593832/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/10/microsoft-security-essentials.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5245157550287593832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/5245157550287593832'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/10/microsoft-security-essentials.html' title='【工具】Microsoft Security Essentials'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oF_vbQi9p8w/SsSgX0G5omI/AAAAAAAAEH0/oOLmHpj9CXM/s72-c/01.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-7724281237221641627</id><published>2009-08-28T19:51:00.000-07:00</published><updated>2009-12-17T07:42:46.469-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Vulnerability Scanner'/><title type='text'>【筆記】Nikto</title><content type='html'>這是這份工作的第一個報告，看將近3星期的 Nikto；&lt;br /&gt;以程式架構來說，覺得 Nikto 的架構簡潔、清楚很好擴展&lt;br /&gt;可是細節有一堆看不懂的東西 ~&gt;"&lt;~&lt;br /&gt;&lt;br /&gt;開始介紹 Nikto&lt;br /&gt;&lt;br /&gt;Nikto是一種免費開放原始碼的 Web安全漏洞掃瞄工具。&lt;br /&gt;可以偵測出：&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3500種以上具有潛在危險的文件&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;900種以上版本的server&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;250種特定Server的問題&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;↑ 這一段是官網的原文照抄，數字應該是源自資料庫&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;db_tests 有 3577 筆資料&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;db_outdated 有 966 筆資料&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;db_server_msgs 有 253 筆資料&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;官網: &lt;a href="http://cirt.net/nikto2"&gt;http://cirt.net/nikto2&lt;/a&gt;&lt;br /&gt;授權方式: GPL&lt;br /&gt;底層模組: LibWhisker&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;用來分析http 封包的函式庫（不可以獨立執行）&lt;/span&gt;&lt;br /&gt;程式語言: Perl&lt;br /&gt;最新版本: ver. 2.03&lt;br /&gt;&lt;br /&gt;Nikto優點：&lt;br /&gt;●支援多種平台（Windows,Mac OS,Unix-Like）&lt;br /&gt;●操作簡單&lt;br /&gt;●自動測試，測試過程不需要人為參與&lt;br /&gt;●版本更新容易（線上更新）&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;●可以以nmap的輸出做為輸入&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;↑ 這是我覺得最棒的一點，&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Nikto跟其他的工具“配合度”很高...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;使用上，&lt;br /&gt;可以先用Nmap掃特定的IP、port再用 Nikto “幫忙”&lt;br /&gt;&lt;br /&gt;另外，也可以直接拿來給 Nessus 用，&lt;br /&gt;當Nessus掃瞄時的 “輔助”&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;●Libwhisker&lt;br /&gt;　●支援SSL&lt;br /&gt;　●http身份驗證機制（id:password ）&lt;br /&gt;　● 可以截取來自Web Server的cookie&lt;br /&gt;　● 支援多種 IDS 規避技術&lt;br /&gt;&lt;br /&gt;Nikto缺點：&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;會出現『誤判為有』的狀況，需要使用者進一步&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;確認（這類工具都有一樣的情況）&lt;/span&gt;&lt;br /&gt;● 不能以IP範圍做為輸入（輸入單一IP or 使用IP清單）&lt;br /&gt;● 不能以特定文件做為掃瞄目標（ 以特定目錄做為掃瞄目標）&lt;br /&gt;● 不能對 cookie 進行檢查&lt;br /&gt;&lt;br /&gt;測試上，我看到最多的就是&lt;br /&gt;Nikto查出這個 Server的 “平台”、“套件”、“工具”&lt;br /&gt;&lt;br /&gt;舉例來說：&lt;br /&gt;Nikto會提示，&lt;br /&gt;Apache是什麼版本？&lt;br /&gt;mod_security是什麼版本？&lt;br /&gt;php是什麼版本？&lt;br /&gt;openssl 是什麼版本？&lt;br /&gt;&lt;br /&gt;然後會有一些建議，&lt;br /&gt;版本過舊，要更新，目前最新的是什麼版本？&lt;br /&gt;使用的版本有那類已知道問題要修正&lt;br /&gt;（還會附問題連結）&lt;br /&gt;&lt;br /&gt;使用方法： 不想寫了 ~~&lt;br /&gt;Nikto 的使用方法很簡單，&lt;br /&gt;最簡單的做法就是直接給 ip&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;perl nikto.pl -h 192.168.0.1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;命令列用法大概就這堆：&lt;br /&gt;● 使用-h設定要掃瞄的IP or Domain&lt;br /&gt;● 使用-p設定要掃瞄的port,預設值是80&lt;br /&gt;● 使用-ssl設定要掃瞄ssl,預設的port值是443&lt;br /&gt;● 需要驗證身份的網站, 使用-id user:password&lt;br /&gt;● 只掃瞄網站的特定目錄, -root 要scan的目錄&lt;br /&gt;● 需要特定Cookie, -config cookie的內容設定&lt;br /&gt;● 使用-u設定要透過proxy，proxy在 config.txt中設定&lt;br /&gt;● 輸出報表使用-F定義輸出報表格式&lt;br /&gt;　● 格式: txt,csv,html,xml&lt;br /&gt;● 使用-o定 義輸出報表檔名&lt;br /&gt;● 使用-V可以看到Nikto的版本&lt;br /&gt;● 使用-upadate 直接線上更新&lt;br /&gt;● 對特定項目掃瞄使用 -t&lt;br /&gt;● 要逃過一些IDS工具使用 -e&lt;br /&gt;&lt;br /&gt;更複雜的可以用&lt;span style="font-weight: bold;"&gt;perl nikto.pl -H &lt;/span&gt;自己去看&lt;br /&gt;&lt;br /&gt;輸出結果：包含兩個部份：&lt;br /&gt;● IP、Hostname、port ……基本資料&lt;br /&gt;● 報表含OSVDB編號，可以直接在網站查詢&lt;br /&gt;● &lt;span style="font-weight: bold;"&gt;OSVDB http://osvdb.org/xxx&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;　OSVDB由OSF在2002年8月建立&amp;amp;維護&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;　目的在建立完整的資料庫，提供準確的資訊安全訊息&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;＊這個網站可以查詢特定軟件的危險資訊&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;======================================&lt;br /&gt;Nikto 的程式架構：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;● 主程式：Nikto.pl&lt;br /&gt;● 設定檔：Config.txt&lt;br /&gt;● plugins：資料檔案 &amp;amp; plugin&lt;br /&gt;● Templates：報表用的 Templates&lt;br /&gt;● Docs：說明文件&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;執行 Nikto.pl 之後，程式會去檢查 DB_xxx &amp;amp; plugin檔是否齊全？&lt;br /&gt;然後開始依序執行那堆 plugin&lt;br /&gt;執行完會產生 Nikto 的報告，&lt;br /&gt;如上面說的報告內容會含有 osvdb的編號&lt;br /&gt;可以做更細節的查詢&lt;br /&gt;&lt;br /&gt;======================================&lt;br /&gt;新增 plugin的方法&lt;br /&gt;&lt;br /&gt;●新增 sub nikto_test&lt;br /&gt;●檔名 nikto_test.plugin&lt;br /&gt;●把 nikto_test 補進 nikto_plugin_order.txt&lt;br /&gt;&lt;br /&gt;======================================&lt;br /&gt;資料庫集&lt;br /&gt;都以 csv的方式記錄資料&lt;br /&gt;記錄完了之後，供存檔、比對之用&lt;br /&gt;======================================&lt;br /&gt;結論：&lt;br /&gt;● 能夠發現問題存在，但不能證明問題不存在；&lt;br /&gt;使用者必須根據檢測結果再自行確認問題是否存在&lt;br /&gt;&lt;br /&gt;● 不應該被當做軟體開發的檢測工具或作為品質量度的統計數據&lt;br /&gt;&lt;br /&gt;● 最佳用途：&lt;br /&gt;　● 在網站大幅修改之後掃瞄確認問題&lt;br /&gt;&lt;br /&gt;======================================&lt;br /&gt; 使用這個工具產生一堆報表很簡單&lt;br /&gt;重點是可能要有些相關的背景才看的懂&lt;br /&gt;為什麼要這樣檢查；&lt;br /&gt;&lt;br /&gt;需要補齊的知識&lt;br /&gt;● Http packet (RFC 2616)&lt;br /&gt;● OWASP Top 10的攻擊方法&lt;br /&gt;● Anti-IDS 的技術？&lt;br /&gt;&lt;br /&gt;需要補齊的技術&lt;br /&gt;●Perl&lt;br /&gt;●正規表示式&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-7724281237221641627?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/7724281237221641627/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/08/nikto.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7724281237221641627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/7724281237221641627'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/08/nikto.html' title='【筆記】Nikto'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-2595651826313832414</id><published>2009-08-24T06:11:00.000-07:00</published><updated>2009-12-11T09:05:10.284-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='工具測試'/><title type='text'>【筆記】Apache2 + SSL</title><content type='html'>為了做一些測試臨時裝的整理一下..&lt;br /&gt;&lt;br /&gt;1. a2enmod ssl&lt;br /&gt;&lt;br /&gt;2. mkdir /etc/apache2/ssl&lt;br /&gt;make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem&lt;br /&gt;&lt;br /&gt;3. cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl&lt;br /&gt;ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl&lt;br /&gt;&lt;br /&gt;4. 修改 /etc/apache2/sites-available/ssl 將&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;ifmodule&gt;&lt;/ifmodule&gt;&lt;/span&gt; → 前後加上 &lt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;IfModule&lt;/span&gt;&gt; 的 Tag&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;&lt;virtualhost&gt; →&lt;/virtualhost&gt;&lt;/span&gt; 80 改成 443&lt;br /&gt; 加上這兩行&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;    SSLEngine on&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;    SSLCertificateFile /etc/apache2/ssl/apache.pem&lt;/span&gt;&lt;br /&gt; ……&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oF_vbQi9p8w/SpPR55EsudI/AAAAAAAAEFI/Xk0v0jPEENo/s1600-h/ssl.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 161px;" src="http://1.bp.blogspot.com/_oF_vbQi9p8w/SpPR55EsudI/AAAAAAAAEFI/Xk0v0jPEENo/s400/ssl.jpg" alt="" id="BLOGGER_PHOTO_ID_5373869572886411730" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6. 修改 /etc/apache2/ports.conf&lt;br /&gt;&lt;br /&gt;NameVirtualHost *:80&lt;br /&gt;Listen 80&lt;br /&gt;&lt;ifmodule&gt;&lt;br /&gt; # SSL name based virtual hosts are not yet supported, therefore no&lt;br /&gt; # NameVirtualHost statement here&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;    NameVirtualHost *:443&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;    Listen 443&lt;/span&gt;&lt;br /&gt;&lt;/ifmodule&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_oF_vbQi9p8w/SpPR6T0tkEI/AAAAAAAAEFQ/z9-xGyg3sZA/s1600-h/port.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 148px;" src="http://4.bp.blogspot.com/_oF_vbQi9p8w/SpPR6T0tkEI/AAAAAAAAEFQ/z9-xGyg3sZA/s400/port.jpg" alt="" id="BLOGGER_PHOTO_ID_5373869580067115074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7. 重新啟動 apache2&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4748729432146567274-2595651826313832414?l=jiapie-work.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jiapie-work.blogspot.com/feeds/2595651826313832414/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://jiapie-work.blogspot.com/2009/08/apache2-ssl.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2595651826313832414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4748729432146567274/posts/default/2595651826313832414'/><link rel='alternate' type='text/html' href='http://jiapie-work.blogspot.com/2009/08/apache2-ssl.html' title='【筆記】Apache2 + SSL'/><author><name>Star Lee</name><uri>https://profiles.google.com/115753486054094804805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-7YPtX2r1_NY/AAAAAAAAAAI/AAAAAAAAGnA/T-u7EMxn2xQ/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oF_vbQi9p8w/SpPR55EsudI/AAAAAAAAEFI/Xk0v0jPEENo/s72-c/ssl.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4748729432146567274.post-3830672129840769653</id><published>2009-08-21T21:49:00.000-07:00</published><updated>2009-12-11T08:39:38.492-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='密碼學研究'/><title type='text'>【筆記】中國剩餘定理</title><content type='html'>&lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;  &lt;/style&gt;  &lt;p style="margin-bottom: 0cm;"&gt;這是題目：&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-weight: bold;"&gt;有物不知其數，三三數之剩二，&lt;br /&gt;五五數之剩三，七七數之剩二。&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-weight: bold;"&gt;問物幾何？&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;其實已經夠白話了，象徵一下翻成白話文：&lt;/p&gt;&lt;p style="margin-bottom: 0cm; font-weight: bold; color: rgb(0, 0, 153);"&gt;有一個東西不知道數量，&lt;br /&gt;一次取 3 個最後剩 2 個，&lt;br /&gt;一次取 5 個最後剩 3 個，&lt;br /&gt;一次取 7 個最後剩 2 個。&lt;br /&gt;這個東西的數量共有幾個？&lt;/p&gt;&lt;p style="margin-bottom: 0cm;"&gt;再轉成數學式來看：&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;設東西的數量為 X&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;X mod 3 ＝ 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;X mod 5 ＝ 3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;X mod 7 ＝ 2&lt;br /&gt;&lt;br /&gt;X的值就是要求的答案&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;這個題目的答案口訣是：&lt;br /&gt;&lt;p style="margin-bottom: 0cm; font-weight: bold;"&gt;三人同行七十稀，五樹梅花廿一支，&lt;br /&gt;七子團圓正半月，除百零五便得知。&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm; font-weight: bold;"&gt;再翻譯一下：&lt;/p&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;[1]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;前三句找的是&lt;br /&gt;除以 3,5,7 餘數為 1 的數&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;/span&gt;70 mod 3 ＝ 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;21 mod 5 ＝ 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;15 mod 7 ＝ 1&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;[2]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;把值換算成跟題目問的一樣 &lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;2*(70) mod 3 ＝ 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;3*(21) mod 5 ＝ 3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;2*(15) mod 7 ＝ 2&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;[3]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;把這些值加起來取除以 105 的餘數&lt;br /&gt;就是我們要的答案，把題目算完&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;{[2*(70)]+&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[3*(21)]+&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[2*(15)]} mod 105&lt;br /&gt;= (140 + 63 + 30) mod 105&lt;br /&gt;= &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;233 mod 105&lt;br /&gt;= 23 --&gt; 答案&lt;br /&gt;&lt;br /&gt;這樣的計算過程就叫 『中國剩餘定理』&lt;br /&gt;&lt;br /&gt;把&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; [1]&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt; 的內容調整一下，變成：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[(&lt;span style="color: rgb(255, 102, 0);"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;&lt;/span&gt;5*7/&lt;span style="color: rgb(255, 102, 0);"&gt;3&lt;/span&gt;)*2]  mod 3 ＝ 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[(3*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;7&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;/&lt;span style="color: rgb(255, 102, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;)*1]  &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;mod 5 ＝ 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[(3*5*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;7&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;/&lt;span style="color: rgb(255, 102, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;7&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;)*1]  &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;mod 7 ＝ 1&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;把&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt; [2]&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt; 的內容調整一下，變成：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;2 *&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[(&lt;span style="color: rgb(255, 102, 0);"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;&lt;/span&gt;5*7/&lt;span style="color: rgb(255, 102, 0);"&gt;3&lt;/span&gt;)*2]&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt; mod 3 ＝ 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;3 *&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[(3*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;7&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;/&lt;span style="color: rgb(255, 102, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;)*1] &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt; &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;mod 5 ＝ 3&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;2* &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;[(3*5*&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;7&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;/&lt;span style="color: rgb(255, 102, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;&lt;span style="color:
