请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

梦织未来

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 464|回复: 4

[原创] zzzRecalcThreadAttachment纯逆向

[复制链接]

升级   100%

217

主题

64

精华

1447

积分
发表于 2016-10-26 01:37:24 | 显示全部楼层 |阅读模式
梦织未来(www.mengwuji.net)

作者:mengwuji

今天又晚睡了哎,主要11点的时候想逆向个函数再睡,本来要说半小时就差不多啦没想用了两个多小时!!!没错你没看错...跪Orz

函数逻辑嘛比较绕,ida流程分支有点儿乱,差点儿把我绕懵圈啦...好吧附上代码后面备用。



  1. typedef struct _ATTACH_INFO
  2. {
  3.         struct _ATTACH_INFO* Next;
  4.         tagTHREADINFO*        pAttach;
  5.         tagTHREADINFO*        pAttachTo;
  6. }ATTACH_INFO, *PATTACH_INFO;

  7. void zzzRecalcThreadAttachment()
  8. {
  9.         tagDESKTOP* pDesktop;
  10.         PLIST_ENTRY pList1,pList2;
  11.         BOOL IsContinue = FALSE;

  12.         //得到桌面管理器指针
  13.         pDesktop = gptiCurrent->rpdesk;

  14.         //pDesktop->PtiList中的节点是和tagTHREADINFO的PtiLink连接的
  15.         pList1 = pDesktop->PtiList.Flink;
  16.         while (pList1 != &pDesktop->PtiList)
  17.         {
  18.                 tagTHREADINFO* pAssistThreadInfo1 = CONTAINING_RECORD(pList1, tagTHREADINFO, PtiLink);

  19.                 if (pAssistThreadInfo1->pqAttach == NULL)
  20.                 {
  21.                         if (pAssistThreadInfo1->pq->cThreads <= 1)
  22.                         {
  23.                                 pAssistThreadInfo1->pqAttach = pAssistThreadInfo1->pq;
  24.                         }
  25.                         else
  26.                         {
  27.                                 //申请一个新的队列对象
  28.                                 pAssistThreadInfo1->pqAttach = AllocQueue(0, 0);
  29.                                 if (pAssistThreadInfo1->pqAttach == NULL)
  30.                                 {
  31.                                         return ;
  32.                                 }

  33.                                 pAssistThreadInfo1->pqAttach->cThreads++;
  34.                         }

  35.                         //未知变量
  36.                         gdwDeferWinEvent++;


  37.                         do
  38.                         {
  39.                                 IsContinue = FALSE;

  40.                                 pList2 = gptiCurrent->rpdesk->PtiList.Flink;
  41.                                 while (pList2 != &gptiCurrent->rpdesk->PtiList)
  42.                                 {
  43.                                         tagTHREADINFO* pAssistThreadInfo2 = CONTAINING_RECORD(pList2, tagTHREADINFO, PtiLink);

  44.                                         if (pAssistThreadInfo2->pqAttach == pAssistThreadInfo1->pqAttach)
  45.                                         {
  46.                                                 PATTACH_INFO pAttachInfo = gpai;
  47.                                                 while (pAttachInfo)
  48.                                                 {
  49.                                                         tagTHREADINFO* pAttachThreadInfo = NULL;

  50.                                                         if (pAttachInfo->pAttach == pAssistThreadInfo2)
  51.                                                         {
  52.                                                                 pAttachThreadInfo = pAttachInfo->pAttachTo;
  53.                                                         }
  54.                                                         else if (pAttachInfo->pAttachTo == pAssistThreadInfo2)
  55.                                                         {
  56.                                                                 pAttachThreadInfo = pAttachInfo->pAttach;
  57.                                                         }
  58.                                                         else
  59.                                                         {
  60.                                                                 pAttachInfo = pAttachInfo->Next;
  61.                                                                 continue;
  62.                                                         }

  63.                                                         tagQ* pQ = pAttachThreadInfo->pqAttach;
  64.                                                         if (pQ != pAssistThreadInfo1->pqAttach)
  65.                                                         {
  66.                                                                 pAttachThreadInfo->pqAttach = pAssistThreadInfo1->pqAttach;
  67.                                                                 if (pQ != NULL)
  68.                                                                 {
  69.                                                                         //销毁!!!
  70.                                                                         zzzDestroyQueue(pQ);
  71.                                                                 }

  72.                                                                 pAttachThreadInfo->pqAttach->cThreads++;
  73.                                                                
  74.                                                                 IsContinue = TRUE;
  75.                                                         }

  76.                                                         pAttachInfo = pAttachInfo->Next;
  77.                                                 }
  78.                                         }

  79.                                         pList2 = pList2->Flink;
  80.                                 }

  81.                         } while (IsContinue);

  82.                         gdwDeferWinEvent--;

  83.                         if (gdwDeferWinEvent == 0 && gpPendingNotifies != 0)
  84.                         {
  85.                                 xxxFlushDeferredWindowEvents();
  86.                         }
  87.                 }

  88.                 pList1 = pList1->Flink;
  89.         }
  90. }
复制代码


不要问我做什么的函数!><

问我为甚逆向它?因为它会引发某uaf

也希望小伙伴们多关注下本人的淘宝店!点击进入----吃货快来点吧

睡觉!!!


回复

使用道具 举报

升级   100%

19

主题

11

精华

67

积分
发表于 2016-10-26 10:04:05 | 显示全部楼层
备用是什么意思
回复 支持 反对

使用道具 举报

升级   100%

217

主题

64

精华

1447

积分
 楼主| 发表于 2016-10-26 10:51:58 | 显示全部楼层
冠7 发表于 2016-10-26 10:04
备用是什么意思

意思就是我马上会用到
回复 支持 反对

使用道具 举报

升级   3.67%

18

主题

0

精华

211

积分
发表于 2016-10-26 11:27:36 | 显示全部楼层
厉害了word梦
回复 支持 反对

使用道具 举报

升级   0.33%

4

主题

1

精华

201

积分
发表于 2016-10-26 19:13:35 | 显示全部楼层
梦大真是V5,膜拜...
哎...今天够累的,签到来了...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|mengwuji ( 粤ICP备13060035号-1 )  

GMT+8, 2017-5-27 16:08 , Processed in 0.232838 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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