首页
社区
课程
招聘
[讨论]为啥枚举并循环挂起线程后再恢复 有些进程会挂掉?
发表于: 2014-5-27 15:04 5891

[讨论]为啥枚举并循环挂起线程后再恢复 有些进程会挂掉?

2014-5-27 15:04
5891
前几天看了 装逼兄 的 reload and run  game.dll 的帖子里v大的方法  然后发现这几个问题
1:有些进程在触发页异常后没进VEH就死掉了  难道win7下veh的优先级不是除调试器外最高的?
2:在能正常进入veh的进程里 如果先附加OD在注册VEH  则VEH函数能正常运行并且能被OD断下 反之则进程崩溃.......
3:无论在远线程 还是veh处理函数 里 只要使用OutPutDebugString或CString相关函数 进程直接死掉.....
最后发现  循环挂起线程后 再恢复 有些进程就直接死掉了 比如winrar和notepad++这么玩就没问题  但是像有道词典之类的就不行 直接就没响应了

这是我的挂起线程的代码 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
typedef DWORD (WINAPI *NtSuspendThread)(HANDLE hThread,OUT PULONG PreviousSuspendCount OPTIONAL);
 
typedef DWORD (WINAPI *NtResumeThread)(HANDLE hThread,OUT PULONG PreviousSuspendCount OPTIONAL);
 
int i=0;
DWORD MayId = GetCurrentThreadId();
HANDLE hThread[1024] = {0};
    NtResumeThread MyResThread = (NtResumeThread)GetProcAddress(GetModuleHandle(L"ntdll.dll"),"NtResumeThread");
    NtSuspendThread MySusThread = (NtSuspendThread)GetProcAddress(GetModuleHandle(L"ntdll.dll"),"NtSuspendThread");
 
NTQUERYSYSTEMINFORMATION NtQSIM = (NTQUERYSYSTEMINFORMATION)GetProcAddress(GetModuleHandle(L"ntdll.dll"),"ZwQuerySystemInformation");
 
    status = NtQSIM(SystemProcessInformation,NULL,0,&retlen);
    pbuf = VirtualAlloc(NULL,retlen,MEM_COMMIT,PAGE_READWRITE);
    if(pbuf == NULL)
        return FALSE;
 
    truelen = retlen;
    status= NtQSIM(SystemProcessInformation,pbuf,truelen,&retlen);      //枚举进程线程
    buf=pbuf;
    IsBreak = FALSE;
     
    do
    {
        pSysProcess=(PSYSTEM_PROCESSES)buf;
        if(pSysProcess->ProcessId == GetCurrentProcessId())
        {
            pSysThread=pSysProcess->Threads;
            for ( i=0;i<pSysProcess->ThreadCount;i++)
            {
                if((DWORD)pSysThread->ClientID.UniqueThread != MayId)   //不是当前线程
                {
                     
                    hThread[i] = OpenThread(THREAD_ALL_ACCESS,FALSE,(DWORD)pSysThread->ClientID.UniqueThread);
                    MySusThread(hThread[i],NULL);
                    pSysThread++;
                }
                 
            }
            IsBreak = TRUE;      //这里是控制外面的循环是否退出 不然找到了还继续循环浪费时间
        }
         
 
        if (pSysProcess->NextEntryDelta==0 || IsBreak)
        {
            break;
        }
        buf = (PVOID)((DWORD)buf + pSysProcess->NextEntryDelta);
    } while (1);
 
    VirtualFree(pbuf,truelen,NULL);
 
 
    for(int j=0;j <= i;j++)
    {
        MyResThread(hThread[j],NULL);
        CloseHandle(hThread[j]);
    }
    

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费
支持
分享
最新回复 (8)
雪    币: 68
活跃值: (330)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
为啥不贴其他代码
2014-5-27 15:55
0
雪    币: 74
活跃值: (363)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
其他无非注册veh 复制module 设置virtualprotect  咱试过了  吧上面代码注释掉就可以正常了 甚至吧上面代码单独那出来用都不正常.......
2014-5-27 16:01
0
雪    币: 68
活跃值: (330)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
i值你觉得会正常吗?pSysThread++;是当前线程不++?这里会不会死?为什么要自己这样写 大牛们的代码不好?我很懒呵呵
2014-5-27 16:08
0
雪    币: 74
活跃值: (363)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
真心不明白你的什么意思  难道还有现成的注入代码?V大那只贴了思路而已  本来我用Thread32frist  结果调试发现没效果  就照着网上一段  枚举线程   挂起线程这个是在枚举线程上改的  除了挂起外没加其他地方
而且 在winrar上测试是没问题的
2014-5-27 17:06
0
雪    币: 68
活跃值: (330)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
for ( i=0;i<pSysProcess->ThreadCount;i++)
      {
        if((DWORD)pSysThread->ClientID.UniqueThread != MayId)   //不是当前线程
        {
         
          hThread[i] = OpenThread(THREAD_ALL_ACCESS,FALSE,(DWORD)pSysThread->ClientID.UniqueThread);
          MySusThread(hThread[i],NULL);
          pSysThread++;//如果是当前线程?你就不++?那不是一直 在当前线程循环到结束
        }
        
      }

  for(int j=0;j <= i;j++)
  {
    MyResThread(hThread[j],NULL);//hThread[j] == NULL? (因为你上面没写好 这里可能是NULL)
    CloseHandle(hThread[j]);
  }

其实我也不确定是不是这些原因导致
2014-5-27 17:13
0
雪    币: 74
活跃值: (363)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
哦 上面那个是我疏忽了....谢谢了
再去调试看看  不过有些进程就能正常 好奇怪?
2014-5-27 17:44
0
雪    币: 114
活跃值: (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这是集体fuck 11的节奏吗~~~
2014-5-27 17:58
0
雪    币: 74
活跃值: (363)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不玩dota类的说  拿来试试别的东西 恩
2014-5-27 18:15
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册