您的位置:程序门 -> c/c++ -> c++ 语言



大家请进 很弱的一个问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


大家请进 很弱的一个问题
发表于:2007-09-04 19:28:32 楼主
用hook   实现的   dll   注入   没道理错啊   麻烦各位看下   谢谢


dll     code:

#include   <windows.h>

 

lresult   callback   myproc(int   ncode,   wparam   wparam,   lparam   lparam);  

#pragma   data_seg( "share ")
static   hhook   hhook   =   null;   //   钩子句柄  
static   hinstance   hinst=null;   //   当前dll句柄  
#pragma   data_seg()

#pragma   comment(linker, "/section:share,rws ")
 
int   winapi   dllmain(hinstance   hinst,   dword   reason,   lpvoid   lpreserved)  
{  
        hinst   =   hinst;  
    return   1;  
}  
//---------------------------------------------------------------------------  
//   安装钩子函数  
bool   __stdcall   sethook(dword   dwthreadid)  
{  
    if   (dwthreadid)  
    {  
       
        hhook   =   setwindowshookex(wh_getmessage,   (hookproc)myproc,hinst,dwthreadid);  

        if   (hhook)  
            return   true;  
                                                                else
                                                                                                return   false;
    }
    else  
    {  
        messagebox(null,   "dll即将从记事本进程空间中撤出! ", "dll ",  
            mb_iconinformation   +   mb_ok);  
        return   (unhookwindowshookex(hhook));  
    }  
    return   true;  
}  

//   钩子函数  
lresult   callback     myproc(int   ncode,   wparam   wparam,   lparam   lparam)  
{  
    messagebox(null, "fun ", "fun ",0);
    return   (callnexthookex(hhook,   ncode,   wparam,   lparam));  
}  


def   code:

library   hookinjectdll
exports
sethook


exe   code:
    startupinfo   stat;
    process_information   proce;
    memset(&stat,0,sizeof(stat));

    myhook   myhookh;
    hmodule   h_mod=   loadlibrary( "d:\\hookinjectdll.dll ");
    if(h_mod)
    {
        myhookh=(myhook)(getprocaddress(h_mod, "sethook "));
        bool   hret=createprocess(null, "c:\\windows\\system32\\notepad.exe ",null,null,false,0,null,null,&stat,&proce);
       
        if(hret)    
        {    
            char   szmsg[max_path];
            sprintf(szmsg, "%d ",proce.dwprocessid);
                myhookh(proce.dwthreadid);
            messagebox(szmsg);
                       
        }
        else
            messagebox( "wrong ");  


问题是   为什么注入不了呢???
发表于:2007-09-04 20:21:261楼 得分:0
......?没人么
发表于:2007-09-05 11:51:572楼 得分:0
......?没人么
发表于:2007-09-05 12:39:353楼 得分:0
你创建进程和下钩子之间太快了,那边的进程可能还没准备好。
在   myhookh(proce.dwthreadid);   之前加个   sleep   几秒试试。
发表于:2007-09-05 15:32:484楼 得分:0
不是的   一样没有用
发表于:2007-09-05 15:43:315楼 得分:0
考,这也叫很弱的问题,老子都不懂window的hook是个什么东西
发表于:2007-09-05 16:04:486楼 得分:0
我试的时候加个   sleep(5000)   就好了
发表于:2007-09-05 16:10:197楼 得分:0
在dll中加上这一句#pragma   comment(linker, "/section:share,rws ")
还有你的这一句lresult   callback   myproc(int   ncode,   wparam   wparam,   lparam   lparam)
{
  messagebox(null, "fun ", "fun ",0);
    return   (callnexthookex(hk,   ncode,   wparam,   lparam));  
}
改了吧,不然,嘿嘿。。。
改了的代码贴一下:
dll代码
#include   "stdafx.h "
#include <windows.h>
#pragma   data_seg( "share ")
handle   hinst=null;
hhook   hk=null;
#pragma   data_seg()
#pragma   comment(linker, "/section:share,rws ")

lresult   callback   myproc(int   ncode,   wparam   wparam,   lparam   lparam);  
bool   apientry   dllmain(   handle   hmodule,  
                                              dword     ul_reason_for_call,  
                                              lpvoid   lpreserved
  )
{
hinst   =   hmodule;
        return   true;
}
_declspec   (dllexport)   bool   sethook(dword   threadid)
{
if(threadid)
{
hk=setwindowshookex(wh_getmessage,myproc,(hinstance)hinst,0);
if(hk)
{
messagebox(null, "hook   success ", "ok ",mb_ok);
return   0;
}
else   return   0;
}
else
{
messagebox(null,   "dll即将从记事本进程空间中撤出! ", "dll ",   mb_iconinformation   +   mb_ok);
return   unhookwindowshookex(hk);
}
}
lresult   callback   myproc(int   ncode,   wparam   wparam,   lparam   lparam)
{
  messagebox(null, "fun ", "fun ",0);
    return   (callnexthookex(hk,   ncode,   wparam,   lparam));  
}


exe代码:
typedef       bool   (     *myhook)(dword   threadid)   ;
int   main(int   argc,   char*   argv[])
{
startupinfo   stat;
    process_information   proce;
    memset(&stat,0,sizeof(stat));
    stat.cb=sizeof(stat);

    myhook   myhookh;
    hmodule   h_mod=   loadlibrary( "e:\\code\\injectdll\\debug\\injectdll.dll ");
    if(h_mod)
    {
        myhookh=(myhook)(getprocaddress(h_mod, "?sethook@@yahk@z "));
        bool   hret=createprocess(null, "c:\\windows\\system32\\notepad.exe ",null,null,false,0,null,null,&stat,&proce);
       
        if(hret)    
        {    
            char   szmsg[max_path];
            sprintf(szmsg, "%d ",proce.dwprocessid);
                myhookh(proce.dwthreadid);
            messagebox(null,szmsg, "ok ",mb_ok);
                       
        }
        else
            messagebox(null, "wrong ", "err ",mb_ok);
return   0;
    }
    return   0;
}




快速检索

最新资讯
热门点击