在VB里用代码注入(zt)(2007-06-26 00:45:52)
很多人因为需要用CALL由VB转向DELPHI,只因为VB不支持嵌入汇编 就像很久很久以前~~~~~ 有人说VB不能创建Windows Standard DLL,VB不能使用多线程~~~~~ 但事实大家都知道的 其实不过是方法的问题,用VC,DELPHI更方便一点,用VB麻烦一点~~~ 不说废话,转入正题: 在VB里用代码注入 常见的方法,是把汇编指令转成机器码后预先存入数组中,然后再写入内存 不过麻烦的是汇编指令转成机器码的过程 但是呢,如果你看了 http://www./bbs/read.php?tid=36673&page=1&toread=1 以后,其实也不怎么麻烦滴 ,里面已经有简单的示例了 如果你还嫌麻烦~~~~~ 那么我就只好隆重推荐一个小玩意 ~~~ AsmInVB(http://www.AsmInVB.com) 这是阿国哥的作品(不是偶滴~~~ ) 如何使用这个小玩意呢 首先当然是要去下载一个AsmInVB插件了 安装说明什么的里面都有了 然后打开VB(什么,没装VB?~~~去死 ,没装你来这里做什么) 先确定AsmInVB已经被加载,你可以在"外接程序管理器"里看到 然后~~~没有什么然后了,直接开工写代码 ======================================================== 来看个例子吧 以下是放在窗体里的 Private Sub Command1_Click() Dim hWnd As Long, hPid As Long, hProcess As Long Dim ThreadAddr As Long, TmpHandle As Long, hThreadID As Long #If IS_RELEASE Then hWnd = FindWindow(vbNullString, "Element Client") GetWindowThreadProcessId hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, hPid) ThreadAddr = VirtualAllocEx(hProcess, ByVal 0&, 128, MEM_COMMIT, PAGE_EXECUTE_READWRITE) TmpHandle = WriteProcessMemory(hProcess, ThreadAddr, AddressOf AsmFunc, 128, vbNull) TmpHandle = CreateRemoteThread(hProcess, ByVal 0&, ByVal 0, ByVal ThreadAddr, ByVal 0&, ByVal 0&, ByVal 0&) VirtualFreeEx hProcess, ThreadAddr, 128, MEM_RELEASE CloseHandle ThreadAddr CloseHandle hProcess #Else MsgBox "DEBUG模式下是看不到效果滴~~~" #End If End Sub ========================================================== 以下是必须放在模块里的 #If IS_RELEASE Then Public Function AsmFunc() End Function #End If =================================================== 以上代码通过测试 (完美国际上下飞机CALL) 注意:需要生成为EXE程序执行后才能看到效果,在VB.IDE调试模式下是看不到效果滴! (补充)如果是有参数的CALL,比较麻烦,不管用上面哪种方法,你需要在指令中预留位置,在注入完代码然后自己把参数的地址写进去,如果写错了位置~~~ |
|