傻大方


首页 > 潮·科技 > >

深入考察WOW64子系统运行机制及其Hooking技术(上)( 三 )



按关键词阅读:


深入考察WOW64子系统运行机制及其Hooking技术(上)文章插图
【深入考察WOW64子系统运行机制及其Hooking技术(上)】图11 系统调用完成后恢复CPU状态 , 这时 , 有一个简单的路径和一个复杂的路径来处理XMM寄存器
更简单的情况是创建一个jmp , 在恢复WOW64_CONTEXT中所有已保存的寄存器后 , 将使用段选择器0x23转换为32位模式 。 在较为复杂的情况下 , 还会额外恢复一些段、xmm值以及WOW64_CONTEXT结构中保存的寄存器 , 然后通过iret转换为32位模式 。 在正常情况下 , 构建的jmp如图12所示:
深入考察WOW64子系统运行机制及其Hooking技术(上)文章插图
图12 通过动态构建的jmp切换到32位模式
至此 , 我们的调用跟踪已完成 。 WOW64层已切换回32位模式 , 并将在我们开始使用的syscall stub中的Wow64SystemServiceCall之后的ret处继续执行 。 在了解了WOW64层本身的执行流程后 , 接下来 , 让我们开始考察之前提到的Wow64SystemServiceEx调用 。
图13展示了Wow64SystemServiceEx例程中的一些逻辑 , 我们稍后将用到它们:
深入考察WOW64子系统运行机制及其Hooking技术(上)文章插图
图13 分派系统调用之前和之后调用的日志记录例程
该例程首先会查询服务表 , 该服务表保存有指向例程的指针 , 这些例程将传递的参数数组转换为常规64位系统模块期望的64位类型 。 这个参数数组正是存放在r14中的栈槽(stack slot) 。
这里有两个对LogService函数的调用 , 但是只有在动态库%WINDIR%\system32\wow64log.dll已被加载且导出了Wow64LogInitialize、Wow64LogSystemService、Wow64LogMessageArgList和Wow64LogTerminate函数的情况下 , 这些调用才能正常生效 。 不过 , 在默认情况下 , Windows系统中并没有包含这个动态库;要将这个动态库放入上述目录 , 需要具有管理员权限 。
下一节将详细介绍如何使用该日志记录DLL来hook通过这个wow64layer进行模式切换的系统调用 。 因为在服务系统调用前后都会调用日志记录例程LogService , 所以 , 我们可以实现一种标准的内联hook风格的回调函数 , 来检查其参数和返回值 。
小结在本文中 , 我们为读者详细介绍了WOW64子系统的内部运行机制 , 在下一篇文中 , 我们将继续为读者介绍WOW64子系统的Hooking技术 。
欢迎登录安全客 -有思想的安全新媒体www.anquanke.com/加入交流群1015601496 获取更多最新资讯
原文链接:


稿源:(未知)

【傻大方】网址:http://www.shadafang.com/c/111J2RB2020.html

标题:深入考察WOW64子系统运行机制及其Hooking技术(上)( 三 )


上一篇:荣耀业务资产|尘埃落定,荣耀不再属于华为

下一篇:值得|这三款骁龙865手机,价格都在2500元以内网友等待是值得的