首页
社区
课程
招聘
[旧帖] [求助]有关Detours库使用的三个问题 0.00雪花
发表于: 2010-7-29 11:38 1504

[旧帖] [求助]有关Detours库使用的三个问题 0.00雪花

2010-7-29 11:38
1504
大家好
我在做Detours库的hook。我将各种函数的原型,替换函数什么的全部写在dll中,然后通过DetourCreateProcessWithDllA函数将某一个软件打开的同时注入我的dll。我只需要获得打开的软件调用的api的序列就行了。
现在有这么几个问题。
首先是函数的不识别。比如IsBadReadPtr函数,我和别的函数一样将它原型,替换函数都写好,结果报出这么一个错误。
cannot convert from '' to 'int (__stdcall *)(const void *,unsigned long)'
dll里面是这么声明的。

BOOL (_stdcall *SysIsBadReadPtr)(
  CONST VOID *lp,  // memory address
  UINT_PTR ucb     // size of block
)=IsBadReadPtr;

BOOL _stdcall HookIsBadReadPtr(
  CONST VOID *lp,  // memory address
  UINT_PTR ucb     // size of block
)
{
    fprintf(p,"IsBadReadPtr\n");
//    SysMessageBox(NULL,"IsBadReadPtr","Hook",MB_OK);

    return SysIsBadReadPtr(lp,ucb);
}

第二个问题是我得到的api序列过长,有些api名称重复出现次数太多。有一些比如"CloseHandle","TranslateMessage","PeekMessage"的api名称大片出现。我怀疑是我自己的程序调用的api的序列也在里面。怎么样子区分呢?有这样的一段伪代码
YourHook(){
  check = TlsGetValue(xxxx);
  if(check == TRUE)
  Jmp to Real Function;
  TlsSetValue(xxxx, TRUE)
  MessageBox(yyyy);
  TlsSetValue(xxxx, FALSE)
}
这个Value怎么设定?如何判断当前调用的api是要检测的软件的还是我自己的程序的?

第三个问题是我的api名字和参数是硬编码进去的,就像上面那段代码里的fprintf,听说有可以不用硬编码的方式,请教高手。
先谢谢大家。我在线等待回复。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 324
活跃值: (113)
能力值: ( LV15,RANK:280 )
在线值:
发帖
回帖
粉丝
2
问题提的很好,使用detours都会碰到。盼解决。
2010-7-30 21:25
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
高手来了吗,等待中。
2010-7-30 22:19
0
雪    币: 106
活跃值: (271)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
你的函数各式不对,Hook的函数返回值,参数要和原函数一模一样
2011-3-11 20:43
0
游客
登录 | 注册 方可回帖
返回
//