dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>操作系统>文章内容
Windows CE跨进程内存注入之实践
来源: 天极开发 作者: 莫艺潜 <
在文章《浅析Windows CE跨进程内存注入实现窗体消息挂接(上)》中,我们已经得到了这个七巧板游戏所需要的所有小板块,剩下的事就是等待我们按一定顺序将合适的板块放到合适的位置,本章我们开始进行真刀真枪的实战演练。

  程序目标:捕获explore窗体(也就是程序窗体的消息并输出到WinProcInfo.txt中)

  程序的执行步骤设计如下:

  1、编写一个窗体消息挂接DLL,这个DLL提供一个,函数中利用setwindowlong函数将窗体的默认消息处理过程改为这个挂接DLL中定义的一个窗体过程。

  2、在C#程序中利用findwindow等API函数获得exlore类窗体的句柄及窗体所属的进程,并使用performcallback4在目标进程空间中执行coredll.dll的loadLibrary函数将我们写的挂接dll放到目标进程中。

  3、在C#程序中使用performcallback4在目标进程空间中执行挂接DLL提供的导出接口函数实现跨进程窗体消息截获.

  一、程序的实现如下:

  在VS2005中建立一个智能设备的MFC DLL,命名为HookWindowsProcMFCDLL。

  在HookWindowsProcMFCDLL.cpp中进行挂接DLL的核心编码:

LRESULT CALLBACK fnHookWindowProc(HWND hwnd,UINT msg,WPARAM wparam, LPARAM lparam);

int __declspec(dllexport) WINAPI fnAttachWinProc(HWND ni_hAttatchWin,PVOID ,PVOID,PVOID);

int __declspec(dllexport) WINAPI fnDetachWinMsgProc(HWND ni_hDetachWin);

WNDPROC tpOldWindowProc;

FILE *m_pDebugOutputFile;

//将一个窗体消息处理挂接到net精简版MessageWindow对象上的代码
typedef struct
{
 WNDPROC OldWinProc;//保留窗体原始消息处理过程的函数指针
 HWND WindowHandle;//保存net精简版中对应的窗口挂接的MessageWindow对象的句柄
} DEFUDT_AttachWinInfo; //end struct

CMap<HWND,HWND,DEFUDT_AttachWinInfo,DEFUDT_AttachWinInfo> m_aAttachWinInfoMap;

//对指定的窗口进程进行挂接
int __declspec(dllexport) WINAPI fnAttachWinProc(HWND ni_hAttatchWin,
PVOID ni_0,
PVOID ni_1,
PVOID ni_2 )
{
 DEFUDT_AttachWinInfo tudtAttachWinInfo;
 m_pDebugOutputFile = fopen("\\Storage Card\\WinProcInfo.txt", "w");
 WNDPROC tpOldWindowProc=(WNDPROC)::SetWindowLong(ni_hAttatchWin, GWL_WNDPROC,(LONG) fnHookWindowProc );
 fprintf(m_pDebugOutputFile,"Attatch successfully! OldWindowProc: %08X\n",tpOldWindowProc);
 tudtAttachWinInfo.OldWinProc=tpOldWindowProc ;
 tudtAttachWinInfo.WindowHandle=ni_hAttatchWin;
 m_aAttachWinInfoMap.SetAt(ni_hAttatchWin,tudtAttachWinInfo);
 fclose(m_pDebugOutputFile);
 return 77;// (int)tpOldWindowProc ;
}//end function

int __declspec(dllexport) WINAPI fnDetachWinMsgProc(HWND ni_hDetachWin)
{
 DEFUDT_AttachWinInfo tudtAttachWinInfo;
 WNDPROC tpOldWindowProc;

 //取得在ncf中消息接收窗口对应的原始消息处理函数的函数指针
 m_aAttachWinInfoMap.Lookup(ni_hDetachWin,tudtAttachWinInfo) ;

 //将窗体的消息处理函数设为默认的处理过程
 tpOldWindowProc =(WNDPROC) SetWindowLong(ni_hDetachWin,GWL_WNDPROC , (LONG)tudtAttachWinInfo.OldWinProc);

 //将挂接信息消息处理映谢类中删除
 m_aAttachWinInfoMap.RemoveKey(ni_hDetachWin);

 return (int)tpOldWindowProc ;

}//end function


LRESULT CALLBACK fnHookWindowProc(HWND hwnd,UINT msg,WPARAM wparam, LPARAM lparam)
{
 DEFUDT_AttachWinInfo tudtAttachWinInfo;
 m_aAttachWinInfoMap.Lookup(hwnd,tudtAttachWinInfo) ;
 m_pDebugOutputFile = fopen("\\Storage Card\\WinProcInfo.txt", "a");
 if (m_pDebugOutputFile!=NULL)
 {
  fprintf(m_pDebugOutputFile,"HWND: %08X Msg: %08X Wparam %08X Lparam %08X \n",
hwnd,msg,wparam,lparam);

 }//EHD IF

 fclose(m_pDebugOutputFile);
 //tudtAttachWin=maatt
 LRESULT tobjResult= ::CallWindowProc(tudtAttachWinInfo.OldWinProc ,hwnd,msg,wparam,lparam);
 return tobjResult;
}//end function
 
 

上一篇:Windows CE跨进程内存注入之原理   下一篇:10年磨一剑 微软移动开发技术发展综述
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·Linux常用基本命令及应用技巧
·进程和线程概念
·别浪费你的大内存 如何给Windows
·Vista系统下使用率最高的11条命
·写得蛮好的linux学习笔记
·学会在Linux下对硬盘分区
·找回Redhat的超级用户密码
·教你快速释放Windows系统资源的
·GDB教程
·Cron服务配置详解
·Linux与Unix二大操作系统编程的
·Linux 2.6 内核的嵌入式系统应用
  相关文章
·Windows CE跨进程内存注入之原理
·10年磨一剑 微软移动开发技术发
·linux内核初始化及启动之用户模
·WM5.0模拟器用AS来使用PC机的网
·linux内核初始化及启动之start_k
·Windows CE下驱动程序开发基础
·嵌入式linux启动信息注释之bootl
·在J2ME手机程序开发中使用颜色
·ARM的嵌入式Linux移植体验之应用
·使用J2ME程序测试MIDlet的生命周
·ARM的嵌入式Linux移植体验之设备
·嵌入式系统中文输入法的设计
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763