目前网上流传的代码都是可以插入到 普通EXE文件的 几乎都不可以插入到系统EXE文件比如我想插入到
SVCHOST.EXE 就做不到,而普通的计算器文件 cacl.exe就能插入。

解决方案 »

  1.   

    一般都是通过挂钩消息来注入的吧,而SVCHOST等没有消息循环,因此不能用这种方法;可以用注册表注入法。
      

  2.   

    可以用注册表注入法。
    =================
    注册表注入好像只对GUI程序有效吧
      

  3.   

    挂钩消息需要有消息循环的进程,SVCHOST.EXE 没有消息循环
      

  4.   


    up
    ps:楼主注入进程想干啥?
      

  5.   

    我看了一下注册表法这种方法虽然可以加载 但是不能运行dll里面的内容load不符合啊~!
      

  6.   

    你要将代码注入EXE?
    首先你得知道目标PE节之间有多少空余空间?
    不过这些空间长度不固定不好掌握,一般都是通过内存注入。
    一个思路
      

  7.   

    HANDLE hRemoteProcess= NULL;
    hRemoteProcess = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwRemoteProcessId );
    // 权限是这样的应该是最高了把
      

  8.   

    还要提升你程序的权限
    HANDLE hToken;
    TOKEN_PRIVILEGES tp; OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken);
    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);

    tp.PrivilegeCount = 1;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tp, NULL, NULL, NULL);
      

  9.   

    BOOL EnabledDebugPrivilege() 
    { // 兄台的代码和 我原来的代码是一样的 
    HANDLE hToken; 
    TOKEN_PRIVILEGES tkp; if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
    return false; LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); //SeDebugPrivilege-->SE_SHUTDOWN_NAME 改成这样也不行tkp.PrivilegeCount = 1; 
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken,false,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0); if (GetLastError() != ERROR_SUCCESS) 
    return false;  
    }
      

  10.   

    你要将代码注入EXE? 
    首先你得知道目标PE节之间有多少空余空间? 
    不过这些空间长度不固定不好掌握,一般都是通过内存注入。 
    一个思路
    ============
    注入EXE应该和PE节没有太多关系,这里的问题主要是我们远程注入的方法多是通过消息挂钩来处理的,但是一些系统后台程序没有消息队列,本身也不接受消息,所以无法注入,基本上,这个很难实现
      

  11.   

    smss进程你就注入不了,因为它根本不就调用user23,gdi32,kernel32
      

  12.   

    HINSTANCE calldll;
    calldll=LoadLibrary("../hello/Debug/hello.dll"); //hello.dll为你要加入到exe的dll文件,引号里面是他的路径
    if (NULL==calldll)
    {
    MessageBox("load dll failed!");
    // return FALSE;
    }
    typedef void(_stdcall *pFunShowDlg)(CString);
    pFunShowDlg pShowDlg;
    pShowDlg=(pFunShowDlg)GetProcAddress(calldll,"ShowDlg");//ShowDlg是dll提供的方法
    if (NULL==pShowDlg)
    {
    MessageBox("Function load failed!");
    // return FALSE;
    }
    pShowDlg;
    FreeLibrary(calldll);