随笔-43  评论-2  文章-6  trackbacks-0
 
     摘要: KeyHookLib.h Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1#ifdef KEYHOOKLIB_EXPORTS 2#define KEYHOOKLIB_API __declspec...  阅读全文
posted @ 2012-08-31 01:43 寻步 阅读(502) | 评论 (0)编辑 收藏
09DllDemo.h
1#ifdef MY09DLLDEMO_EXPORTS
2#define MY09DLLDEMO_API __declspec(dllexport)
3#else
4#define MY09DLLDEMO_API __declspec(dllimport)
5#endif
6
7//声明输出函数
8MY09DLLDEMO_API void MyMessageBox(LPCTSTR pszContent);

09DllDemo.cpp
 1#include "stdafx.h"
 2#include "09DllDemo.h"
 3
 4HMODULE g_hModule;
 5
 6BOOL APIENTRY DllMain( HANDLE hModule, 
 7                       DWORD  ul_reason_for_call, 
 8                       LPVOID lpReserved
 9                     )
10{
11    switch (ul_reason_for_call)
12    {
13        case DLL_PROCESS_ATTACH:
14            g_hModule = (HMODULE)hModule;
15            break;
16        case DLL_THREAD_ATTACH:
17        case DLL_THREAD_DETACH:
18        case DLL_PROCESS_DETACH:
19            break;
20    }

21    return TRUE;
22}

23//定义输出函数
24void MyMessageBox(LPCTSTR pszContent)
25{
26    char path[MAX_PATH];
27    GetModuleFileName(g_hModule,path,MAX_PATH);
28    MessageBoxA(NULL,pszContent,path,MB_OK);
29}

09DllDemo.def
1EXPORTS
2    MyMessageBox


在09ImportDemo工程中,引用导出的函数:
09ImportDemo.cpp
 1#include "stdafx.h"
 2#include <Windows.h>
 3
 4//定义要引用函数的指针
 5typedef void (*pMyFun)(LPCSTR);
 6int main()
 7{
 8    //加载目标Dll
 9    HMODULE hModule = LoadLibrary("09DllDemo.dll");
10    //得到目标函数的地址
11    pMyFun p = (pMyFun)GetProcAddress(hModule,"MyMessageBox");
12    if (p)
13    {
14        //引用函数
15        p("Hello World!");
16    }

17    FreeLibrary(hModule);
18    return 0;
19}
posted @ 2012-08-30 23:58 寻步 阅读(316) | 评论 (0)编辑 收藏

Windows应用程序的运行模式是基于消息驱动的,任何线程只有注册了消息类都有一个消息队列来接收用户的输入消息系统消息。为了取得特定线程接收或发送的消息,就要用的Windows提供的钩子。

1.把代码注入不同的进程地址空间。

2.在该进程的上下文中执行注入的代码。

 

得到另外一个进程的密码通常有三种可能性来解决这个问题:

1.将你的代码放入某个dll,然后通过Windows钩子映射该dll到远程进程;

2.将你的代码放入某个dll,然后通过CreateRemoteThreadLoadLibrary技术映射该dll到远程进程;

3.如果不写单独的dll,可以直接将你的代码拷贝到远程进程--通过WriteProcessMemory--CreateRemoteThread启动它的执行。

 

通常,任何进程都可以通过LoadLibrary API动态加载dll。但是,如何强制一个外部进程调用这个函数呢?答案是:CreateRemoteThread

posted @ 2012-08-28 23:22 寻步 阅读(348) | 评论 (0)编辑 收藏
仅列出标题
共5页: 1 2 3 4 5