挂钩,dll注射和螺纹安全

时间:2013-08-25 20:18:53

标签: thread-safety hook reverse-engineering dll-injection malware-detection

当我用jmp操作码覆盖函数的第一个操作码时,我实际上写的是5个字节(或者对于jmp short来说是2个)。 但是,如果另一个线程(来自同一个进程)将在我更改它时调用此函数,该怎么办? 这将导致意外行为。 但我没有找到任何解释。挂钩的物品就像它没有问题一样。

也许在win32api中你可以使用带有mov edi,edi的nops这一事实。但我的问题更具理论性

感谢

2 个答案:

答案 0 :(得分:1)

很有可能引发问题。您可以在更改代码上创建关键部分,并输入关键部分以确保在更改代码时可以独占访问。

在相互访问的情况下,执行线程可以(理论上)看到第一个字节,并继续在接下来的4个字节上执行跳转(如果是长跳转)。在调用的情况下,下一条指令(IP)在跳转之前被推送,那是当前的+ 5.理论上,ret可能导致该线程遇到未修改的指令(你可能需要一个nop) ,例如)。

这完全是理论上的,但您应该在更改代码时阻止相互访问。

答案 1 :(得分:1)

如果您注入特定进程,则可以暂停该进程,安装所有挂钩并在此之后继续。