TransactionNotification逆向与分析

在MSDN中有这样一句话,我们尝试在二进制的角度理解一下

TransactionNotification逆向与分析

TransactionNotification逆向与分析

          

KResourcesManger的结构在+0x098有一个NotificationQueue,按照道理来说就是这个QUEUE了,注意KQUEU的结构是这样,真正的数据在EntryListeHead组织的链表中。

TransactionNotification逆向与分析

在tm.sys模块中定位到一个名为TmpGetNotificationResourceManager的函数队NotificationQueue进行了操作,逆向整理一下伪代码可以发现它的主要逻辑就是从NotificationQueue中取出队首的元素,并把它传入TmpCaptureOrRequeueNotification中    

TransactionNotification逆向与分析

          

进入到TmpCaptureOrRequeueNotification中可以发现最主要的逻辑是一个memmove操作。逻辑是将qentry_p结构体中的TranscationNotification给复制到了传进来的地址中    

TransactionNotification逆向与分析

经过对qentry_p结构体的创建过程进行逆向,可以确定其结构体大致是这样。

TransactionNotification逆向与分析

TransactionNotification逆向与分析

          

也就是说当Enlistment执行PrepareComplete,CommitComplete等函数发生状态改变时,KTM会将FullNotification入队到ResourceManager的NotificationQueue中,在我们通过TmpGetNotificationResourceManager等函数查看ResourceManger的Notification时,会将Queue中的队首元素出队    

整个过程如下所示,在Enlisment创建成功后,KTM便已经在QUEUE中入队了三个元素,即三个Notification

TransactionNotification逆向与分析

TransactionNotification逆向与分析

在我们通过TmpGetNotificationResourceManager查看ResourceManger的Notification时发生出队操作    

TransactionNotification逆向与分析

TransactionNotification逆向与分析    

原文始发于微信公众号(3072):TransactionNotification逆向与分析

版权声明:admin 发表于 2024年10月26日 下午8:37。
转载请注明:TransactionNotification逆向与分析 | CTF导航

相关文章