周壑x64位内核学习(二)、x64内核32位程序的运行
实验环境:win10 1903 + wmware
实验程序:winxp sp3下的记事本程序
实验工具:windbg + x32dbg + x64dbg
一、32位程序切入64位的大致流程
ctrl + G跳转到系统API地址
call edx ,edx的地址是77898c50
ctrl + G跳转到那里
wow64Transition好像是一个宏,双击进入
可以看到一个跨段跳转,跳转后 cs = 0x33
这里,我们回想一下gdt表
根据段描述符的l标志,一般32位的程序的cs段是指向第四个段描述符的,但这里指向了第6个段描述符,也就是l位至1的段描述符(判断理由:拆分段选择子)。这之后程序将被当作64位程序来运行..
同样,这之后的指令也会被当作64位来处理!!
二、windbg调试x32错误分析代码
由于x32dbg只能分析32位的指令,所以x32dbg将会把之后的指令分析错误,x64dbg也不能调试32位程序,我们可以使用windbg进行调试
.process /i 中 /i命令功能: 以侵入性地检查进程状态
我们可以发现,在ntdll.dll中不但存在32位代码,也存在64位代码
那么我们写的程序也可以通过跨段跳转的方式实现同时包含32位与64位代码
三、跨段实现兼容32位与64位代码
这是抄的周壑老师写的程序
目的就是隐藏字符串Hello 64
大致思路就是跨段跳转进64位环境,把字符串保存给r12寄存器后再跨段回来,需要的时候再跨段取出来。。
在保存的期间内,只要r12寄存器不被其他api修改,就能达到隐藏的目的
__EOF__

本文作者:_TLSN
本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16057095.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/lordtianqiyi/articles/16057095.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现