zoukankan      html  css  js  c++  java
  • OD 实验(十六)

    对话框:

    对话框从类型上分为两类:modal 对话框和 modeless 对话框,就是模态对话框和非模态对话框,也有叫成模式和非模式

    模态对话框不允许用户在不同窗口间进行切换,非模态对话框允许用户在不同窗口间进行切换

    两者形成区别的原理是模态对话框由 windows 为它内建一个消息循环,而非模态对话框的消息则是通过用户程序中的消息循环派送的

    创建模态对话框是由调用 DialogBoxParam 函数实现的,而创建非模态对话框是调用 CreatDialogParam 函数实现

    程序:

    点击 SETUP.EXE 进行安装

    按默认步骤安装

    这是主界面

    点击 File -> Register 是进行注册的地方

    关闭程序

    它会弹出该对话框,该对话框是模态对话框

    如果直接按退出会显示该帮助文档

    只有点击 I Will Register Soon 才会退出程序

    用 eXeScope 载入程序

    选择 资源 -> 对话框 -> 103,是程序要退出时候的对话框

    103 为 MFC 下的 lpTemplateName 对话框模板

    逆向:

    用 OD 载入程序

    右键 -> 查找 -> 所有命令

    查找 push 0x67,67 为 103 的十六进制

    调用模态对话框 DialogBoxParam 的时候会将它的参数入栈,103 也是它的第一个参数

    双击,来到它的位置

    在该代码块开头下一个断点

    跑一下程序

    点击退出程序之后,没有弹出对话框,直接停在该断点处

    如果函数 A 调用函数 B 的话,函数 A 会被 push 入栈,当函数 B 执行完之后返回到函数 A 的时候,函数 A 会被 pop 出栈

    看一下栈窗口

    返回到 004023C0 来自 00401220

    右键 -> 反汇编窗口中跟随

    来到了该地址

    上面那个 call 就是调用刚才那个过程

    上面有个 jnz 跳转指令,如果 eax 是一个非零值,它就会进行跳转,跳转就能跳过那个 call 指令

    在 test 指令上面的 call 指令处下一个断点

    重新跑一下程序

    点击关闭程序的按钮之后停在该断点处

    按 F7 步入

    只有几条指令之后就执行 retn,没有条件跳转,可能程序一运行就直接在这里检查是否注册

    在该过程开头下一个断点

    重新跑一下程序

    一打开程序,就停在该断点处,说明这个过程就是检查是否注册

    如果该过程返回非零值就会跳过程序最后的那个对话框

    接下来修改指令

    如果修改将上面这条指令改为 mov eax, 0x1 的话,会覆盖掉后面的那条指令

    所以把这两条对 eax 的值有影响的指令做修改,改为 mov eax, 0x1

    选择这两行指令,右键 -> 汇编,进行修改

     改完之后保存程序,运行

    Register 按钮已经不能点击了,退出程序的时候也没有对话框了

  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/sch01ar/p/9747330.html
Copyright © 2011-2022 走看看