我想写个查找其他进程中字符串的代码,写了个但执行不成功,请各位大牛帮忙看看是哪的问题,小弟先谢谢了!
VirtualProtectEx和ReadProcessMemory 这2个函数都没能执行成功,我不明白是什么原因?
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.data
hInstance dd ?
hProcess dd ? ;进程句柄
szDllName db 'kernel32.dll',0
lpAddress dd ?
szErrOpen db '无法打开远程进程!',0
lpBuffer db 12 dup (?)
szOk1 db '1成功!',0
szOk2 db '2成功!',0
szOk3 db '3成功!',0
szOk4 db '4成功!',0
.code
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_WRITE,FALSE,1940 ;1940是我测试的桌面进程的ID
.if eax
mov hProcess,eax
mov lpAddress,00010000h ;这个地址是桌面进程内存的起始地址
invoke MessageBox,NULL,offset hProcess,NULL,MB_OK
.while TRUE
invoke VirtualProtectEx,hProcess,offset lpAddress,12,PAGE_EXECUTE_READWRITE,NULL
.if eax !=0
invoke MessageBox,NULL,offset szOk1,NULL,MB_OK
.endif
invoke ReadProcessMemory,hProcess,offset lpAddress,offset lpBuffer,sizeof lpBuffer,NULL
.if eax !=0
invoke MessageBox,NULL,addr szOk2,NULL,MB_OK
.endif
invoke lstrcmpi,offset lpBuffer,offset szDllName
.if eax == 0
invoke MessageBox,NULL,offset szOk3,offset lpBuffer,MB_OK
.break
.else
invoke MessageBox,NULL,offset szOk4,offset lpBuffer,MB_OK
.endif
add lpAddress,3
;invoke GetThreadID
.endw
.else
invoke MessageBox,NULL,addr szErrOpen,NULL,MB_OK or MB_ICONWARNING
.endif
invoke ExitProcess,NULL
end start
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课