标题: MISC系列(9)--去除OmniPeek发包不能伪造源MAC的限制 创建: 2006-08-16 09:52 更新: 链接: https://scz.617.cn/misc/200608160952.txt -------------------------------------------------------------------------- 目录: ☆ 去除OmniPeek发包不能伪造源MAC的限制 ☆ 参考资源 -------------------------------------------------------------------------- ☆ 去除OmniPeek发包不能伪造源MAC的限制 1259@netexpert发了个贴,说OmniPeek发包时不能伪造源MAC,即使在数据窗口中指 定了虚假MAC,发送出去时也被自动修正成真实源MAC。而Sniffer Pro没有这个限制。 finger@netexpert测试了一番,证实了这个说法。我乍一看到还不很信,也测试了一 番,果然。WildPackets为什么要加这个限制,懒得深究了,于我看来无非是些掩耳 盗铃之举。反正这个限制我不想要。去除这个限制也很简单,下面以OmniPeek 3.1.1 为例介绍一下全过程。 第一反应是OmniPeek所用NDIS协议驱动peek5.sys中做了限制,XP DDK、XP OS自带的 NDISUIO就对发包时所用源MAC做了限制,不允许伪造。参看: <> 用IDA Pro逆了peek5.sys,查看NdisSend()的引用关系,没有发现其主调代码附近有 什么限制。既然这样,这个限制就该是用户态代码做的,准备在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继续。重复几次,前面几次都是这种简单复制,接着会断在如 下位置: -------------------------------------------------------------------------- 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查看一下,会发现EAX对应我们伪造的源MAC,而ECX对应真实源MAC。 显然这里就是我们需要Hacking的地方,不让真实源MAC写下去就是了,修改方案有多 种,选自己喜欢的吧。我在OllyICE中简单Hacking之后,验证无误,发包时已经可以 任意伪造源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 -------------------------------------------------------------------------- 查看引用关系,发现ModifySrcMac/0x006DD5B0只被调用了一次,因此还可以修改主 调部分。不过稳妥起见,我选择修改被调部分。 本想简单点,直接在OllyICE中Patch,结果生成的OPeek_crack.exe不可用。这个程 序对自身静态文件做了校验,发现被Patch过就不让用了。跟Skype.exe搏斗过后实在 没心情将时间浪费在对付这类自校验上,最终选择写个loader去动态Patch。 将fakesrcmac.exe放在OPeek.exe所在目录。以后不要直接启动OPeek.exe,而是通过 fakesrcmac.exe间接启动OPeek.exe,即可在发包时任意伪造源MAC。 fakesrcmac.exe只适用于OmniPeek 3.1.1,不过其它版本的OmniPeek修理起来类似。 ☆ 参考资源 [ 1] http://www.netexpert.cn/viewthread.php?tid=10153&extra=page%3D1 [ 2] <> https://scz.617.cn/windows/200408171624.txt [ 3] https://scz.617.cn/misc/fakesrcmac.exe