文件名称:VB拦截windows删除文件(API HOOK)
文件大小:348KB
文件格式:RAR
更新时间:2014-11-27 14:45:21
VB源码,文件操作,删除进程
VB拦截Windows Explorer删除进程,内含API HOOK,源代码:倒霉蛋儿,程序有时候也会窗口勾挂失败! 勾住了SHFileOperation等函数,DLL用Delphi写的C会的太少,查了半天才知道原来explorer是用SHFileOperation删除文件,经过测试很稳定,没有出现崩溃的情况,由于只勾住了SHFileOperation函数,所以别的程序要是调用DeleteFile删除文件,拦截不到,要是想拦截DeleteFile自己接着写吧。 mod_Inject.bas类的注释摘录: Dim MyAddr As Long ‘执行远程线程代码的起始地址。这里等于LoadLibraryA的地址 ‘dll文件路径 MyDllFileLength = LenB(StrConv(MyDllFileName, vbFromUnicode)) + 1 ‘这里把dll文件名从Unicode转换成Ansi,否则英文字母是2个字节。 _ 顺便说一下,学过C的应该知道字符串要以/0标志结尾,所以dll文件名长度要加上1个字节存放Chr(0) ‘得到进程的句柄 在目标进程中申请分配一块空白内存区域。内存的起始地址保存在MyDllFileBuffer中。 _ 这块内存区域我们用来存放dll文件路径,并作为参数传递给LoadLibraryA。 在分配出来的内存区域中写入dll路径径。注意第二个参数传递的是MyDllFileBuffer的内容, _ 而不是MyDllFileBuffer的内存地址? If MyReturn = 0 Then Inject = False MyAddr = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA") ‘得到LoadLibraryA函数的起始地址。他的参数就是我们刚才写入的dll路径。但是LoadLibraryA本身是不知道参数在哪里的。 _ 接下来我们就用CreateRemoteThread函数告诉他参数放在哪里了? If MyAddr = 0 Then Inject = False MyResult = CreateRemoteThread(ProcessHandle, 0, 0, MyAddr, MyDllFileBuffer, 0, 0) 好了,现在用CreateRemoteThread在目标进程创建一个线程,线程起始地址指向LoadLibraryA, _ 参数就是MyDllFileBuffer中保存的dll路径? If MyResult = 0 Then Inject = False Else Inject = True End If ‘接下来你可以使用WaitForSingleObject等待线程执行完毕。 _ 并用GetExitCodeThread得到线程的退出代码,用来判断时候正确执行了dll中的代码。 CloseHandle MyResult CloseHandle ProcessHandle ‘扫地工作 End Function
【文件预览】:
codefans.net
----Hook DeleteFile()
--------ApiHook.dll(359KB)
--------ApiHook()
--------frmMain.frx(4B)
--------frmMain.frm(4KB)
--------Windows.pas(1.13MB)
--------mod_Inject.bas(7KB)
--------VBP_Protect_System.vbw(124B)
--------mod_HookMessage.bas(2KB)
--------VBP_Protect_System.vbp(801B)