VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 4123|回复: 1

移除API Hook delphi版

[复制链接]
 楼主| 发表于 2008-10-24 13:08:16 | 显示全部楼层 |阅读模式
原版:http://www.0ginr.com/bbs/viewthr ... &extra=page%3D1
function RemoveFWHook(szDllPath:char;szFuncName:char):Boolean;
var
lpBase:THandle;
lpFuncointer;
dwRVAWORD;
hFile:THandle;
dwSize:THandle;
hMapFileWORD;
//-----------------
lpBaseMapointer;

//------------------

lpRealFuncointer;
//--修改访问权限
dwOldProtectWORD;

bRes:Boolean;


begin
   //动态加载DLL
   lpBase:=LoadLibrary(PAnsiChar(szDllPath));
  //取得函数模块地址
   lpFunc:=GetProcAddress(lpBase,pchar(szFuncName));
  //判断返回值
   If lpFunc=nil then RemoveFWHook:=False;
   //计算RVA虚拟地址
   dwRVA:= DWORD(lpFunc)-DWORD(lpBase);
   //创建文件
   hFile:=CreateFile(pchar(szDllPath), GENERIC_READ, FILE_SHARE_READ, nil,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
   //判断结构
   if hFile = INVALID_HANDLE_VALUE  then
    begin
      RemoveFWHook := False;
     exit
   end;
   //返回文件长度
   dwSize:=GetFileSize(hFile, 0);
   //创建文件映射
   hMapFile:=CreateFileMapping(hFile, 0, PAGE_READONLY Or SEC_IMAGE, 0, dwsize,0);
   //映射当前地址空间
   lpBaseMap:=MapViewOfFile(hMapFile, FILE_MAP_READ, 0, 0, dwSize);
   //指向当前函数的指针-这个不知道怎么翻译,高人解释下
    lpRealFunc:= pointer(lpBaseMap)+DWORD(dwRVA);
   //函数初始化
   bRes:=True;
   //修改访问权限
   if(VirtualProtect(lpFunc, 10, PAGE_EXECUTE_READWRITE, @dwOldProtect)) then
      begin
        CopyMemory(lpFunc, lpRealFunc, 10);
      end
   else
      begin
      bRes:= False;

    end;
   //解除映射
    UnmapViewOfFile (lpBaseMap);
   //关闭句丙
   CloseHandle (hMapFile);
   CloseHandle (hFile);
   RemoveFWHook:= bRes;

end;

  //指向当前函数的指针-这个不知道怎么翻译,高人解释下
    lpRealFunc:= pointer(lpBaseMap)+DWORD(dwRVA);

这个错误,不知道怎么修改!
 楼主| 发表于 2008-10-24 13:51:38 | 显示全部楼层
lpRealFunc:= Pointer(DWORD(lpBaseMap)+dwRVA);

修改成功!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2023-4-1 00:54

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表