2009年8月28日 星期五

Hacking D-Link AP


由於D-Link產品乃修改自Linux,基本上就是個Embedded Linux System,在Windows下開發應該是不可能的,因此開發環境選用Linux,建議要有一定的Linux使用及操作經驗,才不會在開發過程中花很多的時間在環境配置或找指令,更甚者,花了很多時間卻不知自己身在幹麻。

沒有Linux使用經驗的朋友,建議使用虛擬機器軟體建立Linux環境先熟悉一下Linux環境及玩法,以利開發及使用,使用虛擬機器好處是不需要解決Linux + Windows的雙系統安裝問題,以及可能因安裝失敗以致毀掉重要資料帶來的身心傷害

常見的虛擬機器軟體有:VirtualboxVMWareMicrosoft Virtual PC … 等,推薦使用Virtualbox,優點除了是自由軟體外,還很好吃呢,安裝方便、輕巧且耗費的資源少、模擬環境的效能還不錯。

建議初學者先看看鳥哥的Linux私房菜這個網站,資料很多很豐富,可建立許多基本概念,另外,也建議先學會操作vimshell commandvim是一套Linux上文字介面的text editor,有著強大的功能(請見參考文件),各大發行版(distribution)都有它的蹤跡,學會了到處都可以用,若不習慣沒滑鼠及GUI的日子,還有圖形化版本可選用(Gvim)shell command是操作Linux的基本功,使用Linux卻不會shell command會帶來很多的不便,而且無法進行開發工作這對身為專業的資訊人員來說是不允許滴

Last but not leastLinuxWindows有著截然不同的設計哲學及系統架構,they are differentLinux並非Windows的低價取代品,因此許多方面的比較是毫無意義的,Linux不會比Windows難用,只是你跟它不熟罷了,所以請當做自己在學習一個新東西(事實上確實是如此),就如同當年你與Windows 95初次見面一般。

說明文件中的開發環境
OSUbuntu 9.04
gccgcc 4.1
EditorVIM

References
Linux learning: 鳥哥的Linux 私房菜
Embedded linux: Free Electrons
C programming under linux: die.net,


開發環境設定
ubuntu上開發請先安裝下列軟體,若在其它distribution開發也可以檢查這些套件是否已經安裝在系統中了。
Packagebisonflexbuild-essentialpatchlibncurses5-devzlib1-devlibssl-devgcc-4.1

D-Link產品的source code可在http://tsd.dlink.com.tw/下載。

修改以下兩個設定
*Relink /bin/sh -> /bin/bash (/bin/dash originally, that cause error)
$ sudo rm /bin/sh
$ sudo ln -s /bin/bash /bin/sh

*Relink /usr/bin/gcc -> /usr/bin/gcc-4.1 (/usr/bin/gcc-4.3 originally, that cause error)
Ubuntu 9.04gcc版本為4.3,在compile過程中會很盡責的回報一堆bug,有些bug根本就不知從何著手XD,後來換成gcc 4.1才順利compile完成,推測D-Link可能原就是使用gcc 4.1compile
安裝gcc 4.1(無需移除gcc 4.3)
$ sudo apt-get install gcc-4.1

將系統中的gcc指令改為指向gcc 4.1
$ sudo rm /usr/bin/gcc
$ sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc


Source Code Compilation
以下的tarball本文測試時使用的版本,請勿直接套用名稱,會無法使用。另外,儘量不使用root權限,以免發生莫名其妙的error,除非因權限不足造成問題
*Extract source code tarball and enter the directory.
$ bzip -d DAP1353_v200_r0013_2007-09-26.tar.bz2
$ tar -zvf DAP1353_v200_r0013_2007-09-26.tar
$ cd DAP1353

*Execute the "build_tool_chain.sh",請先看readme,有些選項要手動設定
$ sh build_tool_chain.sh

If permission error occurred, run this script as root
重要:重run前先刪除當前目錄下buildroot目錄,不然作到死都不會成功的XD,因為script會先判斷這個目錄是否存在
$ rm -rv buildroot
$ sudo sh build_tool_chain.sh

*Compile source code
第一次compile分別執行3make,若在前一步驟使用root權限,在此亦使用root權限。Compile成功後會產生image檔,放在當前目錄的images目錄下。

*使用image
唯一的方法就是使用網頁介面(192.168.0.1;帳號:admin、密碼:無)中上傳功能(維護 => 韌體更新),選取正確的image並上傳。

WDK + Microsoft Visual Studio 2008 Howto

安裝

Download Microsoft Visual Studio 2008 Express, and then install Visual C++ 2008 Express.

Dowload DDKBUILD.BAT, DDKBUILD.CMD, installer(ddkwizard) from here.(Manual is recommended)

複製 bbkbuild.bat, ddkbuild.cmd WDK安裝路徑下, ex: C:\WINDDK. 並執行安裝程式 - ddkwizard.


設定系統變數

在把install path加到系統變數Path(for ddkbuild.bat, ddkbuild.cmd).

新增一系統變數 WXPBASE 並給予變數值install path\{build number}.

Note: 俺的install pathC:\WINDDK{build number}7600.16385.0


設定Microsoft Visual C++ 2008

Run Wnidows Visual C++ 2008 Express.

工具 -> 選項 -> 專案和方案 -> C++目錄

選取右側的「顯示目錄(S)」為「可執行檔」,加入WDK執行檔的path

C:\WINDDK\{build number}\bin\x86

Note: 依情況增加路徑,或修改install path


選取右側的「顯示目錄(S)」為「Include檔案」,加入以下path

C:\WINDDK\{build number}\inc\ddk

Note: 依情況增加路徑,或修改install path


選取右側的「顯示目錄(S)」為「程式庫檔」,加入以下path

C:\WINDDK\{build number}\lib

C:\WINDDK\{build number}\lib\wnet\i386

Note: 依情況增加路徑,或修改install path


以上,完成環境設定。


Ms Visual C++ 2008中用WDK compile驅動程式

Step 1:

建立專案 -> DDK Project -> Empty Driver, 別忘了給專案一個名字.

Step 2:

接下來會看到Which DDK(s) do you want to use, 因為俺是在Windows XP下開發所以選擇Windows XP DDK

Note: 千萬別選「Create PREfast configuration」,不然會一直compile失敗,網路上好像也找不到原因,可能是我不會google的關係,再接再勵吧 !


Step 3:

複製WDK sample source files到專案目錄下

以俺的狀況為例, copy *.c, *.h, sources, makefile from

C:\WINDDK\{build number}\src\network\ndis\ndisprot\5x\sys

to project directory

C:\Documents and Settings\user name\My Documents\Visual Studio 2008\Projects\ndisprot\ndisprot


回到Ms Visual C++ 2008中的專案視窗

左方案總管Header Files -> 右鍵”加入” -> 現有項目

加入所有的header file


左方案總管Sources Files -> 右鍵”加入” -> 現有項目

加入所有的*.c, *.rc檔案


左方案總管Special Files -> 右鍵”加入” -> 現有項目

加入sources, makefile


上方功能表「建置」 -> 建置方案

Compile完沒有錯誤就代表成功了


另外有一個問題,雖然我們成功的compiledriver,但卻沒有安裝用的INF檔,可行的解決方式是到WDKsample裡找跟我們類型最接近的driver,拿它的INF來改。

2009年8月27日 星期四

WDK 安裝 Howto

開發Microsoft Windows驅動程式(driver)需要安裝Windows驅動程式套件 - Microsoft Windows Driver Kit (以下簡稱WDK),請見WDK官方網站。建議儘量使用Microsoft美國網站,因為台灣站內容的更新仍跟不上美國官網。此時官網中的WDK版本為7.0,筆者的OSWindows XP


下載WDK的方式有3種,可從Microsoft Download CenterMicrosoft Connect Web SiteMSDN Subscriptions下載,第1種是最方便的,後2種下載方式都複雜到爆炸(不能馬上下載對俺來說就爆了XD),因此不建議使用後2種。


下載的檔案是光碟映像檔(ISO),不用燒成光碟,使用虛擬光碟軟體可以把光碟映像檔如同實體光碟放在光碟機一樣來使用,虛擬光碟軟體有很多,筆者常用的是DAEMON TOOLS這套軟體,另外很多燒錄軟體有附虛擬光碟功能,例如:酒精。


喔,對了,Microsoft .NET Framework 3.5也要先裝好才可以裝WDK唷。


以下是安裝WDK的流程

Step 1: Installing WDK.

Note: 安裝路徑不要包含空白,不然可能會發生莫名奇妙的錯誤(你知道的,這就是Microsoft )

Note: 記得安裝Sample

Note: 不需要的套件就不要裝(Ex: Device Simulation Framework, Windows Device Testing Framework),以節省空間。

Note: 若系統中有舊版WDK,請不要安裝在同一目錄或把它覆蓋過,可能會因此在開發過程發生莫名奇妙的錯誤(你知道的,這就是Microsoft),請使用完全不同的目錄來安裝。


Step 2: Installing the Debuggers, X:\Debuggers\setup_x86.exe.

Note: X is the CD-ROM drive.


Step 3: 驗證WDK安裝是否成功, 驗證方式就是compile sample檔。

「開始」 → 「所有程式」 → 「Windows Development Kits」 → 「Windows DDK」→「Build Environments」 → 「 Windows XP」→ 「Windows XP Checked Build Environment


Note: sample path{install path}\src\{type}

Note: type有很多種,Ex: network, 1394, printer … etc.

Note: In my case, 只需要~\network\ndis\ndisprot, 將不需要的sample(請依情況調整)移出安裝路徑中src目錄。

Note: 在此值得注意的是我們選擇5.x而非6.0。因為NDIS 5.x driver支援windows 98windows 2003,而6.x則只支援windows vista之後的版本。

Note: ndisprot sample說明請見末頁。

Note: 在建置環境命令提示字元中輸入build –cZ便會進行compile動作。等一下 !!! 先不要執行指令,compile全部的sample很花時間,只compile需要的檔案就好。

Note: 如果要針對需要的檔案編譯,請切換到該sample的目錄下buildEx: ~\network\ndis\ndisprot\5x\sys

Note: test program也要compile,後面會用到。


若無任何錯誤訊息就代表成功了。恭喜(~) !! 接下來就是安裝到系統上來了。

2009年8月20日 星期四

到底 ...
人生將會是怎樣 ?

縱然不可能事事如意,
但,
何以肯定之,
又何以否定之呢 ?

該怎樣評斷,是否不虛此行呢 ?

有人說問心無愧,
對我而言,
最大的障礙可能在接受不完美吧 ...

怎樣的不完美才算是能問心無愧的接受 ?

2009年8月19日 星期三

無奈

本來是想去參加試唱的 ...

這是從小就有的夢想,
不是因為可以成為鎂光燈的焦點,
而是這件事可以讓我心跳加速,熱血沸騰。
似乎沒有其他的事可以讓我感到那麼的 ... 癢!
不能做就渾身的不對勁
(這種感覺好像也被磨掉了)

爸很努力的從小就培養了我這方面的才能,
希望能讓他看到過去花費的心力沒有白費.
雖然他已經不在了,但至少我想透過達到的成果來緬懷他

但 ...
女王至始至終就不支持這件事 ...
因為在那樣的圈子內有著太多的背叛
因為不想我被搶走(~苦笑)
因為不想相處的時間太少
因為我應該把重點放在工作上

是阿 ...
有哪個女孩願意分享自己的另一半
為了讓她安心,我也只好放棄了 ...
況且,她不支持,這又有什麼意義呢 ?

似乎 .. 還沒有被全心全意支持過呢 !
從大學社團到現在 ...
但話說回來,搞不好是我自己的問題(~苦笑) ...
也可能是要求另一半全心全意無條件支持本身就是一個很過份的事吧 !?

只是好不容易看到一到曙光、嘗到一滴甘露的小綠芽,
可能沒有再探出土壤的一天了 ...

老爸,對不起 ...
也許這一輩子我沒有辦法證明你的眼光了 ...