2014年4月27日 星期日

SMB protocol 需要的 port

早期的 Windows 作業系統 SMB protocol 使用 NetBios over TCP, 需要 137~139 port.
之後的作業系統使用 port 445.

所以現在應該只需要 445 port 就可以使用 SMB

reference:
http://social.technet.microsoft.com/Forums/windowsserver/en-US/92b7ac42-8e3f-43cf-8b4d-e9d4c618b112/smb-over-139-or-445?forum=winservergen

2014年4月22日 星期二

RtlUserThreadStart vs BaseThreadStart

RtlUserThreadStart 是 NTDLL 內的函數, windows vista 與之後的 windows 版本使用這個函數作為一個 thread 的起始函數

BaseThreadStart 是 Kernel32 內的函數, windows vista 之前的版本使用這個函數作為 thread 的起始函數

How process exit

http://blogs.msdn.com/b/oldnewthing/archive/2007/05/03/2383346.aspx

http://blogs.msdn.com/b/oldnewthing/archive/2012/04/27/10298256.aspx

2014年4月21日 星期一

Windows PE 執行檔的 OEP 是如何被呼叫的

當 CreateProcess 被呼叫之後,最後會呼叫到 NtCreateProcess 進入 kernel mode.
kernel 幫我們建立進程需要的核心物件和初始化進程內部的物件例如 PEB 等等.

然後建立該進程第一個 thread 也就是 main thread, 同時也會建立與之相關的 thread context
context 中有兩個重要的 register -- eax 和 eip

eip 會設定成 BaseProcessStartThunk
eax 會設定成 OEP

呼叫流程如下
BaseProcessStartThunk --> BaseProcessStart --> OEP

所以事實上, 一個進程中 user mode 第一個被執行到的 code 是 BaseProcessStartThunk.


2014年4月19日 星期六

安裝任意版本的Windows 7

Windows 7 的安裝光碟中, 其實已經包含了各種不同的 Windows 版本
在安裝光碟的 source 目錄下有一個檔案 ei.cfg
裡面記錄了執行安裝程式時要安裝哪個版本的 Windows



如果使用 Ultimate 的安裝光碟, EdittionID 就會是 Ultimate
如果使用 Home Basic 的安裝光碟, EditionID 就會是 Home Basic

如果修改這個檔案
就算是 Home Basic 的安裝光碟, 也可以安裝 Ultimate 版本


用 VMware 來安裝 Windows 7, 會發現不管是用 Ultimate 或是 Perfessional 的 ISO 安裝光碟, 都可以選擇各種不同的版本來安裝



應該就是藉由修改這個檔案來達成的

知道了這個事實, 就可以自己製作可安裝任何版本的 Windows 安裝檔了
http://www.dotblogs.com.tw/chou/archive/2009/10/26/11305.aspx

但是如果選了 Ultimate 的安裝版本, 就必須要有 Ultimate 的序號才行
使用 Home Basic 的安裝序號是無法啟用 Ultimate 的

2014年4月1日 星期二

findstr 是 Windows 下的 grep 指令

findstr 是 Windows 下的 grep 指令
常用參數是
/S 遞迴搜尋子目錄
/I  不區分大小寫

example:
findstr /S /I /C:"printf" *.c