线程注入的低级问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 03:54:05
各位朋友好!
我的系统为Windows XP SP3
我将一个dll注入到另一个线程中,但有两个问题:
1) 注入dll后,我在DLL_PROCESS_ATTACH中设置了一个hook(WH_MOUSE_LL),但随着dll退出,hook就直接被卸载掉了,请问要怎样避免这点?我发现,在DLL_PROCESS_ATTACH中增加一个MessageBox ()就可以,但会导致被注入的程序停止响应,但hook工作正常,那么有没有办法既保全hook,有让程序有相应呢?
2) 怎样才能够将dll注入svchost.exe这样的线程?需要怎样提升系统权限?

希望各位能够给答案,最好能给出代码块,如果有注释就更好了!
谢谢各位!

必须让DLL入口函数尽快返回,否则主程序就会无法响应,为了让DLL执行程序,你可以在DLL入口函数中再创建一个线程去执行代码。

注入svchost.exe需要SE_DEBUG权限,楼上已经说过了。

DLL的退出必定意味着DLL的卸载,如果DLL退出后钩子函数还在,那么钩子函数地址处的内存已经被释放,只要有程序触发钩子就会崩溃。所以WINDOWS不会让你这样做。

如果想保留钩子,最好不要让DLL被他人卸载。

1) 会不会是你把MessageBox的父窗口设成被注入程序的主窗口了?按说不在同一个线程中是不会阻塞消息循环的。
2)代码如下,收集自网络,出处忘了。
BOOL UpdateProcessPrivilege( HANDLE hProcess, LPCTSTR lpPrivilegeName = SE_DEBUG_NAME )
{
HANDLE hToken;
if ( ::OpenProcessToken( hProcess, TOKEN_ALL_ACCESS, &hToken ) ) {

LUID destLuid;
if ( ::LookupPrivilegeValue( NULL, lpPrivilegeName, &destLuid ) ) {

TOKEN_PRIVILEGES TokenPrivileges;
TokenPrivileges.PrivilegeCount = 1;
TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
TokenPrivileges.Privileges[0].Luid = destLuid;
int iResult;
if ( iResult = ::AdjustTokenPrivileges( hToken, FALSE, &TokenPrivileges,
0, NULL, NULL ) ) {