现在的位置: 首页 > 综合 > 正文

搜索内存数据(-)

2014年02月04日 ⁄ 综合 ⁄ 共 3563字 ⁄ 字号 评论关闭
  1. Private Type MEMORY_BASIC_INFORMATION
  2.     BaseAddress As Long
  3.     AllocationBase As Long
  4.     AllocationProtect As Long
  5.     RegionSize As Long
  6.     State As Long
  7.     Protect As Long
  8.     lType As Long
  9. End Type
  10. Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As LongByVal bInheritHandle As LongByVal dwProcessId As LongAs Long
  11. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As LongAs Long
  12. Private Declare Sub api_CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  13. Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As LongAs Long
  14. Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As LongAs Long
  15. Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As StringAs Long
  16. Private Declare Function VirtualProtectEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As LongByVal flNewProtect As Long, lpflOldProtect As LongAs Long
  17. Private Declare Function VirtualQueryEx Lib "kernel32" (ByVal hProcess As LongByVal lpAddress As Long, lpBuffer As MEMORY_BASIC_INFORMATION, ByVal dwLength As LongAs Long
  18. Private Declare Function CreateRemoteThread Lib "kernel32" (ByVal hProcess As LongByVal lpThreadAttributes As LongByVal dwStackSize As LongByVal lpStartAddress As LongByVal lpParameter As LongByVal dwCreationFlags As Long, lpThreadId As LongAs Long
  19. Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As LongByVal dwMilliseconds As LongAs Long
  20. Private Const PROCESS_ALL_ACCESS = 
  21. Private Const PAGE_READWRITE = 
  22. Private Const MEM_COMMIT = 
  23. Private Const ERR_MEMRW = 40010
  24. Private c_MemStop As Boolean
  25. Private c_PID As Long
  26. Private Function Mem_SearchBytArray(bytData() As Byte, ListAddress() As LongOptional lpStart As Long = &H400000, Optional lpEnd As Long = &H7FFFFFFF) As Long
  27. '16bit  from &H80000000 to &HBFFFFFFF   2byte
  28. '32bit  from &H00400000 to &H7FFFFFFF   4byte
  29. 'all    from &H00000000 to &HFFFFFFFF
  30.     Dim nCount As Long
  31.     Dim bfSize As Long
  32.     Dim mbSize As Long
  33.     Dim mbloop As Long
  34.     Dim bfloop As Long
  35.     Dim ret As Long
  36.     Dim lpAddress As Long
  37.     Dim hProcess As Long
  38.     Dim MBI As MEMORY_BASIC_INFORMATION
  39.     Dim lpBuffer() As Byte
  40.     c_MemStop = False
  41.     mbSize = Len(MBI)
  42.     bfSize = UBound(bytData)
  43.     lpAddress = lpStart
  44.     hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, c_PID)
  45.     ret = VirtualQueryEx(hProcess, lpAddress, MBI, mbSize)
  46.     Do While (ret And (lpAddress < lpEnd) And Not c_MemStop)
  47.         If (MBI.Protect And PAGE_READWRITE) And (MBI.State = MEM_COMMIT) Then
  48.             ReDim lpBuffer(MBI.RegionSize - 1)
  49.             ReadProcessMemory hProcess, ByVal MBI.BaseAddress, lpBuffer(0), MBI.RegionSize, 0
  50.             For mbloop = 0 To MBI.RegionSize - 1 - bfSize
  51.                 For bfloop = 0 To bfSize
  52.                     If bytData(bfloop) <> lpBuffer(mbloop + bfloop) Then GoTo runSearchNext
  53.                 Next
  54.                 ReDim Preserve ListAddress(nCount) As Long
  55.                 ListAddress(nCount) = mbloop + MBI.BaseAddress
  56.                 nCount = nCount + 1
  57. runSearchNext:
  58.             Next
  59.         End If
  60.         lpAddress = lpAddress + MBI.RegionSize
  61.         ret = VirtualQueryEx(hProcess, lpAddress, MBI, mbSize)
  62.     Loop
  63.     Mem_SearchBytArray = nCount
  64.     Call CloseHandle(hProcess)
  65. End Function

抱歉!评论已关闭.