查看原文
其他

扩充_ETHREAD结构

xiaofu 看雪学院 2019-05-26


在某些场景下,我想要系统的某些结构跟我自己的数据进行绑定。如map<EPROCESS process,uint64_t DebugPort>。但是在某些情况下map+lock并不适用。我希望扩充系统的这些结构,在分配这些结构体的时候多分配一部分出来来达到绑定的目的。

翻阅一下wrk,找到相关的地方:

ETHREAD:


EPROCESS:


可以看到调用ObCreateObject传入对应的结构体大小,即分配了对应的内存。但是在WIN10下,这个地方有少许改变,win10下仍然有ObCreateObject,

但是成了ObCreateObjectEx的封装,系统分配结构体的地方也变成了:


可以看到ObCreateObjectEx比 ObCreateObject在后面多了一个参数:


多的这个参数,是在 ObCreateObjectEx调用ObpAllocateObject所使用


回到前面,我们HOOK ObCreateObjectEx 判断ObjectType,来修改ObjectBodySize来达到扩充的目的。


先定义需要扩充的结构和一个flag,表明该线程是否经过扩充,因为在我们处理过后的创建的线程才会有扩充。除此之外,我们还需要记录原始结构体的大小,以便我们到时候获取扩展的数据。


接着,我们HOOK ObCreateObjectEx,在HOOK里面判断类型,和记录原始大小。


然后调试一下:


可以看到_ethread在我系统中的大小是0x8e0,然后测试一下,系统创建线程,结束线程都是正常的。

我们启动一个进程,看下它的线程是否正确扩充了:


附录,我的系统版本:



看雪ID:xiaofu

bbs.pediy.com/user-99882




本文由看雪论坛 xiaofu 原创

转载请注明来自看雪社区



热门技术文章推荐








戳原文,看看大家都是怎么说的?

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存