科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Windows CE跨进程内存注入之实践

Windows CE跨进程内存注入之实践

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本章我们开始进行真刀真枪的实战演练。

作者:莫艺潜 来源:天极开发 2007年11月21日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
而在C#的主程序中,我们使用这个DLL挂接explore类的程序窗体,以下给出挂接部分的代码:

int m_hTargetWindow;//要挂接的目标窗体句柄
IntPtr m_hTargetProcess;//目标窗体所属的进程
IntPtr m_hModule; //挂接DLL的句柄

private void Form1_Load(object sender, EventArgs e)
{
 IntPtr tpTemp = IntPtr.Zero, tpTempa = IntPtr.Zero;
 uint tuntApiRet;

 m_hTargetWindow = (int)clsCECoreAPI.FindWindow("Explore", null );//资源管理器 0x0013e800;

 //挂接指定的进程窗体消息
 IntPtr thCurrentProcess = clsCECoreAPI.GetCurrentProcess();
 m_hTargetProcess=IntPtr.Zero ;// (IntPtr) (unchecked((int)0xedd84e4a));
 tuntApiRet= clsCECoreAPI.GetWindowThreadProcessId(new IntPtr(unchecked((int) m_hTargetWindow)),
ref m_hTargetProcess);

 string tstrArgument;
 tstrArgument = "\\Program Files\\processinject\\HookWindowsProcMFCDLL.dll";// HookWindowsProcMFCDLL.dll";
 IntPtr tpArg0;

 int tintOriginalKMode = clsCECoreAPI.SetKMode(1);
 int tintOriginalProcPermission = (int)clsCECoreAPI.SetProcPermissions(0xffffffff);

 IntPtr tpFuncProc = clsCECoreAPI.GetProcAddress(clsCECoreAPI.GetModuleHandle("coredll.dll"), "LoadLibraryW");

 CallBackInfo tudtCALLBACKINFO;

 tpArg0 = clsCECoreAPI.MapPtrToProcess(tstrArgument, thCurrentProcess);

 tudtCALLBACKINFO.hProc = m_hTargetProcess;// Proc;
 tudtCALLBACKINFO.pfn = clsCECoreAPI.MapPtrToProcess(tpFuncProc, m_hTargetProcess);
 tudtCALLBACKINFO.pvArg0 = tpArg0;
 m_hModule =new IntPtr(unchecked(
(int) clsCECoreAPI.PerformCallBack4(ref tudtCALLBACKINFO,IntPtr.Zero,IntPtr.Zero,IntPtr.Zero )));
 //clsCECoreAPI.Sleep(1000);

 IntPtr thModule = clsCECoreAPI.LoadLibrary("HookWindowsProcMFCDLL.dll");
 tpFuncProc = clsCECoreAPI.GetProcAddress(thModule, "fnAttachWinProc");

 tpArg0 = (IntPtr) m_hTargetWindow;// clsCECoreAPI.MapPtrToProcess(ref thTargetWindow, thCurrentProcess);

 tudtCALLBACKINFO.hProc = m_hTargetProcess;
 tudtCALLBACKINFO.pfn = clsCECoreAPI.MapPtrToProcess(tpFuncProc, m_hTargetProcess);
 tudtCALLBACKINFO.pvArg0 = tpArg0 ;
 tuntApiRet = clsCECoreAPI.PerformCallBack4(ref tudtCALLBACKINFO,IntPtr.Zero,IntPtr.Zero,IntPtr.Zero );
 //clsCECoreAPI.Sleep(5000);
}

[DllImport("HookWindowsProcMFCDLL.dll")]
public static extern int fnAttachWinProc(IntPtr ni_hAttatchWin);

[DllImport("HookWindowsProcMFCDLL.dll")]
public static extern int fnDetachWinMsgProc(IntPtr ni_hDetachWin);

  取消挂接的代码根据上述代码很容易就可以建立,不再细叙。

  注:clsCECoreAPI的函数全是封装的标准CE API,由于这些API在msdn 中都有详细的文档注释,因篇幅所限,不再将代码一一列举.

  在执行这个程序时,将模拟器的共享路径设为PC机的桌面,这样模拟器的storage card目录就等同桌面了,点模拟器的开始菜单,选程序,你就可以看到explore窗体的消息都输出到桌面的WinProcInfo.txt文件中了,运行结果如下:

点击放大此图片

  目前本程序只在PPC2003/wm5 for PPC测试通过,由于smartphone系统在编译时使用了和ppc系统不同的机制,内存运作不明,本程序在smartphone上无法正确运行,有好的建议的话请指教一二,谢谢.如对移动设备开发感兴趣可与本人探讨,我的联系方式: missilecat@163.com QQ:85403578,也可加入以下QQ群讨论:24123368。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章