哎哎,,查了几天资料了,找不到诶..~
 各位哥哥举手之劳,请解救我吧!
 
 以下是我这几天查资料总结的代码,OpenThread好使,但是ZwQueryInformationThread返回的StartAddr,却一直是0,
(注意,如果我不写StartAddr := 0; StartAddr的值不是0,. 应该是ZwQueryInformationThread未返回值~)请各位大侠大哥大姐帮帮我..下面这段是我的代码,请帮我看一下错在哪里,,或者给我一段正确的,可运行的delphi代码~~~~
在此谢过!
var
  hLib         : HModule;
  hThreadHand  : THandle;
  StartAddr    : pointer;
  tmp          : DWORD;
  YtoBeAbout   : ThreadAbout;
begin
  if EnableDebugPriv then
  begin
    hLib := LoadLibrary('kernel32.dll');
    @OpenThread := GetProcAddress(hLib, 'OpenThread');
    hThreadHand := OpenThread($2, False, ThreadId);
    hLib := LoadLibrary('ntdll.dll');
    @ZwQueryInformationThread := GetProcAddress(hLib, 'ZwQueryInformationThread');
    StartAddr := 0;
    ZwQueryInformationThread(hThreadHand,ThreadQuerySetWin32StartAddress,@StartAddr, SizeOf(StartAddr),@tmp);
    YtoBeAbout.hThread := hThreadHand;
    YtoBeAbout.StartAddr := integer(StartAddr);
    result := YtoBeAbout;
    CloseHandle(hThreadHand);
    FreeLibrary(hLib);
  end;
end;

解决方案 »

  1.   

    原贴(http://topic.csdn.net/u/20081102/16/8eefa466-ff2f-4984-a6ae-369b789f83e5.html)已经回复.部分线程的起始地址可能无法取得,或者确实为0.
      

  2.   

    (注意,如果我不写StartAddr := 0; StartAddr的值不是0,. 应该是ZwQueryInformationThread未返回值~)  Sorry 我遇到的问题不是 StartAddr = 0     而是StartAddr 非正常值 4000多万的一个数 ~ 感谢你的代码! 看的出来, 确实浪费你不少时间... 我去测试一下代码..有结论立刻结贴 谢谢了~
      

  3.   

     确实有点汗颜... 代码运行结果如下:无法获得线程        0 的相关信息,错误代码为 87
    无法获得线程        0 的相关信息,错误代码为 87
    无法获得线程        8 的相关信息,错误代码为 5
    无法获得线程       10 的相关信息,错误代码为 5
    无法获得线程       14 的相关信息,错误代码为 5
    无法获得线程       18 的相关信息,错误代码为 5
    无法获得线程       1C 的相关信息,错误代码为 5
    无法获得线程       20 的相关信息,错误代码为 5
    无法获得线程       24 的相关信息,错误代码为 5
    无法获得线程       28 的相关信息,错误代码为 5
    无法获得线程       2C 的相关信息,错误代码为 5
    无法获得线程       30 的相关信息,错误代码为 5
    无法获得线程       34 的相关信息,错误代码为 5
    无法获得线程       38 的相关信息,错误代码为 5
    无法获得线程       3C 的相关信息,错误代码为 5
    无法获得线程       40 的相关信息,错误代码为 5
    无法获得线程       44 的相关信息,错误代码为 5
    无法获得线程       48 的相关信息,错误代码为 5
    无法获得线程       4C 的相关信息,错误代码为 5
    无法获得线程       50 的相关信息,错误代码为 5
    无法获得线程       54 的相关信息,错误代码为 5
    无法获得线程       58 的相关信息,错误代码为 5
    无法获得线程       5C 的相关信息,错误代码为 5
    无法获得线程       60 的相关信息,错误代码为 5
    无法获得线程       64 的相关信息,错误代码为 5
    无法获得线程       68 的相关信息,错误代码为 5
    无法获得线程       6C 的相关信息,错误代码为 5
    无法获得线程       74 的相关信息,错误代码为 5
    无法获得线程       84 的相关信息,错误代码为 5
    无法获得线程       88 的相关信息,错误代码为 5
    无法获得线程       8C 的相关信息,错误代码为 5
    无法获得线程       90 的相关信息,错误代码为 5
    无法获得线程       BC 的相关信息,错误代码为 5
    无法获得线程       C8 的相关信息,错误代码为 5
    无法获得线程       CC 的相关信息,错误代码为 5
    无法获得线程       D0 的相关信息,错误代码为 5
    无法获得线程      164 的相关信息,错误代码为 5
    无法获得线程      168 的相关信息,错误代码为 5
    无法获得线程      16C 的相关信息,错误代码为 5
    无法获得线程      170 的相关信息,错误代码为 5
    无法获得线程      174 的相关信息,错误代码为 5
    无法获得线程      1A8 的相关信息,错误代码为 5
    无法获得线程      1AC 的相关信息,错误代码为 5
    无法获得线程      1B0 的相关信息,错误代码为 5
    无法获得线程      1B4 的相关信息,错误代码为 5
    无法获得线程      1BC 的相关信息,错误代码为 5
    无法获得线程      284 的相关信息,错误代码为 5
    无法获得线程      28C 的相关信息,错误代码为 5
    无法获得线程      290 的相关信息,错误代码为 5
    无法获得线程      2B8 的相关信息,错误代码为 5
    无法获得线程      768 的相关信息,错误代码为 5
    无法获得线程      7F8 的相关信息,错误代码为 5
    无法获得线程      7FC 的相关信息,错误代码为 5
    无法获得线程       78 的相关信息,错误代码为 5
    无法获得线程       7C 的相关信息,错误代码为 5
    无法获得线程       A0 的相关信息,错误代码为 5
    无法获得线程       F8 的相关信息,错误代码为 5
    无法获得线程       FC 的相关信息,错误代码为 5
    无法获得线程      100 的相关信息,错误代码为 5
    无法获得线程      504 的相关信息,错误代码为 5
    无法获得线程      50C 的相关信息,错误代码为 5
    无法获得线程      52C 的相关信息,错误代码为 5
    无法获得线程      530 的相关信息,错误代码为 5
    无法获得线程      538 的相关信息,错误代码为 5
    无法获得线程      560 的相关信息,错误代码为 5
    无法获得线程      564 的相关信息,错误代码为 5
    无法获得线程      15C 的相关信息,错误代码为 5
    无法获得线程      2C0 的相关信息,错误代码为 5
    无法获得线程      2C4 的相关信息,错误代码为 5
    无法获得线程      2C8 的相关信息,错误代码为 5
    无法获得线程      2F4 的相关信息,错误代码为 5
    无法获得线程      2F8 的相关信息,错误代码为 5
    无法获得线程      2FC 的相关信息,错误代码为 5
    无法获得线程      300 的相关信息,错误代码为 5
    无法获得线程      30C 的相关信息,错误代码为 5
    无法获得线程      310 的相关信息,错误代码为 5
    无法获得线程      314 的相关信息,错误代码为 5
    无法获得线程      344 的相关信息,错误代码为 5
    无法获得线程      348 的相关信息,错误代码为 5
    无法获得线程      1A0 的相关信息,错误代码为 5
    无法获得线程      690 的相关信息,错误代码为 5
    无法获得线程      308 的相关信息,错误代码为 5
    无法获得线程      31C 的相关信息,错误代码为 5
    无法获得线程      324 的相关信息,错误代码为 5
    无法获得线程      328 的相关信息,错误代码为 5
    无法获得线程      32C 的相关信息,错误代码为 5
    无法获得线程      338 的相关信息,错误代码为 5
    无法获得线程      410 的相关信息,错误代码为 5
    无法获得线程      414 的相关信息,错误代码为 5
    无法获得线程      418 的相关信息,错误代码为 5
    无法获得线程      558 的相关信息,错误代码为 5
    无法获得线程      55C 的相关信息,错误代码为 5
    无法获得线程      588 的相关信息,错误代码为 5
    无法获得线程      6D4 的相关信息,错误代码为 5
    无法获得线程      6E4 的相关信息,错误代码为 5
    无法获得线程       B4 的相关信息,错误代码为 5
    无法获得线程       E0 的相关信息,错误代码为 5
    无法获得线程       DC 的相关信息,错误代码为 5
    无法获得线程      4B8 的相关信息,错误代码为 5
    无法获得线程      34C 的相关信息,错误代码为 5
    无法获得线程      350 的相关信息,错误代码为 5
    无法获得线程      354 的相关信息,错误代码为 5
    无法获得线程      3AC 的相关信息,错误代码为 5
    无法获得线程      3C8 的相关信息,错误代码为 5
    无法获得线程      3D0 的相关信息,错误代码为 5
    无法获得线程      3E8 的相关信息,错误代码为 5
    无法获得线程      420 的相关信息,错误代码为 5
    无法获得线程      4A4 的相关信息,错误代码为 5
    无法获得线程      4A8 的相关信息,错误代码为 5
    无法获得线程      550 的相关信息,错误代码为 5
    无法获得线程      1B8 的相关信息,错误代码为 5
    无法获得线程      468 的相关信息,错误代码为 5
    无法获得线程      470 的相关信息,错误代码为 5
    无法获得线程      474 的相关信息,错误代码为 5
    无法获得线程      358 的相关信息,错误代码为 5
    无法获得线程      35C 的相关信息,错误代码为 5
    无法获得线程      360 的相关信息,错误代码为 5
    无法获得线程      364 的相关信息,错误代码为 5
    无法获得线程      368 的相关信息,错误代码为 5
    无法获得线程      370 的相关信息,错误代码为 5
    无法获得线程      388 的相关信息,错误代码为 5
    无法获得线程      38C 的相关信息,错误代码为 5
    无法获得线程      390 的相关信息,错误代码为 5
    无法获得线程      39C 的相关信息,错误代码为 5
    无法获得线程      3A8 的相关信息,错误代码为 5
    无法获得线程      3B8 的相关信息,错误代码为 5
    无法获得线程      53C 的相关信息,错误代码为 5
    无法获得线程      1D0 的相关信息,错误代码为 5
    无法获得线程      220 的相关信息,错误代码为 5
    无法获得线程      224 的相关信息,错误代码为 5
    无法获得线程      228 的相关信息,错误代码为 5
    无法获得线程      158 的相关信息,错误代码为 5
    无法获得线程      3E0 的相关信息,错误代码为 5
    无法获得线程      400 的相关信息,错误代码为 5
    无法获得线程      404 的相关信息,错误代码为 5
    无法获得线程      408 的相关信息,错误代码为 5
    无法获得线程      49C 的相关信息,错误代码为 5
    无法获得线程      4FC 的相关信息,错误代码为 5
    无法获得线程      5B4 的相关信息,错误代码为 5
    无法获得线程      640 的相关信息,错误代码为 5
    无法获得线程      648 的相关信息,错误代码为 5
    无法获得线程      644 的相关信息,错误代码为 5
    无法获得线程      64C 的相关信息,错误代码为 5
    无法获得线程      618 的相关信息,错误代码为 5
    无法获得线程      650 的相关信息,错误代码为 5
    无法获得线程      67C 的相关信息,错误代码为 5
    无法获得线程      140 的相关信息,错误代码为 5
    无法获得线程      42C 的相关信息,错误代码为 5
    无法获得线程      430 的相关信息,错误代码为 5
    无法获得线程      434 的相关信息,错误代码为 5
    无法获得线程      438 的相关信息,错误代码为 5
    无法获得线程      43C 的相关信息,错误代码为 5
    无法获得线程      448 的相关信息,错误代码为 5
    无法获得线程      7B4 的相关信息,错误代码为 5
    无法获得线程      19C 的相关信息,错误代码为 5
    无法获得线程      1E4 的相关信息,错误代码为 5
    无法获得线程      71C 的相关信息,错误代码为 5
    无法获得线程      3BC 的相关信息,错误代码为 5
    无法获得线程      484 的相关信息,错误代码为 5
    无法获得线程      488 的相关信息,错误代码为 5
    无法获得线程      48C 的相关信息,错误代码为 5
    无法获得线程      490 的相关信息,错误代码为 5
    无法获得线程      4B4 的相关信息,错误代码为 5
    无法获得线程      4D8 的相关信息,错误代码为 5
    无法获得线程      500 的相关信息,错误代码为 5
    无法获得线程      5A4 的相关信息,错误代码为 5
    无法获得线程      5A8 的相关信息,错误代码为 5
    无法获得线程      5B0 的相关信息,错误代码为 5
    无法获得线程      5B8 的相关信息,错误代码为 5
    无法获得线程      5C8 的相关信息,错误代码为 5
    无法获得线程      5CC 的相关信息,错误代码为 5
    无法获得线程      5D0 的相关信息,错误代码为 5
    无法获得线程      5D4 的相关信息,错误代码为 5
    无法获得线程      5D8 的相关信息,错误代码为 5
      

  4.   

    仔细检查...发觉
    thread := OpenThread($1fffff(*THREAD_ALL_ACCESS*),   FALSE,   dwThreadID);

    thread始终为0..
      

  5.   

    再测试结果..随便复制两段线程      308 所在进程ID为      304
    线程      308 所在进程映象为 \??\C:\windows\system32\winlogon.exe
    线程      308 可执行代码所在模块为 
    线程      324 的起始地址为 7C94798D
    线程      324 所在进程ID为      304
    线程      324 所在进程映象为 \??\C:\windows\system32\winlogon.exe
    线程      324 可执行代码所在模块为 \Device\HarddiskVolume1\WINDOWS\system32\ntdll.dll
    线程      328 的起始地址为 7C930760
    线程      328 所在进程ID为      304
    线程      328 所在进程映象为 \??\C:\windows\system32\winlogon.exe
    线程      328 可执行代码所在模块为 \Device\HarddiskVolume1\WINDOWS\system32\ntdll.dll结果已经完全正确了,, 进程ID:304,就是我要的winlogon.exe中的线程信息~,没办法阿,毒都往里注~~
    全是泪,,  代码稍稍有点问题,我改了一下,只需要在
      thread := OpenThread($1fffff(*THREAD_ALL_ACCESS*),   FALSE,   dwThreadID);
    前面加上 OpenProcessToken, LookupPrivilegeValue, AdjustTokenPrivileges 三个API组成的提权功能就可以了!泪阿~~~ 太感谢大哥赐教了, 你的举手之劳, 也许就是我一个月的奋斗!