NdisRegisterProtocol---code
本帖最后由 ywledoc 于 2011-7-5 16:49 编辑突然发现自己潜水+灌水好久了~土木男真是悲剧~配筋算啊算,桥梁受力算啊算~考了一个星期,算了三个星期~
NdisRegisterProtocol的内部代码。以前放过一份别人逆的,后来自己动手发现不准确,略加修改。
代码如下:#include <ndis.h>
#include <windef.h>
#include <wdm.h>
#include "global.h"
#include "regprotocol.h"
LONG KeInsertQueue(
PVOID Queue,
PLIST_ENTRY Entry
);
typedef struct{
PVOID OpenQueue; //: Ptr32 _NDIS_OPEN_BLOCK 0X00
REFERENCE Ref; //: _REFERENCE 0X04
PKEVENT DeregEvent; //: Ptr32 _KEVENT 0X0C
PNDIS_PROTOCOL_BLOCK NextProtocol; //: Ptr32 _NDIS_PROTOCOL_BLOCK 0X10
NDIS50_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics; //: _NDIS50_PROTOCOL_CHARACTERISTICS 0X14
WORK_QUEUE_ITEM WorkItem; //: _WORK_QUEUE_ITEM 0X80
KMUTANT Mutex; //: _KMUTANT 0X90
ULONG MutexOwner; //: Uint4B 0XB0
PUNICODE_STRING BindDeviceName; //: Ptr32 _UNICODE_STRING 0XB4
PUNICODE_STRING RootDeviceName; //: Ptr32 _UNICODE_STRING 0XB8
PUNICODE_STRING AssociatedMiniDriver; //: Ptr32 _NDIS_M_DRIVER_BLOCK 0XBC
PVOID BindingAdapter; //: Ptr32 _NDIS_MINIPORT_BLOCK 0XC0
// USHORT NameBuff; //0XC4
} MY_NDIS_PROTOCOL_BLOCK, *PMY_NDIS_PROTOCOL_BLOCK;
VOID
fake_NdisRegisterProtocol(
OUT PNDIS_HANDLE NdisProtocolHandle,
IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteris,
IN UINT CharacteristicsLength
)
{
KIRQL OldIrql;
PMY_NDIS_PROTOCOL_BLOCK p_protocol;
ULONG size;
//加一引用计数
MmLockPagableSectionByHandle((PVOID)(g_pkg+0x2c));
MmLockPagableSectionByHandle((PVOID)(g_pkg+0xc));
//主体功能代码
size = 0x6c;
p_protocol = (PMY_NDIS_PROTOCOL_BLOCK)ExAllocatePoolWithTag(NonPagedPool,
ProtocolCharacteris->Name.Length + 0xC6,
'bpDN');
RtlZeroMemory(&p_protocol->ProtocolCharacteristics,
ProtocolCharacteris->Name.Length + size);
RtlCopyMemory(&(p_protocol->ProtocolCharacteristics),
ProtocolCharacteris,
size);
//Upcase协议名
p_protocol->ProtocolCharacteristics.Name.Buffer = (PVOID)((ULONG)p_protocol+0xc4);
RtlUpcaseUnicodeString(&p_protocol->ProtocolCharacteristics.Name,
&ProtocolCharacteris->Name,
FALSE);
/*
*开始设置p_protocol结构中的内容
*/
p_protocol->OpenQueue = NULL;
//ndisInitializeRef的实现
p_protocol->Ref.Closing = 0;
p_protocol->Ref.ReferenceCount = 1;
KeInitializeSpinLock(&p_protocol->Ref.SpinLock);
//
KeInitializeMutex(&p_protocol->Mutex, 0xFFFF);
//继续设置,接入WorkQueue链表中
p_protocol->WorkItem.WorkerRoutine = g_ndisCheckProtocolBindings;
p_protocol->WorkItem.Parameter = p_protocol;
p_protocol->WorkItem.List.Flink = NULL;
KeInsertQueue(g_ndisWorkerQueue, &(p_protocol->WorkItem));
//插入protocol链表中
KeAcquireSpinLock(g_ndisProtocolListLock, &OldIrql);
p_protocol->NextProtocol = *(ULONG*)g_ndisProtocolList;
*(ULONG*)g_ndisProtocolList = p_protocol;
KeReleaseSpinLock(g_ndisProtocolListLock, OldIrql);
ObReferenceObject(g_ndisDriverObject);
//ndisReferenceRef的实现
KeAcquireSpinLock(p_protocol->Ref.SpinLock, &OldIrql);
if (p_protocol->Ref.Closing != 0) {
//NOTHING
} else {
p_protocol->Ref.ReferenceCount++;
if ( p_protocol->Ref.ReferenceCount == 0 ) {
p_protocol->Ref.ReferenceCount = p_protocol->Ref.ReferenceCount || 0xffff;
}
}
KeReleaseSpinLock(p_protocol->Ref.SpinLock, OldIrql);
//实现完毕
//返回句柄
NdisProtocolHandle = p_protocol;
//对引用计数减一
MmUnlockPagableImageSection((PVOID)(g_pkg+0x2c));
return;
}XPSP3下的逆向代码。 土木系的啊?汗.
造桥造房子.........编程还这么牛,哈哈.
专门编程系的估计又是别的技术牛了{:soso_e113:} 本帖最后由 ywledoc 于 2011-7-6 01:05 编辑
马大哈 发表于 2011-7-5 22:27 static/image/common/back.gif
土木系的啊?汗.
造桥造房子.........编程还这么牛,哈哈.
土木极矬~~~
如果我是计算机系的,估计。。。计算机极矬~ {:soso__11495643595581228373_1:}.........我是学电算化会计专业的..... 马大哈 发表于 2011-7-6 01:32 static/image/common/back.gif
.........我是学电算化会计专业的.....
会计美女多!!! 网络的东西不懂啊,要恶补。。。
下学期有计算机网络的课程。。。
另外这么多非计算机系的都学编程了,强烈感觉你们怎么都跟学编程的抢饭碗!!! Tesla.Angela 发表于 2011-7-6 08:29 static/image/common/back.gif
网络的东西不懂啊,要恶补。。。
下学期有计算机网络的课程。。。
另外这么多非计算机系的都学编程了,强 ...
其实吧,感觉,计算机系的,没几个想干计算机的。。。。 naylon 发表于 2011-7-6 23:54 static/image/common/back.gif
不是说不学计算机系很多计算机相关的职业不能干么?
的确好多招人都有这个限制-_- 所以好多公司要求学历,在中国那是傻的........除非那学历是硕士及以上. naylon 发表于 2011-7-6 23:54 static/image/common/back.gif
不是说不学计算机系很多计算机相关的职业不能干么?
这就要看招聘者的眼光了。 马大哈 发表于 2011-7-14 16:37 static/image/common/back.gif
所以好多公司要求学历,在中国那是傻的........除非那学历是硕士及以上.
这话说的,让我有点想考硕士。 有什么用的? 乔丹二世 发表于 2011-7-14 21:23 static/image/common/back.gif
有什么用的?
看到二世的回复,我为什么觉得有点虚啊。
用处不大。逆出来看看内部操作的。 Tesla.Angela 发表于 2011-7-14 17:10 static/image/common/back.gif
这就要看招聘者的眼光了。
除非能力非常出众,不然首要考虑学位。
页:
[1]