VB注入问题
帮我看一下这段代码,内存有没有释放掉,或者说还有什么别的问题...
Function Run_ASM(pid As Long) As Long
Dim i As Long, tmp_Addr As Long, RThwnd As Long, h As Long
ReDim AsmCode(Len(OPcode) / 2 - 1) As Byte
For i = 0 To UBound(AsmCode)
AsmCode(i) = CByte( "&H " & Mid(OPcode, i * 2 + 1, 2))
Next
h = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
tmp_Addr = VirtualAllocEx(h, ByVal 0&, UBound(AsmCode) + 1, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
WriteProcessMemory h, ByVal tmp_Addr, ByVal VarPtr(AsmCode(0)), UBound(AsmCode) + 1, ByVal 0&
RThwnd = CreateRemoteThread(h, ByVal 0&, 0, ByVal tmp_Addr, ByVal 0&, ByVal 0&, ByVal 0&)
VirtualFreeEx h, tmp_Addr, UBound(AsmCode) + 1, MEM_RELEASE
CloseHandle RThwnd
CloseHandle h
End Function
其中 变量OPcode 是机器码
[解决办法]
你建立了远程线程后,就直接返回了啊
那个线程应该已经启动了吧
你指的 "内存没释放 ",是指哪里的内存?
[解决办法]
如果你能用h = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
打开进程,哪么这代码应该是能正确执行,除非OPcode中代码级问题。
如不能打开进程,可能还需要提升权限
[解决办法]
广海来的吧,呵呵,你这是wulin,还是zhuxian。
既然已经VirtualFreeEx,并且已经CloseHandle了,那么从这个过程看应该是没问题的。看看你其它代码是否有问题吧。记住句柄OPEN了,用过就要迅速CLOSE,似乎OPENPROCESS有个BUG,长时间不CLOSE,会造成内存泄露,不过我并不确定。
说实话,我虽然比较喜欢VB,不过这个工作用VB来做确实不太好。还是考虑将CALL的代码放入一个DLL来调用吧。而且这个CLASS似乎无法作到输入参数给CALL?不太清楚。
我的做法是VB GUI + VC的消息钩子(调用CALL),还是很稳定的,wulin或是zhuxian最长有过40多小时没出过错。且内存变化不大。