Articles of 钩子

挂在3.5内核上的sys_execve

我正在尝试在x86_32的Linux内核v3.5中挂接sys_execve系统调用。 我只需将sys_call_table入口地址更改为我的钩子函数 asmlinkage long (*real_execve)( const char __user*, const char __user* const __user*, const char __user* const __user* ); … asmlinkage long hook_execve( const char __user* filename, const char __user* const __user* argv, const char __user* const __user* envp ) { printk( "Called execve hook\n" ); return real_execve( filename, argv, envp ); } … real_execve […]

在linux库中查找静态函数地址

我需要find一个在Linux库中的静态函数的地址挂钩。 我尝试使用dlopen()和dlsym(),但它没有工作。 有没有办法find它? 或者如何遍历库的内存,所以我可以做一个模式扫描?

如何在linux中不使用dlsym挂接

我试图钩一些glibc函数,像fopen,fread等,但在钩函数,我必须使用glibc相同的function。 喜欢这个: // this is my fopen FILE *fopen(…..) { fopen(….);// this is glibc fopen } 我已经find了一种方法来使用dlsym来做到这一点,但是这样我就必须用所有的glibc函数调用与其中使用dlsym调用glibc函数的包装器进行replace。 我很好奇,在没有对包装函数进行编码的情况下,另一种方式可以做同样的工作。 我试过这个: fopen.c ….fopen(..) { myfopen(..); } myfopen.c myfopen(..) { fopen(…);// glibc version } main.c中 int main() { fopen(…); } $ gcc -c *.c $ gcc -shared -o libmyopen.so myopen.o $ gcc -o test main.o fopen.o libmyopen.so 在我的理解中,gcc会按照命令行从左到右的顺序链接,所以main.o会在fopen.o中使用fopen.o,fopen.o将在libmyfopen.so中使用myfopen,libmyfopen.so将在glibc中使用fopen。 […]

git:在任何客户端推送后,在服务器上自动运行bash脚本

我看过并find各种各样的git钩指南,但似乎没有适合这个特定的,简单的情况。 我有我自己的服务器,我推动代码更改(与git推起源大师)。 我这样做后,我必须ssh进入服务器,并运行我已经设置的function,“更新代码”,克隆回购,运行ant,重新启动tomcat等我想git运行这个“更新 – 代码“命令后,任何用户运行(git push)(从他们的机器,而不是服务器)。 回顾一下,在任何用户(从他们的机器上)推入我的repo之后,shell命令将自动在服务器上执行,就像我login并键入“update-code”一样。 有什么确切的步骤让git做到这一点?

挂钩Linux上用户空间的sycalls

有什么办法可以捕获Linux上的所有系统调用? 我所知道的唯一解决scheme是使用LD_PRELOADàla fakeroot ,但只适用于dynamic链接的应用程序。 此外,这种方法需要枚举所有系统调用,这是我想避免的。

Linux模块钩住进程function

我有一个问题,也许你有这方面的一些信息。 我想在运行过程中挂接接收函数(recv)并修改传入的数据。 我怎么知道,我可以使用内核模块做到这一点,但我找不到有关如何做这样的钩子的信息。 我尝试了另一种方式,像Netfilter,iptables,但是这些方法要慢一些。

Hook函数调用linux mint

几天前,我通过修补一个调用指令来编写一个简单的hook / detour。 它工作在Ubuntu 12.xyz(32位),现在我更新到Linux Mint 17.1(32位),我得到分段错误。 我有两个项目 目标项目调用一个名为goodGuy的函数 由dlopen()加载的库项目,它将覆盖目标应用程序中调用指令的偏移量 在覆盖呼叫指令偏移之前,我通过以下方式修改页面的保护: mprotect(pageOf(address),pagesize,PROT_WRITE|PROT_EXEC|PROT_READ) 这工作正常(返回0)。 当我debugging我的程序时,它试图写入到通话地址时崩溃: memcpy((void*)(address + 1),(void*)&callOffset,4); 看起来我不允许覆盖说明,但为什么? 我将ALSR分开,并用g ++使用-z execstack -fno-stack-protector标志。 你知道如何让我的应用程序写指令吗? 谢谢Alex 编辑 对不起,这里是代码: 目标应用: #include <dlfcn.h> #include <stdio.h> #include <stdio.h> #include <iostream> void goodGuy(); //full lib path ! char libPath[] = "INSER_YOUR_PATH_HERE/lib.so"; int main(){ dlopen(libPath,RTLD_NOW); goodGuy(); return 0; } void goodGuy(){ printf("good […]

为什么这个系统无法正常工作?

我正在尝试创build一个系统范围的钩子来监视进程并终止不需要的进程。 我搜查,发现我需要使用CBT钩子,我第一次尝试失败,这是第二个,前面的问题可以在这里find。 下面的代码构build得很好,但似乎钩子甚至没有被调用! 因为我试图在DllMain()设置断点,但是我从来没有到达那里! 其他function似乎可以访问! 这里的任何方式都是代码片段: dllmain.cpp // dllmain.cpp : Defines the entry point for the DLL application. #pragma once #include "stdafx.h" #include <iostream> #include <fstream> #include <Windows.h> using namespace std; HINSTANCE currentProcessHandle; HOOKPROC hkprcSysMsg; HHOOK hookID; BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { std::ofstream outfile("test.txt"); switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: currentProcessHandle […]

禁用在Linux和Windows中运行程序

我正在Java [Swing]中构build一个计算机自适应testing,并希望在后台运行其他程序,直到testing完成(或用户退出)。 这是为了防止考生在考试中作弊。 我的问题是,如何去做呢? 如何停止创build新任务或阻止用户与其他程序交互? 在问这个问题之前,我的作业是:1.我可以使用JNI并在Windows上调用SetForegroundWindow(HWND)函数。 在Linux中有什么等价物? 使用SetWindowsHookEx()函数与全局LOWLEVEL KEYBOARD HOOK PROC完全禁用键盘。 在Linux中的等价物? 道歉,如果这个问题已经答复之前 –

我如何获得由操作系统提供的dlopen()/ dlsym()的地址

我需要为dlsym()和dlopen()系统调用实现钩子。 为了从钩子调用原始的dlsym(),我需要得到这个系统调用的地址。 我尝试在so-library-constructor-function中获得地址。 但是我只获得了钩子函数的地址。 我尝试将RTLD_DEFAULT指定为处理程序,以及RTLD_NEXT。 当使用RTLD_DEFAULT时,我得到NULL。 当使用RTLD_NEXT时,我得到了钩子函数的地址。 dlopen()我不能用于相同的原因,因为我有dlopen()钩子。 请告诉我,如何获取原始dlopen()和dlsym()函数的地址? 谢谢。