搜索指定进程内存中是否含有某个字符串,比如搜索QQ进程,搜索内容为www.****************.com
把QQ进程里包含www.***.com的网址都搜索出来。
可以先看编译好的EXE程序,满意后给钱拿源码。
下面提供 搜索一个内存地址的 源码, 只要做个循环搜索指定进程的内存就可以了。
内存开始位置:StartAddress= $10000 结束位置 EndAddress = $7FFEFFFF$Handle = _MemoryOpen(4024) ;4024 为进程ID号
$MEM = _MemoryRead(0x040BA7F0, $Handle,"byte[255]") ;0x040BA7F0 为要搜索的地址, 这里怎么改成搜索整个进程的内存呢?然后能否做个循环,如果搜索到www则输出到文本中呢???
$bbb = BinaryToString($MEM)
_MemoryClose($Handle)
MsgBox(0,0,$bbb)
Func _MemoryOpen($iv_Pid, $iv_DesiredAccess = 0x1F0FFF, $if_InheritHandle = 1)
If Not ProcessExists($iv_Pid) Then
SetError(1)
Return 0
EndIf
Local $ah_Handle[2] = [DllOpen('kernel32.dll')]
If @error Then
SetError(2)
Return 0
EndIf
Local $av_OpenProcess = DllCall($ah_Handle[0], 'int', 'OpenProcess', 'int', $iv_DesiredAccess, 'int', $if_InheritHandle, 'int', $iv_Pid)
If @error Then
DllClose($ah_Handle[0])
SetError(3)
Return 0
EndIf
$ah_Handle[1] = $av_OpenProcess[0]
Return $ah_Handle
EndFunc ;==>_MemoryOpen
Func _MemoryRead($iv_Address, $ah_Handle, $sv_Type = 'dword')
If Not IsArray($ah_Handle) Then
SetError(1)
Return 0
EndIf
Local $v_Buffer = DllStructCreate($sv_Type)
If @error Then
SetError(@error + 1)
Return 0
EndIf
DllCall($ah_Handle[0], 'int', 'ReadProcessMemory', 'int', $ah_Handle[1], 'int', $iv_Address, 'ptr', DllStructGetPtr($v_Buffer), 'int', DllStructGetSize($v_Buffer), 'int', '')
If Not @error Then
Local $v_Value = DllStructGetData($v_Buffer, 1)
Return $v_Value
Else
SetError(6)
Return 0
EndIf
EndFunc ;==>_MemoryRead
Func _MemoryClose($ah_Handle)
If Not IsArray($ah_Handle) Then
SetError(1)
Return 0
EndIf
DllCall($ah_Handle[0], 'int', 'CloseHandle', 'int', $ah_Handle[1])
If Not @error Then
DllClose($ah_Handle[0])
Return 1
Else
DllClose($ah_Handle[0])
SetError(2)
Return 0
EndIf
EndFunc ;==>_MemoryClose
|