找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2577|回复: 0

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

[复制链接]

307

主题

228

回帖

7345

积分

用户组: 真·技术宅

UID
2
精华
76
威望
291 点
宅币
5595 个
贡献
253 次
宅之契约
0 份
在线时间
949 小时
注册时间
2014-1-25
发表于 2015-1-13 23:53:04 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

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

  1. void main()
  2. {
  3.         _asm nop;
  4.         _asm nop;
  5.         _asm nop;
  6.         _asm nop;
  7.         _asm nop;
  8.         _asm nop;
  9.         _asm mov eax,FS:[0];
  10.         _asm nop;
  11.         _asm nop;
  12.         _asm nop;
  13.         _asm nop;
  14.         _asm nop;
  15.         _asm mov eax,FS:[0x30];
  16.         _asm nop;
  17.         _asm nop;
  18.         _asm nop;
  19.         _asm nop;
  20.         _asm nop;
  21.         _asm nop;
  22.         _asm nop;
  23.         _asm nop;
  24.         _asm nop;
  25.         _asm nop;
  26.         _asm nop;
  27.         _asm nop;
  28.         _asm nop;
  29. }
复制代码

    编译以后,使用调试器打开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]可以同理类推
我的方法还不错吧。硬件断点和内存断点十分有用,尤其在破解和动态调试时,例如破解试用期,只需暂停程序,搜索内存,找到之后下访问断点,就能找到执行分支,快速定位关键代码!!!
回复

使用道具 举报

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-4-30 00:31 , Processed in 0.041823 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表