S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

About ShutDown of Windows(四)

Posted on 2009-11-17 21:54 S.l.e!ep.¢% 阅读(204) 评论(0)  编辑 收藏 引用 所属分类: RootKit
接着 About ShutDown of Windows(三)
折腾着,没多大收获

Create 了一个 MFC 的DLL

CHookDLLApp theApp;

HHOOK g_Hook 
= NULL;

LRESULT CALLBACK MyKeyHook(
int code, WPARAM wParam, LPARAM lParam)
{
#if (_WIN32_WINNT < 0x0400)
/*
* Structure used by WH_KEYBOARD_LL
    
*/
    typedef 
struct tagKBDLLHOOKSTRUCT {
        DWORD   vkCode;
        DWORD   scanCode;
        DWORD   flags;
        DWORD   time;
        DWORD   dwExtraInfo;
    } KBDLLHOOKSTRUCT, FAR 
*LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
#endif
    
    PKBDLLHOOKSTRUCT kbDLLHOOK 
= (PKBDLLHOOKSTRUCT)lParam;
    
    
const char *info = NULL;
    
    
if (wParam == WM_KEYDOWN)
        info 
= "key down";    
    
else if (wParam == WM_KEYUP)
        info 
= "key up";
    
else if (wParam == WM_SYSKEYDOWN)
        info 
= "sys key down";    
    
else if (wParam == WM_SYSKEYUP)
        info 
= "sys key up";
    
    FILE
* f = fopen("hook.txt""a+");
    
    CString strLog;
    strLog.Format(
"%s - vkCode [%04x], [%c] scanCode [%04x]\n", info, kbDLLHOOK->vkCode, kbDLLHOOK->vkCode, kbDLLHOOK->scanCode);
    
    fwrite(strLog, 
1, strLog.GetLength(), f);
    fclose(f);
    
    
// always call next hook
    return CallNextHookEx(g_Hook, code, wParam, lParam);
}      


void Hook()
{
    
// TODO: Add extra initialization here
#ifndef WH_KEYBOARD_LL
#define WH_KEYBOARD_LL 13
#endif

    g_Hook 
= SetWindowsHookEx(WH_KEYBOARD_LL, MyKeyHook, AfxGetApp()->m_hInstance, 0);
    
    
if( g_Hook == NULL )
        AfxMessageBox(
"Failed to Set Hook");

}

; HookDLL.def : Declares the module parameters for the DLL.

LIBRARY      
"HookDLL"
DESCRIPTION  
'HookDLL Windows Dynamic Link Library'

EXPORTS
    ; Explicit exports can go here
    Hook         @
1

Create 了一个MFC的工程

BOOL CHookTestDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    
// Add "About" menu item to system menu.

    
// IDM_ABOUTBOX must be in the system command range.
    ASSERT((IDM_ABOUTBOX & 0xFFF0== IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX 
< 0xF000);

    CMenu
* pSysMenu = GetSystemMenu(FALSE);
    
if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        
if (!strAboutMenu.IsEmpty())
        {
            pSysMenu
->AppendMenu(MF_SEPARATOR);
            pSysMenu
->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    
// Set the icon for this dialog.  The framework does this automatically
    
//  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE);            // Set big icon
    SetIcon(m_hIcon, FALSE);        // Set small icon
    
    
// TODO: Add extra initialization here
#ifndef WH_KEYBOARD_LL
    
#define WH_KEYBOARD_LL 13
#endif
    
//     g_Hook = SetWindowsHookEx(WH_KEYBOARD_LL, MyKeyHook, AfxGetApp()->m_hInstance, 0);
//     
//     if( g_Hook == NULL )
//         AfxMessageBox("Failed to Set Hook");

    TCHAR szPath[MAX_PATH] 
= {0};
    GetModuleFileName(NULL, szPath, MAX_PATH);
    PathRenameExtension(szPath, _T(
""));

    typedef 
void (*TYPE_pfnLoadLibrary)();
    TYPE_pfnLoadLibrary pfnLoadLibrary 
= NULL;

    HMODULE Module 
= LoadLibrary(szPath);
    pfnLoadLibrary 
= (TYPE_pfnLoadLibrary)GetProcAddress(Module, "Hook");
    
    pfnLoadLibrary();

    
return TRUE;  // return TRUE  unless you set the focus to a control
}

时间太紧,没做一些异常判断处理
HOOK成功了,用 SysCheck 工具一看, 只看到了 HookTest.exe 里面加载了一个HookDLL.dll

采用 injecteddll 工具也没有看到所谓的“注入”DLL

是否“注入”成功,不得所知
所谓的“注入”又该怎么看到的呢?明天再解决它。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理