利用VB远线程注入技术实现键盘拦截的例子,无DLL

从网上搜集到的VB代码,用EXE方式实现了远程注入,不过在反病毒软件的保护下,有可能导致注入失败。转贴这个代码,仅供大家学习和参考。

一、窗口代码:

view plaincopy to clipboardprint?

  1. Option Explicit
  2. Private Sub cmdLock_Click()
  3. If LockKeyboard(True) Then
  4. cmdLock.Enabled = False
  5. cmdUnLock.Enabled = True
  6. End If
  7. End Sub
  8. Private Sub cmdUnLock_Click()
  9. If LockKeyboard(False) Then
  10. cmdLock.Enabled = True
  11. cmdUnLock.Enabled = False
  12. End If
  13. End Sub
  14. Private Sub Form_Load()
  15. Dim bIsLock As Boolean
  16. bIsLock = GetKeyboardState
  17. cmdLock.Enabled = Not bIsLock
  18. cmdUnLock.Enabled = bIsLock
  19. End Sub
  20. Option Explicit
  21. Private Sub cmdLock_Click()
  22. If LockKeyboard(True) Then
  23. cmdLock.Enabled = False
  24. cmdUnLock.Enabled = True
  25. End If
  26. End Sub
  27. Private Sub cmdUnLock_Click()
  28. If LockKeyboard(False) Then
  29. cmdLock.Enabled = True
  30. cmdUnLock.Enabled = False
  31. End If
  32. End Sub
  33. Private Sub Form_Load()
  34. Dim bIsLock As Boolean
  35. bIsLock = GetKeyboardState
  36. cmdLock.Enabled = Not bIsLock
  37. cmdUnLock.Enabled = bIsLock
  38. End Sub

二、模块代码:

view plaincopy to clipboardprint?

  1. Option Explicit
  2. '是否包含处理其它键盘消息,True表示处理.
  3. #Const INC_OTHER_KEY = True
  4. '注意,以下所有双版本的API均声明成了 UNICODE 版。 并且许多地方与VB的API浏览器生成的代码有所不同。
  5. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
  6. Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
  7. Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
  8. Private Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomW" (ByVal lpString As Long) As Integer
  9. Private Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal nAtom As Integer) As Integer
  10. Private Declare Function GlobalFindAtom Lib "kernel32" Alias "GlobalFindAtomW" (ByVal lpString As Long) As Integer
  11. Private Const TH32CS_SNAPPROCESS = 2
  12. Private Type PROCESSENTRY32W
  13. dwSize As Long
  14. cntUsage As Long
  15. h32ProcessID As Long
  16. th32DefaultHeapID As Long
  17. h32ModuleID As Long
  18. cntThreads As Long
  19. th32ParentProcessID As Long
  20. pcPriClassBase As Long
  21. dwFlags As Long
  22. szExeFile(1 To 260) As Integer
  23. End Type
  24. Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
  25. Private Declare Function Process32First Lib "kernel32" Alias "Process32FirstW" (ByVal hSnapshot As Long, lpPE As PROCESSENTRY32W) As Long
  26. Private Declare Function Process32Next Lib "kernel32" Alias "Process32NextW" (ByVal hSnapshot As Long, lpPE As PROCESSENTRY32W) As Long
  27. Private Declare Function lstrcmpi Lib "kernel32" Alias "lstrcmpiW" (lpString1 As Integer, ByVal lpString2 As Long) As Long
  28. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  29. Private Declare Function GetLastError Lib "kernel32" () As Long
  30. Private Type LUID
  31. lowpart As Long
  32. highpart As Long
  33. End Type
  34. Private Type LUID_AND_ATTRIBUTES
  35. pLuid As LUID
  36. Attributes As Long
  37. End Type
  38. Private Type TOKEN_PRIVILEGES
  39. PrivilegeCount As Long
  40. Privileges As LUID_AND_ATTRIBUTES
  41. End Type
  42. Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
  43. Private Const TOKEN_QUERY As Long = &H8&
  44. Private Const TOKEN_ADJUST_PRIVILEGES As Long = &H20&
  45. Private Const SE_PRIVILEGE_ENABLED As Long = &H2
  46. Private Const SE_DEBUG_NAME As String = "SeDebugPrivilege"
  47. Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
  48. Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
  49. Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueW" (ByVal lpSystemName As Long, ByVal lpName As Long, lpLuid As LUID) As Long
  50. Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, ByVal PrevState As Long, ByVal N As Long) As Long
  51. Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleW" (ByVal lpwModuleName As Long) As Long
  52. Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  53. Private Const MEM_COMMIT As Long = &H1000
  54. Private Const MEM_DECOMMIT As Long = &H4000
  55. Private Const PAGE_EXECUTE_READWRITE As Long = &H40
  56. Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal ProcessHandle As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
  57. Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal ProcessHandle As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
  58. Private Declare Function CreateRemoteThread Lib "kernel32" (ByVal hProcess As Long, ByVal lpThreadAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
  59. Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
  60. Private Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As Long, lpExitCode As Long) As Long
  61. #If INC_OTHER_KEY Then
  62. Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExW" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
  63. Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
  64. Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
  65. #End If
  66. Private Const ATOM_FLAG As String = "HookSysKey"
  67. Private Const SHELL_FALG As String = "Winlogon"
  68. Private Const SHELL_CODE_DWORDLEN = 317 '注入代码所占的双字数
  69. Private Const SHELL_CODE_LENGTH = (SHELL_CODE_DWORDLEN * 4) '字节数
  70. Private Const SHELL_FUNCOFFSET = &H8 '注入代码线程函数偏移量
  71. Private mlShellCode(SHELL_CODE_DWORDLEN - 1) As Long
  72. #If INC_OTHER_KEY Then
  73. Private m_lHookID As Long '键盘钩子句柄
  74. Private Type KBDLLHOOKSTRUCT
  75. vkCode As Long
  76. scanCode As Long
  77. flags As Long
  78. time As Long
  79. dwExtraInfo As Long
  80. End Type
  81. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  82. #End If
  83. '============================================
  84. ' 锁定/解锁键盘
  85. ' 参数:布尔型,真表示锁定
  86. ' 返回:布尔型, 真表示成功
  87. ' 注意:非 Ctrl+Alt+Del 键使用普通钩子技术,因此
  88. ' 程序在退出时注意要卸载钩子。
  89. '============================================
  90. Public Function LockKeyboard(ByVal bLock As Boolean) As Boolean
  91. Dim lResult As Long
  92. Dim lStrPtr As Long
  93. Dim iAtom As Integer
  94. lStrPtr = StrPtr(SHELL_FALG)
  95. iAtom = GlobalFindAtom(lStrPtr)
  96. If iAtom = 0 Then
  97. lResult = InsertAsmCode
  98. Debug.Assert lResult = 0
  99. If lResult Then Exit Function
  100. End If
  101. lStrPtr = StrPtr(ATOM_FLAG)
  102. iAtom = GlobalFindAtom(lStrPtr)
  103. If bLock Then
  104. #If INC_OTHER_KEY Then
  105. '强烈建议:使用了SetWindowsHookEx的话,请编译后再运行!
  106. m_lHookID = SetWindowsHookEx(13, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
  107. #End If
  108. If iAtom = 0 Then iAtom = GlobalAddAtom(lStrPtr)
  109. LockKeyboard = (iAtom <> 0)
  110. Debug.Assert LockKeyboard
  111. Else
  112. #If INC_OTHER_KEY Then
  113. If m_lHookID Then Call UnhookWindowsHookEx(m_lHookID)
  114. #End If
  115. If iAtom Then iAtom = GlobalDeleteAtom(iAtom)
  116. LockKeyboard = iAtom = 0
  117. End If
  118. End Function
  119. Public Function GetKeyboardState() As Boolean
  120. GetKeyboardState = GlobalFindAtom(StrPtr(ATOM_FLAG)) <> 0
  121. End Function
  122. #If INC_OTHER_KEY Then
  123. Private Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  124. Dim KBEvent As KBDLLHOOKSTRUCT
  125. If nCode >= 0 Then
  126. '在这里可以加入实际的过滤条件
  127. CopyMemory KBEvent, ByVal lParam, 20& 'sizeof KBDLLHOOKSTRUCT=20
  128. 'wParam = 消息,如WM_KEYDOWN, WM_KEYUP等
  129. Debug.Print Hex$(KBEvent.vkCode) 'VK_??? 定义的键码
  130. LowLevelKeyboardProc = 1 '1屏蔽,否则应调用CallNextHookEx
  131. Else
  132. LowLevelKeyboardProc = CallNextHookEx(m_lHookID, nCode, wParam, lParam)
  133. End If
  134. End Function
  135. #End If
  136. '----------------------------------------------
  137. ' 远程线程插入函数
  138. ' 功能:向 Winlogon 进程插入远程线程代码,并执行
  139. ' 返回:0表示成功,非0表示标准的系统错误代号
  140. '----------------------------------------------
  141. Private Function InsertAsmCode() As Long
  142. Const WINLOGON As String = "Winlogon.exe"
  143. Dim hProcess As Long '远端进程句柄
  144. Dim hPId As Long '远端进程ID
  145. Dim lResult As Long '一般返回变量
  146. Dim pToken As TOKEN_PRIVILEGES
  147. Dim hToken As Long
  148. Dim hRemoteThread As Long
  149. Dim hRemoteThreadID As Long
  150. Dim lDbResult(1) As Long
  151. Dim lRemoteAddr As Long
  152. '------------------------------------
  153. '取winlogon进程ID
  154. '------------------------------------
  155. hPId = GetProcessIdFromName(WINLOGON)
  156. If hPId = 0 Then
  157. InsertAsmCode = GetLastError
  158. Debug.Assert False
  159. Exit Function
  160. End If
  161. '------------------------------------
  162. '提升本进程权限,以取得对winlogon进程操作的许可
  163. '------------------------------------
  164. lResult = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken)
  165. Debug.Assert lResult
  166. lResult = LookupPrivilegeValue(0, StrPtr(SE_DEBUG_NAME), pToken.Privileges.pLuid)
  167. Debug.Assert lResult
  168. pToken.PrivilegeCount = 1
  169. pToken.Privileges.Attributes = SE_PRIVILEGE_ENABLED
  170. lResult = AdjustTokenPrivileges(hToken, False, pToken, Len(pToken), 0, 0)
  171. Debug.Assert lResult
  172. '------------------------------------
  173. '打开winlogon进程
  174. '------------------------------------
  175. hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, hPId)
  176. Debug.Assert hProcess
  177. If hProcess Then
  178. '------------------------------------
  179. '初始注入代码
  180. '------------------------------------
  181. Call InitShellCode
  182. '------------------------------------
  183. '远端进程分配内存
  184. '------------------------------------
  185. lRemoteAddr = VirtualAllocEx(hProcess, 0, SHELL_CODE_LENGTH, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
  186. Debug.Assert lRemoteAddr
  187. '------------------------------------
  188. '写入 shell 代码
  189. '------------------------------------
  190. If lRemoteAddr Then
  191. InsertAsmCode = WriteProcessMemory(hProcess, lRemoteAddr, mlShellCode(0), SHELL_CODE_LENGTH, 0)
  192. Else
  193. InsertAsmCode = GetLastError
  194. Exit Function
  195. End If
  196. '------------------------------------
  197. '创建远程线程
  198. '------------------------------------
  199. hRemoteThread = CreateRemoteThread(hProcess, 0, 0, lRemoteAddr + SHELL_FUNCOFFSET, 0, 0, hRemoteThreadID)
  200. If hRemoteThread = 0 Then
  201. InsertAsmCode = GetLastError
  202. Debug.Assert hRemoteThread
  203. Exit Function
  204. End If
  205. '------------------------------------
  206. '等待远程线程
  207. '------------------------------------
  208. Call WaitForSingleObject(hRemoteThread, -1)
  209. Call GetExitCodeThread(hRemoteThread, InsertAsmCode)
  210. Call CloseHandle(hRemoteThread)
  211. '------------------------------------
  212. '释放远端进程内存
  213. '------------------------------------
  214. Call VirtualFreeEx(hProcess, lRemoteAddr, SHELL_CODE_LENGTH, MEM_DECOMMIT)
  215. Else
  216. InsertAsmCode = GetLastError
  217. End If
  218. End Function
  219. '============================================
  220. ' 初始线程代码
  221. '============================================
  222. Private Function InitShellCode() As Long
  223. Const kernel32 As String = "kernel32.dll"
  224. Dim hDll As Long
  225. '------------------------------------
  226. '提取注入代码所需的API函数
  227. '------------------------------------
  228. hDll = GetModuleHandle(StrPtr(kernel32)): Debug.Assert hDll
  229. mlShellCode(0) = GetProcAddress(hDll, "GetModuleHandleW")
  230. mlShellCode(1) = GetProcAddress(hDll, "GetProcAddress")
  231. '---------------------------
  232. ' 以下代码由 MASM32 产生
  233. mlShellCode(2) = &HE853&
  234. mlShellCode(3) = &H815B0000
  235. mlShellCode(4) = &H40100EEB
  236. mlShellCode(5) = &H238E800
  237. mlShellCode(6) = &HC00B0000
  238. mlShellCode(7) = &H838D5075
  239. mlShellCode(8) = &H4010B0
  240. mlShellCode(9) = &HD093FF50
  241. mlShellCode(10) = &HF004013
  242. mlShellCode(11) = &HC00BC0B7
  243. mlShellCode(12) = &H683A75
  244. mlShellCode(13) = &H6A020000
  245. mlShellCode(14) = &H8D006A00
  246. mlShellCode(15) = &H4010B083
  247. mlShellCode(16) = &H93FF5000
  248. mlShellCode(17) = &H401090
  249. mlShellCode(18) = &H1874C00B
  250. mlShellCode(19) = &H10C2938D
  251. mlShellCode(20) = &H6A0040
  252. mlShellCode(21) = &H93FF5052
  253. mlShellCode(22) = &H401094
  254. mlShellCode(23) = &H474C00B
  255. mlShellCode(24) = &HAEB0AEB
  256. mlShellCode(25) = &H108C93FF
  257. mlShellCode(26) = &H2EB0040
  258. mlShellCode(27) = &HC25BC033
  259. mlShellCode(28) = &HFF8B0004
  260. mlShellCode(38) = &H410053
  261. mlShellCode(39) = &H200053
  262. mlShellCode(40) = &H690077
  263. mlShellCode(41) = &H64006E
  264. mlShellCode(42) = &H77006F
  265. mlShellCode(43) = &HFF8B0000
  266. mlShellCode(44) = &H690057
  267. mlShellCode(45) = &H6C006E
  268. mlShellCode(46) = &H67006F
  269. mlShellCode(47) = &H6E006F
  270. mlShellCode(48) = &H8B550000
  271. mlShellCode(49) = &HF0C481EC
  272. mlShellCode(50) = &H53FFFFFD
  273. mlShellCode(51) = &HE8&
  274. mlShellCode(52) = &HEB815B00
  275. mlShellCode(53) = &H4010D1
  276. mlShellCode(54) = &H10468
  277. mlShellCode(55) = &HF8858D00
  278. mlShellCode(56) = &H50FFFFFD
  279. mlShellCode(57) = &HFF0875FF
  280. mlShellCode(58) = &H40108093
  281. mlShellCode(59) = &HF8858D00
  282. mlShellCode(60) = &H50FFFFFD
  283. mlShellCode(61) = &H1098838D
  284. mlShellCode(62) = &HFF500040
  285. mlShellCode(63) = &H40107C93
  286. mlShellCode(64) = &H75C00B00
  287. mlShellCode(65) = &H68406A69
  288. mlShellCode(66) = &H1000&
  289. mlShellCode(67) = &H7668&
  290. mlShellCode(68) = &HFF006A00
  291. mlShellCode(69) = &H40107493
  292. mlShellCode(70) = &H74C00B00
  293. mlShellCode(71) = &H85896054
  294. mlShellCode(72) = &HFFFFFDF0
  295. mlShellCode(73) = &H75FFFC6A
  296. mlShellCode(74) = &H8493FF08
  297. mlShellCode(75) = &H8D004010
  298. mlShellCode(76) = &H4013C893
  299. mlShellCode(77) = &HFC028900
  300. mlShellCode(78) = &HFDF0BD8B
  301. mlShellCode(79) = &H76B9FFFF
  302. mlShellCode(80) = &H8D000000
  303. mlShellCode(81) = &H401374B3
  304. mlShellCode(82) = &H8DA4F300
  305. mlShellCode(83) = &H4010B083
  306. mlShellCode(84) = &H93FF5000
  307. mlShellCode(85) = &H401078
  308. mlShellCode(86) = &HFDF0B5FF
  309. mlShellCode(87) = &HFC6AFFFF
  310. mlShellCode(88) = &HFF0875FF
  311. mlShellCode(89) = &H40108893
  312. mlShellCode(90) = &HC0336100
  313. mlShellCode(91) = &HC03303EB
  314. mlShellCode(92) = &HC2C95B40
  315. mlShellCode(93) = &H6B0008
  316. mlShellCode(94) = &H720065
  317. mlShellCode(95) = &H65006E
  318. mlShellCode(96) = &H33006C
  319. mlShellCode(97) = &H2E0032
  320. mlShellCode(98) = &H6C0064
  321. mlShellCode(99) = &H6C&
  322. mlShellCode(100) = &H730075
  323. mlShellCode(101) = &H720065
  324. mlShellCode(102) = &H320033
  325. mlShellCode(103) = &H64002E
  326. mlShellCode(104) = &H6C006C
  327. mlShellCode(105) = &H69560000
  328. mlShellCode(106) = &H61757472
  329. mlShellCode(107) = &H6572466C
  330. mlShellCode(108) = &H6C470065
  331. mlShellCode(109) = &H6C61626F
  332. mlShellCode(110) = &H646E6946
  333. mlShellCode(111) = &H6D6F7441
  334. mlShellCode(112) = &H6C470057
  335. mlShellCode(113) = &H6C61626F
  336. mlShellCode(114) = &H41646441
  337. mlShellCode(115) = &H576D6F74
  338. mlShellCode(116) = &H74736C00
  339. mlShellCode(117) = &H706D6372
  340. mlShellCode(118) = &H4F005769
  341. mlShellCode(119) = &H446E6570
  342. mlShellCode(120) = &H746B7365
  343. mlShellCode(121) = &H57706F
  344. mlShellCode(122) = &H6D756E45
  345. mlShellCode(123) = &H6B736544
  346. mlShellCode(124) = &H57706F74
  347. mlShellCode(125) = &H6F646E69
  348. mlShellCode(126) = &H47007377
  349. mlShellCode(127) = &H69577465
  350. mlShellCode(128) = &H776F646E
  351. mlShellCode(129) = &H74786554
  352. mlShellCode(130) = &H65470057
  353. mlShellCode(131) = &H6E695774
  354. mlShellCode(132) = &H4C776F64
  355. mlShellCode(133) = &H57676E6F
  356. mlShellCode(134) = &H74655300
  357. mlShellCode(135) = &H646E6957
  358. mlShellCode(136) = &H6F4C776F
  359. mlShellCode(137) = &H57676E
  360. mlShellCode(138) = &H6C6C6143
  361. mlShellCode(139) = &H646E6957
  362. mlShellCode(140) = &H7250776F
  363. mlShellCode(141) = &H57636F
  364. mlShellCode(142) = &H4C746547
  365. mlShellCode(143) = &H45747361
  366. mlShellCode(144) = &H726F7272
  367. mlShellCode(145) = &H72695600
  368. mlShellCode(146) = &H6C617574
  369. mlShellCode(147) = &H6F6C6C41
  370. mlShellCode(148) = &H8B550063
  371. mlShellCode(149) = &HFCC483EC
  372. mlShellCode(150) = &H48C03360
  373. mlShellCode(151) = &H8DFC4589
  374. mlShellCode(152) = &H40117683
  375. mlShellCode(153) = &H93FF5000
  376. mlShellCode(154) = &H401000
  377. mlShellCode(155) = &H840FC00B
  378. mlShellCode(156) = &HFA&
  379. mlShellCode(157) = &H838DF88B
  380. mlShellCode(158) = &H401190
  381. mlShellCode(159) = &H93FF50
  382. mlShellCode(160) = &HB004010
  383. mlShellCode(161) = &HE3840FC0
  384. mlShellCode(162) = &H8B000000
  385. mlShellCode(163) = &H45838DF0
  386. mlShellCode(164) = &H50004012
  387. mlShellCode(165) = &H493FF57
  388. mlShellCode(166) = &H89004010
  389. mlShellCode(167) = &H40107483
  390. mlShellCode(168) = &H38838D00
  391. mlShellCode(169) = &H50004012
  392. mlShellCode(170) = &H493FF57
  393. mlShellCode(171) = &H89004010
  394. mlShellCode(172) = &H40108C83
  395. mlShellCode(173) = &HC2838D00
  396. mlShellCode(174) = &H50004011
  397. mlShellCode(175) = &H493FF57
  398. mlShellCode(176) = &H89004010
  399. mlShellCode(177) = &H40107883
  400. mlShellCode(178) = &HB2838D00
  401. mlShellCode(179) = &H50004011
  402. mlShellCode(180) = &H493FF57
  403. mlShellCode(181) = &H89004010
  404. mlShellCode(182) = &H4013D083
  405. mlShellCode(183) = &HD1838D00
  406. mlShellCode(184) = &H50004011
  407. mlShellCode(185) = &H493FF57
  408. mlShellCode(186) = &H89004010
  409. mlShellCode(187) = &H40107C83
  410. mlShellCode(188) = &HDB838D00
  411. mlShellCode(189) = &H50004011
  412. mlShellCode(190) = &H493FF56
  413. mlShellCode(191) = &H89004010
  414. mlShellCode(192) = &H40109083
  415. mlShellCode(193) = &HE8838D00
  416. mlShellCode(194) = &H50004011
  417. mlShellCode(195) = &H493FF56
  418. mlShellCode(196) = &H89004010
  419. mlShellCode(197) = &H40109483
  420. mlShellCode(198) = &HFB838D00
  421. mlShellCode(199) = &H50004011
  422. mlShellCode(200) = &H493FF56
  423. mlShellCode(201) = &H89004010
  424. mlShellCode(202) = &H40108083
  425. mlShellCode(203) = &HA838D00
  426. mlShellCode(204) = &H50004012
  427. mlShellCode(205) = &H493FF56
  428. mlShellCode(206) = &H89004010
  429. mlShellCode(207) = &H40108483
  430. mlShellCode(208) = &H19838D00
  431. mlShellCode(209) = &H50004012
  432. mlShellCode(210) = &H493FF56
  433. mlShellCode(211) = &H89004010
  434. mlShellCode(212) = &H40108883
  435. mlShellCode(213) = &H28838D00
  436. mlShellCode(214) = &H50004012
  437. mlShellCode(215) = &H493FF56
  438. mlShellCode(216) = &H89004010
  439. mlShellCode(217) = &H4013CC83
  440. mlShellCode(218) = &H89C03300
  441. mlShellCode(219) = &H8B61FC45
  442. mlShellCode(220) = &HC3C9FC45
  443. mlShellCode(221) = &H53EC8B55
  444. mlShellCode(222) = &HE8&
  445. mlShellCode(223) = &HEB815B00
  446. mlShellCode(224) = &H40137D
  447. mlShellCode(225) = &H120C7D81
  448. mlShellCode(226) = &H75000003
  449. mlShellCode(227) = &HD4838D1C
  450. mlShellCode(228) = &H50004013
  451. mlShellCode(229) = &H13D093FF
  452. mlShellCode(230) = &HB70F0040
  453. mlShellCode(231) = &H74C00BC0
  454. mlShellCode(232) = &H40C03308
  455. mlShellCode(233) = &H10C2C95B
  456. mlShellCode(234) = &H1475FF00
  457. mlShellCode(235) = &HFF1075FF
  458. mlShellCode(236) = &H75FF0C75
  459. mlShellCode(237) = &HC8B3FF08
  460. mlShellCode(238) = &HFF004013
  461. mlShellCode(239) = &H4013CC93
  462. mlShellCode(240) = &HC2C95B00
  463. mlShellCode(241) = &HFF8B0010
  464. mlShellCode(245) = &H6F0048
  465. mlShellCode(246) = &H6B006F
  466. mlShellCode(247) = &H790053
  467. mlShellCode(248) = &H4B0073
  468. mlShellCode(249) = &H790065
  469. mlShellCode(250) = &H8B550000
  470. mlShellCode(251) = &HD8C481EC
  471. mlShellCode(252) = &HE8FFFFFD
  472. mlShellCode(253) = &H226&
  473. mlShellCode(254) = &H8DE84589
  474. mlShellCode(255) = &H6A50EC45
  475. mlShellCode(256) = &HE875FF28
  476. mlShellCode(257) = &H24BE8
  477. mlShellCode(258) = &HFC00B00
  478. mlShellCode(259) = &H11584
  479. mlShellCode(260) = &HF4458D00
  480. mlShellCode(261) = &H20606850
  481. mlShellCode(262) = &H6A0040
  482. mlShellCode(263) = &H22DE8
  483. mlShellCode(264) = &H74C00B00
  484. mlShellCode(265) = &HF045C722
  485. mlShellCode(266) = &H1&
  486. mlShellCode(267) = &H2FC45C7
  487. mlShellCode(268) = &H6A000000
  488. mlShellCode(269) = &H6A006A00
  489. mlShellCode(270) = &HF0458D00
  490. mlShellCode(271) = &HFF006A50
  491. mlShellCode(272) = &H1E8EC75
  492. mlShellCode(273) = &HFF000002
  493. mlShellCode(274) = &H6A0875
  494. mlShellCode(275) = &H1F0FFF68
  495. mlShellCode(276) = &H1CEE800
  496. mlShellCode(277) = &H45890000
  497. mlShellCode(278) = &H68046AE8
  498. mlShellCode(279) = &H1000&
  499. mlShellCode(280) = &H4F268
  500. mlShellCode(281) = &HFF006A00
  501. mlShellCode(282) = &HC1E8E875
  502. mlShellCode(283) = &H89000001
  503. mlShellCode(284) = &H6AE445
  504. mlShellCode(285) = &H4F268
  505. mlShellCode(286) = &H10006800
  506. mlShellCode(287) = &H75FF0040
  507. mlShellCode(288) = &HE875FFE4
  508. mlShellCode(289) = &H1B9E8
  509. mlShellCode(290) = &H30186800
  510. mlShellCode(291) = &H86A0040
  511. mlShellCode(292) = &H40300068
  512. mlShellCode(293) = &HE475FF00
  513. mlShellCode(294) = &HE8E875FF
  514. mlShellCode(295) = &H1A2&
  515. mlShellCode(296) = &H81E4558B
  516. mlShellCode(297) = &H8C2&
  517. mlShellCode(298) = &H6A006A00
  518. mlShellCode(299) = &H52006A00
  519. mlShellCode(300) = &H6A006A
  520. mlShellCode(301) = &HE8E875FF
  521. mlShellCode(302) = &H156&
  522. mlShellCode(303) = &H144E850
  523. mlShellCode(304) = &H18680000
  524. mlShellCode(305) = &H6A004030
  525. mlShellCode(306) = &H30006808
  526. mlShellCode(307) = &H75FF0040
  527. mlShellCode(308) = &HE875FFE4
  528. mlShellCode(309) = &H151E8
  529. mlShellCode(310) = &H58D00
  530. mlShellCode(311) = &H8B004030
  531. mlShellCode(312) = &H4408B10
  532. mlShellCode(313) = &HCB685250
  533. mlShellCode(314) = &H8D004020
  534. mlShellCode(315) = &HFFFDD885
  535. mlShellCode(316) = &H909050FF
  536. End Function
  537. '-------------------------------------------
  538. ' 根据可执行文件的名称取回进程ID
  539. ' 参数:可执行文件名(含扩展名)
  540. ' 返回:进程ID。0表示无
  541. '-------------------------------------------
  542. Private Function GetProcessIdFromName(ByVal sName As String) As Long
  543. Dim hSnapshot As Long
  544. Dim lpPE As PROCESSENTRY32W
  545. Dim lpWinlogon As Long
  546. hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
  547. Debug.Assert hSnapshot
  548. lpPE.dwSize = Len(lpPE)
  549. If Process32First(hSnapshot, lpPE) Then
  550. lpWinlogon = StrPtr(sName)
  551. Do
  552. If lstrcmpi(lpPE.szExeFile(1), lpWinlogon) = 0 Then
  553. GetProcessIdFromName = lpPE.h32ProcessID
  554. Exit Do
  555. End If
  556. If Process32Next(hSnapshot, lpPE) = 0 Then Exit Do
  557. Loop
  558. End If
  559. Call CloseHandle(hSnapshot)
  560. End Function