阅读:3739回复:14
ARPRcvIndicationNew 定义原型?顺便上传 360AntiARP 逆向代码。
前段时间埋头工作,前两天突然发现 360AntiARP,顺便逆了一下。
现在已经逆到第二次 Hook 动作了,就是 ARPRcvIndicationNew 的 Hook。 网上找了半天也没发现该函数的原型定义,那位兄弟帮忙给出一下?谢谢! 就是下面代码中的 HookProc2 部分 :) /////////////////////////////////////////////////////////////////////////////// // Hook: NdisRegisterProtocol VOID HookProc (PNDIS_STATUS Status, PNDIS_HANDLE Handle, PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics, UINT CharacteristicsLength) { UCHAR * p, * pMax; ULONG ul; KIRQL OldIrql; p = (UCHAR *)ProtocolCharacteristics->SendCompleteHandler; if ( !MmIsAddressValid (p) ) goto quit_hook; if ((ULONG)p < _ul7) goto quit_hook; if ((ULONG)p > (_ul7+_ul8)) goto quit_hook; pMax = p + 0x80; for (; p<pMax; p++) { if (!MmIsAddressValid(p) || (*p!=0xE8)) continue; ul = *(PULONG)(p+1); // get call offset ul += (ULONG)p+5; // goto subproc entry point _ulB = ul; if (!MmIsAddressValid((PVOID)ul)) continue; if (_ulB > _ul7) { if (_ulB < (_ul7+_ul8)) break; } _ulB = 0; } if (_ulB) { KeAcquireSpinLock (&_SpinLock, &OldIrql); DisableProtect (); // Hook & Hook again! *(PULONG)(p+1) = (ULONG)HookProc2 - (ULONG)p - 5; __asm { sti push eax mov eax, _oldCR0 mov cr0, eax pop eax } KeReleaseSpinLock (&_SpinLock, OldIrql); p = (UCHAR *)ProtocolCharacteristics->ReceivePacketHandler; if (MmIsAddressValid(p)) { pMax = p + 0x100; if (p<pMax) { for (; p<pMax; p++) { if (!MmIsAddressValid(p) || *p!= 0xE8) continue; ul = *(PULONG)(p+1); ul += (ULONG)p+5; if (ul == _ulB) break; } KeAcquireSpinLock (&_SpinLock, &OldIrql); DisableProtect(); // Hook, Hook & Hook again!!! *(PULONG)(p+1) = (ULONG)HookProc2 - (ULONG)p - 5; __asm { sti push eax mov eax, _oldCR0 mov cr0, eax pop eax } KeReleaseSpinLock (&_SpinLock, OldIrql); } } } // para_1 _ulA = (ULONG)ExAllocatePool (NonPagedPool, 0x1000); _ul9 = 0; memset ((PVOID)_ulA, 0, 0x1000); _ulC = (ULONG)ExAllocatePool (NonPagedPool, 0x6); memset ((PVOID)_ulC, 0, 0x6); if (!MmIsAddressValid ((PVOID)_ul4)) goto quit_hook; if (!MmIsAddressValid ((PVOID)_ul6)) goto quit_hook; KeAcquireSpinLock (&_SpinLock, &OldIrql); DisableProtect(); *(PULONG)_ul4 = _ul6; __asm { sti push eax mov eax, _oldCR0 mov cr0, eax pop eax } KeReleaseSpinLock (&_SpinLock, OldIrql); quit_hook: ((NDIS_REGISTER_PROTOCOL)_ul6)(Status, Handle, ProtocolCharacteristics, CharacteristicsLength); } 附件在 9 楼,嘿嘿。 密码: nanothyll |
|
最新喜欢:![]() |
沙发#
发布于:2007-10-09 17:31
查不多了,不用找原形的,你看看这个连接http://www.debugman.com/job.php?action=download&pid=2603&tid=622&aid=307的idb, 再加上debug 下应用层的传来的参数,可以把8-9个参数还原的查不多,可以看下tcpip.sys里面的函数,自己用ida 分析下,我分析过2000 下的,加符号表,只分析出来了2个参数.那个连接里分析出来了2个参数.
|
|
板凳#
发布于:2007-10-09 17:54
NDIS_STATUS __stdcall FakeARPRecvInNew(NDIS_HANDLE Handle,
NDIS_HANDLE Context, PVOID Header, uint HeaderSize, PVOID Data, uint DataSize, uint TotalSize, ULONG Unknow1, ULONG Unknow2) 源码解惑~ ![]() |
|
|
地板#
发布于:2007-10-09 18:01
BOOL ARPRcvIndicationNew(
IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, // ethernet_head IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, // ARP_PACKET IN UINT LookaheadBufferSize, IN UINT PacketSize, IN UINT unKown, // 可以取0, 4 字节 IN UINT unKown) // 可以取0, 4 字节 |
|
地下室#
发布于:2007-10-09 19:32
嘿嘿,还是找原作者方便,下次直接联系你好了 :)
也谢谢 throb 的热心帮忙~ |
|
5楼#
发布于:2007-10-14 23:03
都搞定了,问个问题,为什么 360AntiARP 这个驱动的 SpinLock 在 KeAcquireSpinLock 和 KeReleaseSpinLock 之前没有调用 KeInitializeSpinLock 函数?
我没用过 SpinLock , 路过的大牛顺便答疑一下。 |
|
6楼#
发布于:2007-10-15 11:37
嘿嘿,来看看这个函数~
FORCEINLINE VOID NTAPI KeInitializeSpinLock ( __out PKSPIN_LOCK SpinLock ) { *SpinLock = 0; } |
|
|
7楼#
发布于:2007-10-15 14:06
果真如此,原来是这样子:
kd> u nt!KeInitializeSpinLock nt!KeInitializeSpinLock: 804db5c4 8b442404 mov eax,dword ptr [esp+4] 804db5c8 c70000000000 mov dword ptr [eax],0 804db5ce c20400 ret 4 Many thanks! |
|
8楼#
发布于:2007-10-15 18:47
学习了
|
|
9楼#
发布于:2007-10-16 15:28
偷偷放出来了,大家看个热闹就好。呵呵。
反的比较差,变量也懒得修整,将就看吧。 。。。 添加一下,密码是:nanothyll 第一楼最后明明有写么,不明显么? 那就放在这里好了,嘿嘿 |
|
|
驱动小牛
![]() |
10楼#
发布于:2007-10-17 08:49
有密码啊,下载下来无法看.
|
驱动小牛
![]() |
11楼#
发布于:2007-10-17 08:49
有密码啊,下载下来无法看.
|
12楼#
发布于:2007-10-17 11:54
引用第11楼wangjianfeng于2007-10-17 08:49发表的 : 密码是: nanothyll |
|
|
13楼#
发布于:2007-10-17 13:42
好多GOTO,,,,我都看不懂了。。。
![]() |
|
|
14楼#
发布于:2007-10-17 15:13
引用第13楼WQXNETQIQI于2007-10-17 13:42发表的 : 很漂亮的goto~ |
|
|