找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 12721|回复: 13

NdisRegisterProtocol---code

 火... [复制链接]

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-7-5 16:46:37 | 显示全部楼层 |阅读模式
本帖最后由 ywledoc 于 2011-7-5 16:49 编辑

突然发现自己潜水+灌水好久了~土木男真是悲剧~配筋算啊算,桥梁受力算啊算~考了一个星期,算了三个星期~
NdisRegisterProtocol的内部代码。以前放过一份别人逆的,后来自己动手发现不准确,略加修改。
代码如下:
  1. #include <ndis.h>
  2. #include <windef.h>
  3. #include <wdm.h>
  4. #include "global.h"
  5. #include "regprotocol.h"

  6. LONG KeInsertQueue(
  7.         PVOID Queue,
  8.         PLIST_ENTRY Entry
  9. );

  10. typedef struct{
  11.         PVOID                        OpenQueue;        //: Ptr32 _NDIS_OPEN_BLOCK 0X00
  12.         REFERENCE                Ref;              //: _REFERENCE 0X04
  13.         PKEVENT                        DeregEvent;       //: Ptr32 _KEVENT 0X0C
  14.         PNDIS_PROTOCOL_BLOCK        NextProtocol;     //: Ptr32 _NDIS_PROTOCOL_BLOCK 0X10
  15.         NDIS50_PROTOCOL_CHARACTERISTICS        ProtocolCharacteristics; //: _NDIS50_PROTOCOL_CHARACTERISTICS 0X14
  16.         WORK_QUEUE_ITEM                WorkItem;         //: _WORK_QUEUE_ITEM 0X80
  17.         KMUTANT                        Mutex;            //: _KMUTANT 0X90
  18.         ULONG                        MutexOwner;       //: Uint4B 0XB0
  19.         PUNICODE_STRING                BindDeviceName;   //: Ptr32 _UNICODE_STRING 0XB4
  20.         PUNICODE_STRING                RootDeviceName;   //: Ptr32 _UNICODE_STRING 0XB8
  21.         PUNICODE_STRING                AssociatedMiniDriver; //: Ptr32 _NDIS_M_DRIVER_BLOCK 0XBC
  22.         PVOID                        BindingAdapter;   //: Ptr32 _NDIS_MINIPORT_BLOCK 0XC0
  23. //        USHORT                        NameBuff[Characteristics->Name.Length+2]; //0XC4
  24. } MY_NDIS_PROTOCOL_BLOCK, *PMY_NDIS_PROTOCOL_BLOCK;


  25. VOID
  26. fake_NdisRegisterProtocol(
  27.       OUT PNDIS_HANDLE NdisProtocolHandle,
  28.       IN PNDIS_PROTOCOL_CHARACTERISTICS ProtocolCharacteris,
  29.       IN UINT CharacteristicsLength
  30.       )
  31. {
  32.         KIRQL                        OldIrql;
  33.         PMY_NDIS_PROTOCOL_BLOCK        p_protocol;
  34.         ULONG                        size;
  35.        
  36.        
  37.         //加一引用计数
  38.         MmLockPagableSectionByHandle((PVOID)(g_pkg+0x2c));
  39.         MmLockPagableSectionByHandle((PVOID)(g_pkg+0xc));
  40.        
  41.         //主体功能代码
  42.         size = 0x6c;
  43.         p_protocol = (PMY_NDIS_PROTOCOL_BLOCK)ExAllocatePoolWithTag(NonPagedPool,
  44.                                                 ProtocolCharacteris->Name.Length + 0xC6,
  45.                                                 'bpDN');
  46.         RtlZeroMemory(&p_protocol->ProtocolCharacteristics,
  47.                         ProtocolCharacteris->Name.Length + size);       
  48.         RtlCopyMemory(&(p_protocol->ProtocolCharacteristics),
  49.                         ProtocolCharacteris,
  50.                         size);
  51.        
  52.         //Upcase协议名
  53.         p_protocol->ProtocolCharacteristics.Name.Buffer = (PVOID)((ULONG)p_protocol+0xc4);
  54.         RtlUpcaseUnicodeString(&p_protocol->ProtocolCharacteristics.Name,
  55.                                         &ProtocolCharacteris->Name,
  56.                                         FALSE);
  57.        
  58.         /*
  59.         *开始设置p_protocol结构中的内容
  60.         */
  61.         p_protocol->OpenQueue = NULL;
  62.        
  63.         //ndisInitializeRef的实现
  64.         p_protocol->Ref.Closing = 0;
  65.         p_protocol->Ref.ReferenceCount = 1;
  66.         KeInitializeSpinLock(&p_protocol->Ref.SpinLock);
  67.        
  68.         //
  69.         KeInitializeMutex(&p_protocol->Mutex, 0xFFFF);
  70.        
  71.        
  72.         //继续设置,接入WorkQueue链表中
  73.         p_protocol->WorkItem.WorkerRoutine = g_ndisCheckProtocolBindings;
  74.         p_protocol->WorkItem.Parameter = p_protocol;
  75.         p_protocol->WorkItem.List.Flink = NULL;
  76.         KeInsertQueue(g_ndisWorkerQueue, &(p_protocol->WorkItem));
  77.        
  78.         //插入protocol链表中

  79.         KeAcquireSpinLock(g_ndisProtocolListLock, &OldIrql);
  80.        
  81.         p_protocol->NextProtocol = *(ULONG*)g_ndisProtocolList;
  82.         *(ULONG*)g_ndisProtocolList = p_protocol;
  83.                   
  84.         KeReleaseSpinLock(g_ndisProtocolListLock, OldIrql);
  85.         ObReferenceObject(g_ndisDriverObject);
  86.         //ndisReferenceRef的实现
  87.         KeAcquireSpinLock(p_protocol->Ref.SpinLock, &OldIrql);
  88.         if (p_protocol->Ref.Closing != 0) {
  89.                 //NOTHING
  90.         } else {
  91.                 p_protocol->Ref.ReferenceCount++;
  92.                 if ( p_protocol->Ref.ReferenceCount == 0 ) {
  93.                         p_protocol->Ref.ReferenceCount = p_protocol->Ref.ReferenceCount || 0xffff;
  94.                 }
  95.         }
  96.         KeReleaseSpinLock(p_protocol->Ref.SpinLock, OldIrql);
  97.         //实现完毕
  98.        
  99.         //返回句柄
  100.         NdisProtocolHandle = p_protocol;
  101.        
  102.         //对引用计数减一
  103.         MmUnlockPagableImageSection((PVOID)(g_pkg+0x2c));
  104.        
  105.         return;
  106. }
复制代码
XPSP3下的逆向代码。

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-7-5 22:27:21 | 显示全部楼层
土木系的啊?汗.

造桥造房子.........编程还这么牛,哈哈.

专门编程系的估计又是别的技术牛了{:soso_e113:}
我就是嗷嗷叫的老马了......

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-7-6 01:05:20 | 显示全部楼层
本帖最后由 ywledoc 于 2011-7-6 01:05 编辑
马大哈 发表于 2011-7-5 22:27
土木系的啊?汗.

造桥造房子.........编程还这么牛,哈哈.


土木极矬~~~
如果我是计算机系的,估计。。。计算机极矬~

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-7-6 01:32:58 | 显示全部楼层
{:soso__11495643595581228373_1:}.........我是学电算化会计专业的.....
我就是嗷嗷叫的老马了......

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-7-6 01:45:15 | 显示全部楼层
马大哈 发表于 2011-7-6 01:32
.........我是学电算化会计专业的.....

会计美女多!!!

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-7-6 08:29:41 | 显示全部楼层
网络的东西不懂啊,要恶补。。。
下学期有计算机网络的课程。。。
另外这么多非计算机系的都学编程了,强烈感觉你们怎么都跟学编程的抢饭碗!!!

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-7-6 12:11:54 | 显示全部楼层
Tesla.Angela 发表于 2011-7-6 08:29
网络的东西不懂啊,要恶补。。。
下学期有计算机网络的课程。。。
另外这么多非计算机系的都学编程了,强 ...

其实吧,感觉,计算机系的,没几个想干计算机的。。。。

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-7-7 11:22:30 | 显示全部楼层
naylon 发表于 2011-7-6 23:54
不是说不学计算机系很多计算机相关的职业不能干么?

的确好多招人都有这个限制-_-

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-7-14 16:37:48 | 显示全部楼层
所以好多公司要求学历,在中国那是傻的........除非那学历是硕士及以上.
我就是嗷嗷叫的老马了......

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-7-14 17:10:07 | 显示全部楼层
naylon 发表于 2011-7-6 23:54
不是说不学计算机系很多计算机相关的职业不能干么?

这就要看招聘者的眼光了。

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-7-14 20:57:56 | 显示全部楼层
马大哈 发表于 2011-7-14 16:37
所以好多公司要求学历,在中国那是傻的........除非那学历是硕士及以上.

这话说的,让我有点想考硕士。

280

主题

203

回帖

0

精华

版主

积分
1808
发表于 2011-7-14 21:23:15 | 显示全部楼层
有什么用的?

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-7-14 23:01:48 | 显示全部楼层
乔丹二世 发表于 2011-7-14 21:23
有什么用的?

看到二世的回复,我为什么觉得有点虚啊。
用处不大。逆出来看看内部操作的。

47

主题

265

回帖

8

精华

核心会员

积分
10349
 楼主| 发表于 2011-7-14 23:02:21 | 显示全部楼层
Tesla.Angela 发表于 2011-7-14 17:10
这就要看招聘者的眼光了。

除非能力非常出众,不然首要考虑学位。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表