上周和这周的工作都较忙,整天很困,但是我一到周末就整个人轻松起来了。
这一周来,一直在与某种操蛋需求进行战斗:
0.自建ObjectType(ObCreateObjectType)
1.自建私有HandleTable(ExCreateHandleTable)
2.往私有HandleTable里插入某些私有Object的Handle(ExCreateHandle)
3.查询Handle的时候需要从私有handleTable把Object找出来(ExMapHandleToPointer)
4.某些时候需要遍历私有HandleTable找寻特殊的object对应的Handle(ExEnumHandleTable)
其实0,1,2,3都很容易实现,甚至非常容易弄好。对4一开始我也觉得很容易,但是后来发现自己太天真了
工作完成后在win7,winxp上跑的非常顺利,但是到了win8直接开始随机地址蓝屏。
调试发现是堆栈的问题....
在win8之前的系统下:
EnumHandleTable的Callback形态是这样的:
typedef BOOLEAN (*EX_ENUMERATE_HANDLE_ROUTINE)(
IN PHANDLE_TABLE_ENTRY HandleTableEntry,
IN HANDLE Handle,
IN PVOID EnumParameter
);
要继续枚举就返回FALSE,返回TRUE则停止枚举
经过惨烈的客户蓝屏事件,不难发现Win8下的样子不是这样的,它的参数变了
typedef BOOLEAN (*EX_ENUMERATE_HANDLE_ROUTINE)(
IN PHANDLE_TABLE HandleTable,
INOUT PHANDLE_TABLE_ENTRY HandleTableEntry,
IN HANDLE Handle,
IN PVOID Context
);
PS:
求捐助,求赞助,求投资,欢迎联系QQ:86879759
欲购买 AntiGameProtect v3.0 完整代码 也欢迎联系。
qq技术扯淡群1:171797360
qq技术扯淡群2:1748876
yy技术扯淡频道:80252844
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)