zoukankan      html  css  js  c++  java
  • 学习:条件[记录]断点

    条件断点:条件断点是一种拥有可设置条件属性,满足一定条件才触发的断点。

    shark恒老师说CC断点和条件断点差不多,只是条件断点需要条件成立,OD才会进行捕获异常,但是他说以后会经常用到,所以自己就另外写一个来记录

    修改00401002反汇编地址为mov eax,0x4

    00401002 B8 04000000 mov eax,0x4

    然后对下面的地址进行设置条件断点 快捷键为shift+f2,EAX == 00000004

    00401007 |. A3 CA204000 mov dword ptr ds:[0x4020CA],eax

    然后F9运行程序,发现成功下断点

    条件语句可以与或非等等都行,比如以下

    eax == 00000004 && eax == 44444444

    eax == 00000004 || eax == 44444444

    eax != 00000004 || eax != 44444444


    条件记录断点:

    在同一个MessageBox windows api函数触发的时候,还可以根据其触发的地址来判断是否进行断点,使用条件记录断点 快捷键shift+F4

    1、进行跟随表达式Ctrl+G,MessageBox,来到user32.dll的领空,然后shift+F4,进行设置记录断点

    2、使用ALT+L,打开记录窗口,能观察每次MessageBox触发的时候的记录

    其中有两条红标的记录一个是COND:0040137D,另一个是CALL 到 MessageBoxA 来自 CRACKME.00401378

    004137D我们跟随下发现其实就是当前MessageBox函数的末尾地址

    CALL 到 MessageBoxA 来自 CRACKME.00401378 这个则是我们进到MessageBoxA的首地址,也就是当调用了弹窗函数,堆栈窗口中压入的第一个

    问题:一个程序不止是只有一个弹窗按钮,有许多,那么我们怎么在记录窗口中寻找我们想要的呢?

    解决:

    1、进行跟随表达式Ctrl+G,MessageBox,来到user32.dll的领空,然后shift+F4,进行设置记录断点,但是这次设置的内容跟上面的不一样

    我们想要下的断点就是0040137D,那么条件就为[ESP] == 0040137D,意思就是当ESP寄存器中的地址是0040137D就进行断点

    然后进行运行程序F9

    第一次的ESP寄存器不是为40137D

    然后点击确定,第二次成功的断了下来,并且自动转到汇编窗口

    同样的记录窗口,虽然有两次,但是断点只有一次

  • 相关阅读:
    KVM之一:安装准备(基于CentOS6.7)
    Nginx技巧——Nginx/Apache下禁止指定目录运行PHP脚本(转自运维之美)
    (转)关于 awk 的 pattern(模式)
    form验证里使用request 和前端倒计时
    restful 在接口中获取 传过来的值
    django使用celery
    celery
    restful 在接口中获取 request.user
    码云创建一个仓库
    django中local_settings的配置
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12059929.html
Copyright © 2011-2022 走看看