如何捕获程序mov eax,fs:[0]的行为?


layout: post
title: 如何捕获程序mov eax,fs:[0]的行为?
categories: Debug
description: 如何捕获程序mov eax,fs:[0]的行为?
keywords:
url: https://lichao890427.github.io/ https://github.com/lichao890427/


  这个问题我今天学习调试时突发奇想想到的,FS:[0]处能做不少事情,反调试、获取tib peb数据、异常处理,如果能提前拦截到程序mov eax,fs:[0],mov eax,fs:[0x30]等行为会不会是个很好的想法呢?以下是我的研究成果:

void main()
{
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm mov eax,FS:[0];
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm mov eax,FS:[0x30];
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
    _asm nop;
}

  编译以后,使用调试器打开exe。对于ollydbg,为了精确控制代码范围,打开查看->源文件,选择1.cpp后,查看其源代码,并右键在第一个nop和最后一个nop处下断点。fs对应线性地址直接在寄存器一栏给出,我这里是7EFDD000,因此下硬件断点:hr 7EFDD000,如果设置成功,则调试->硬件断点就能看到,测试结束后从这里删除。对于windbg,使用命令dg fs得到fs:[0]对应线性地址,我的结果如下:

P Si Gr Pr Lo
Sel Base Limit Type l ze an es ng Flags
0053 7efdd000 00000fff Data RW Ac 3 Bg By P Nl 000004f3

  接着下4字节硬件访问断点 ba r4 7efdd000,分别运行程序,会发现在访问fs:[0]处断下!fs:[0x30]可以同理类推,硬件断点和内存断点十分有用,尤其在破解和动态调试时,例如破解试用期,只需暂停程序,搜索内存,找到之后下访问断点,就能找到执行分支,快速定位关键代码!!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容