c++ - Linux Ubuntu下绕行功能

标签 c++ linux ubuntu hook detours

我在 Windows 下使用了 Detours ( http://research.microsoft.com/en-us/projects/detours/ ),但现在我使用 Linux Ubuntu 并且我想Detour/ Hook 一个函数。 我想绕过我的函数,然后我想调用原始函数。 (我可以 Hook 这个功能,但之后我不能使用原来的)。

所以,我决定编写一个detour 函数。首先,我把函数复制到别的地方,但是执行不了。你能帮帮我吗,为什么我不能执行它?我遇到了段错误。

我的代码:

int (* h_Com_Printf)(const char *fmt, ...);
...
void *memBuffer;
int size = 0x4F; // size of the function

memBuffer = (void*)malloc(size);
memcpy(memBuffer, (void*)0x08060DEA, size); // copy the function

h_Com_Printf = (int (*)(const char *fmt, ...))memBuffer;
h_Com_Printf("print function: %d\n", 1); // segmentation fault HERE

谢谢!

Com_Printf 在“可执行文件”(IDA Pro)中: 图片:http://kepfeltoltes.hu/150818/ida_printf_www.kepfeltoltes.hu_.png

在 VirtualBox 中运行的 Linux。 (这会是问题吗?)

最佳答案

仅复制函数字节是不够的,即使您知道 if 的确切大小(情况并非总是如此),因为有很多与 EIP 相关的指令(在您的样本中调用 _vsnprintf,因为实例)。因此,通常所做的(事实上,Detours 正在做的)是仅复制被钩子(Hook)代码(JMP 或 CALL)覆盖的字节并重新计算与 EIP 相关的偏移量。为此,您需要能够解码指令并在必要时重新计算相对偏移量的反汇编程序。弯路实际上包括一个。我建议您查看 Detours 资源,以更好地了解为放置钩子(Hook)所做的工作。

希望对你有帮助

关于c++ - Linux Ubuntu下绕行功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075248/

相关文章:

c++ 事件队列、可变参数函数、静态函数和其他奇怪的东西

c++ - 将十进制转换为二进制的C++循环的逻辑是什么

linux - 无法读取文件 Datadog 代理

linux - 当从 cron 调用脚本时,脚本中的 Sed 命令不起作用

linux - Ubuntu : "Can' t load driver file apr_dbd_oracle. 上的 Apache 2.4 所以”

c++ - 无法使用 LoadIcon WINAPI 从资源加载图标

c++ - 在内部定义范围

java - 正则表达式捕获一定范围内的内核版本

python - 如何根据需要从 Python 脚本自动安装所需的包?

ubuntu - Android Studio 无法在 Ubuntu 上运行