首页
社区
课程
招聘
[原创]+[求助]反HOOK API....
发表于: 2007-11-18 23:44 6857

[原创]+[求助]反HOOK API....

2007-11-18 23:44
6857
因为现在的大部分游戏都有反外挂系统了..一般的反外挂系统在ring3级HOOK API..网上搜了又搜反HOOK API的.看的我一头雾水..郁闷的很..
自己安静下来想了想.
比如一个软件.做了全局HOOK .
比如我MessageBoxA弹出一个对话框.
它HOOK MessageBoxA后.无非就是在user32.dll找到函数头.改成跳转到它软件的哪个函数.
突然想到自己做一个user32.dll不就得了??
随后行动.
拷贝个user32.dll.改名字.找到MessageBoxA函数.运行之..结果成功了.但是只成功了一半.不知道为什么弹出MessageBox后.点确定会出现内存错误??郁闷..希望大虾给点提示??

源码如下.
procedure TForm1.Button1Click(Sender: TObject);
type
  TCallMeDll = function(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
var
  CallMeDll: TCallMeDll;
  FuncPtr: TFarProc;
  hDll: THandle;
  result: integer;
begin
  hDll:=LoadLibrary('msg.dll');
  FuncPtr:=GetProcAddress(hDll,'MessageBoxA');
  @CallMeDll:=FuncPtr;
  if @CallMeDll <> nil then
    result:=CallMeDll(handle,'test','test',MB_Ok);
  FuncPtr:=nil;
  FreeLibrary(hDll);
end;


其实我也知道.这种方法很不好.就算可以OpenProcess一个游戏.但是现在反外挂系统.比如NP.都在ring0动了手脚.光反HOOK API是不够的.总之.这算做一种反HOOK API的一种笨办法吧.

附件中有我编译好的程序..因为包含了user32.dll 所以比较大点..

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
2
路过

好像Themida 抽得3个 DLL 并没有带上 3 *  sizeof(DLL) 这么大的东西。
2007-11-19 19:54
0
雪    币: 189
活跃值: (56)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
跟了一下,发现你的程序在FreeLibrary(hDll);后还有调用到这个msg.dll中的地址,所以就出错了
去掉FreeLibrary(hDll);就可以了

这个方法太麻烦,还带整个的DLL,参考一下逆向工程的秘密里的那个defender,有点差不多的考虑.
2007-11-19 20:05
0
雪    币: 8764
活跃值: (5240)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
楼上的说的有道理
但是我觉得很大的原因还在于user32.dll里的入口函数
DllEntryPoint(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpReserved)
粗粗的跟了一下,貌似user32.dll不能被FreeLibrary,
因为在fdwReason等于0的时候又调用了FreeLibrary,出现死循环.
2007-11-19 23:06
0
游客
登录 | 注册 方可回帖
返回
//