鏈接: http://www.opencjk.org/~scz/misc/200608160952.txt
--------------------------------------------------------------------------
目錄:
??? ☆ 去除OmniPeek發(fā)包不能偽造源MAC的限制
??? ☆ 參考資源
--------------------------------------------------------------------------
☆ 去除OmniPeek發(fā)包不能偽造源MAC的限制
1259@netexpert發(fā)了個貼,說OmniPeek發(fā)包時不能偽造源MAC,即使在數據窗口中指
定了虛假MAC,發(fā)送出去時也被自動修正成真實源MAC。而Sniffer Pro沒有這個限制。
finger@netexpert測試了一番,證實了這個說法。我乍一看到還不很信,也測試了一
番,果然。WildPackets為什么要加這個限制,懶得深究了,于我看來無非是些掩耳
盜鈴之舉。反正這個限制我不想要。去除這個限制也很簡單,下面以OmniPeek 3.1.1
為例介紹一下全過程。
第一反應是OmniPeek所用NDIS協(xié)議驅動peek5.sys中做了限制,XP DDK、XP OS自帶的
NDISUIO就對發(fā)包時所用源MAC做了限制,不允許偽造。參看:
<<MSDN系列(14)--"NDIS Protocol Driver"入門>>
用IDA Pro逆了peek5.sys,查看NdisSend()的引用關系,沒有發(fā)現其主調代碼附近有
什么限制。既然這樣,這個限制就該是用戶態(tài)代碼做的,準備在Ring 3調試OmniPeek。
OmniPeek運行起來后再用OllyICE去Attach的話,多多少少有點問題,我用OllyICE直
接加載OPeek.exe,F9讓它運行起來。選中"Send->Edit Send Packet",胡亂構造一
個報文,比如數據鏈路層的源MAC偽造成"00 00 51 21 13 14",點"OK"。選中"Send
Window",先點"Reset"將"Packets sent"恢復成0,再將"Packets per burst"從5調
成1。現在轉回OllyICE,Alt-M叫出"Memory map"窗口,選中最開始的0x00010000地
址,Ctrl-B查找16進制數據,比如"00 00 4E 53 46 4F 00 00 51 21 13 14 08 00"。
假設在0x02BD67AC處找到一次,在此針對源MAC設置OllyICE特有的內存訪問斷點。回
"Send Window"點擊"Transmit One",內存訪問斷點命中,從ESI復制數據到EDI,可
以db esi、db edi檢查一下,針對EDI設置新的內存訪問斷點(好像OllyICE只能設一
個內存訪問斷點),F9繼續(xù)。重復幾次,前面幾次都是這種簡單復制,接著會斷在如
下位置:
--------------------------------------------------------------------------
006DD5BD????? 8910????????? mov???? [eax], edx
006DD5BF????? 66:8B49 04??? mov???? cx, [ecx+4]
006DD5C3????? 66:8948 04??? mov???? [eax+4], cx
006DD5C7? |.? B0 01???????? mov???? al, 1
006DD5C9? \.? C3??????????? retn
--------------------------------------------------------------------------
db eax、db ecx查看一下,會發(fā)現EAX對應我們偽造的源MAC,而ECX對應真實源MAC。
顯然這里就是我們需要Hacking的地方,不讓真實源MAC寫下去就是了,修改方案有多
種,選自己喜歡的吧。我在OllyICE中簡單Hacking之后,驗證無誤,發(fā)包時已經可以
任意偽造源MAC。
后來用IDA Pro逆了整個OPeek.exe,上述代碼實際是ModifySrcMac/0x006DD5B0的一
部分:
--------------------------------------------------------------------------
006DD5B0???????????????????????? ModifySrcMac proc near
006DD5B0 80 39 00??????????????????? cmp byte ptr [ecx], 0
006DD5B3 75 03?????????????????????? jnz short ModifySrcMac_0
006DD5B5 32 C0?????????????????????? xor al, al
006DD5B7 C3????????????????????????? retn
006DD5B8
006DD5B8???????????????????????? ModifySrcMac_0:
006DD5B8 83 C1 58??????????????????? add ecx, 58h
006DD5BB 8B 11?????????????????????? mov edx, [ecx]
006DD5BD 89 10?????????????????????? mov [eax], edx
006DD5BF 66 8B 49 04???????????????? mov cx, [ecx+4]
006DD5C3 66 89 48 04???????????????? mov [eax+4], cx
006DD5C7 B0 01?????????????????????? mov al, 1
006DD5C9 C3????????????????????????? retn
006DD5C9???????????????????????? ModifySrcMac endp
--------------------------------------------------------------------------
查看引用關系,發(fā)現ModifySrcMac/0x006DD5B0只被調用了一次,因此還可以修改主
調部分。不過穩(wěn)妥起見,我選擇修改被調部分。
本想簡單點,直接在OllyICE中Patch,結果生成的OPeek_crack.exe不可用。這個程
序對自身靜態(tài)文件做了校驗,發(fā)現被Patch過就不讓用了。跟Skype.exe搏斗過后實在
沒心情將時間浪費在對付這類自校驗上,最終選擇寫個loader去動態(tài)Patch。
將fakesrcmac.exe放在OPeek.exe所在目錄。以后不要直接啟動OPeek.exe,而是通過
fakesrcmac.exe間接啟動OPeek.exe,即可在發(fā)包時任意偽造源MAC。
fakesrcmac.exe只適用于OmniPeek 3.1.1,不過其它版本的OmniPeek修理起來類似。
☆ 參考資源
[ 1] http://www.netexpert.cn/viewthread.php?tid=10153&extra=page%3D1
[ 2] <<MSDN系列(14)--"NDIS Protocol Driver"入門>>
???? http://www.opencjk.org/~scz/windows/200408171624.txt
[ 3] http://www.opencjk.org/~scz/misc/fakesrcmac.exe