WEB开发网      濠电娀娼ч崐濠氬疾椤愶附鍋熸い鏍ㄧ〒闂勫嫰鏌﹀Ο渚Ц闁诲氦顕ч湁婵犲﹤楠告禍鍓х磼鏉堛劌绗氶柟宄版嚇閹晠宕归銈嗘濠电偞鍨堕幐鎾磻閹捐秮褰掓偐閻戞﹩妫勯梺鎼炲妼鐎涒晝绮嬪澶樻晝闁挎繂鏌婇敃鍌涚厵閻庢稒锚閻忥絾绻濇繝鍐ㄧ伌闁诡垰鍟村畷鐔碱敂閸♀晙绱樺┑鐐差嚟婵儳螞閸曨剚鍙忛柍鍝勬噹缁€澶嬬箾閹存繄锛嶆鐐灲閹綊宕惰濡插鏌涢妸銉ヮ劉缂佸倸绉归弫鎾绘晸閿燂拷 ---闂備焦瀵уú鈺呭箯閿燂拷
开发学院软件开发VC 定制调试诊断工具和实用程序(8) 阅读

定制调试诊断工具和实用程序(8)

 2006-07-20 11:42:17 来源:WEB开发网 闂備線娼уΛ鎾箯閿燂拷闂備礁鎲¢崹鐢垫崲閹扮増鍎嶆い鎺戝€甸崑鎾斥槈濞嗗秳娌紓鍌氱▌閹凤拷濠电姭鎷冮崨顓濈捕闂侀潧娲ゅú銊╁焵椤掍胶鈯曢柕鍥╁仧缁辩偤鏁撻敓锟�闂備線娼уΛ鎾箯閿燂拷  闂備胶枪缁绘鈻嶉弴銏犳瀬闁绘劕鐏氱€氼剟姊洪崹顕呭剰闁逞屽墮缁夊綊寮婚妸褉鍋撻棃娑欏暈闁伙綀浜埀顒傛暬閸嬪﹪宕伴弽褏鏆﹂柨鐕傛嫹
核心提示: Figure 13 远程执行一旦 DLL 被加载到其它进程的地址空间,DllMain 入口点以 DLL_PROCESS_ATTACH 为参数被调用,定制调试诊断工具和实用程序(8)(3),作为安全检查,s_dwProcessID 与运行进程的 ID 进行比较,它是线程专用的存取权限,由于传

Figure 13 远程执行

一旦 DLL 被加载到其它进程的地址空间,DllMain 入口点以 DLL_PROCESS_ATTACH 为参数被调用。作为安全检查,s_dwProcessID 与运行进程的 ID 进行比较。用 GrabHook_SharedBuffer 作为名称创建内存映像文件,对应的共享内存指针被保存在 g_lpvMem。该缓冲被用于在远程进程中运行的 DLL 代码和调用进程自身之间交换大块数据。如果你需要分配一块缓冲,其大小只为远端执行代码所知,你只要用 VirtualAlloc 分配一块内存即可,而不使用内存映像文件,其指针地址被保存在一个共享变量中。然后,你在调用进程中用 ReadProcessMemory 读取缓冲内容。最后用 VirtualFreeEx 来释放它以避免溢出。

接下来的工作就是缓冲拷贝问题以及从远程进程卸载 DLL。使用与 CreateRemoteThread 一样的技术,因为 FreeLibrary 具备与线程过程同样的署名。唯一的窍门是要找到 DLL 的加载地址。Toolhelp32 已被 PSAPI 取而代之,以便代码也能在 Windows NT 中运行。这个注入技术有一点局限。对于 某些进程来说,比如那些以其他用户身份运行的进程,CreateRemoteThread 调用会失败。在这种情况下,内核会有如下的出错记录:

SE: Warning, new thread does not have
SET_THREAD_TOKEN for itself
SE: Check that thread 468.2ec isn''t in
some weird state at the kernel level

但是该 SET_THREAD_TOKEN 看起来并不像任何 SE 特权。相反,它看起来像 THREAD_SET_THREAD_TOKEN,它是线程专用的存取权限。由于传递给 CreateRemoteThread 的参数中安全描述符为 NULL,这似乎就是调用失败的原因。

上一页  1 2 3 4 5  下一页

Tags:定制 调试 诊断

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接