• OD调试4----去除nag窗口的几种方法


    本实验所用程序如下,一个主窗口,两个nag窗口。nag本意为烦人唠叨的意思。在这里指的是不断弹出来窗口,例如注册窗口。

    这里第一个和第三个为烦人的nag窗口,这里我们要将它去除。接下来就介绍四种方法,为了简单就以第一个窗口为例。

    加载程序,(F8)运行。到达一个je跳转,下面包含着是第一个对话框的内容。

    再来看下运行信息提示:

    分析下,这是一个je跳转。但跳转没有实现,所以就会执行到第一个对话框。只需我们修改下je这个地方就行了。

    第一种方法。

    修改标志位寄存器。对于je来说,当z标志位为1时跳转,那我们就把z标志位的0修改为1.让它跳转。

    这样就跳过第一个nag窗口。但要注意的是修改标志位的话不会保存为可执行文件。可以在调试程序时用。

    第二种方法:修改je为jmp.jmp命令为强制跳转。点击右键,汇编修改je为jmp。

    效果为跳过对话框。

    第三种方法:修改句柄的拥有者hOwner.什么意思呢?通俗点来讲就是这个对话框是属于谁的。例如在A对话框中调用了B对话框,A就是父对话框,B就是子对话框。就是这个道理。父进程一旦被消灭,子进程也就不存在了。我们来分析这里的情况。

    这里的push  0,howner为空。表示没有父句柄,它是控制的,没有老爸。我们只需要把把push 处的0 修改为1,就行了。这里的1不可能是一个地址,不可能是一个句柄的值,所以在这里什么也不做。看效果。

    同样也能跳过第一个nag窗口。

    第四种方法:修改入口点,这个就有点难了。要牵扯到pe文件头,在这里就简单说一下,具体的可以上网查有关的资料。

    真正有用的地方就是节区,前面很多都是无关的。下面我们来分析这个程序,程序的入口点在00401000.

    在个getmodulehandlea运行后,eax寄存器显示的地址是004000.

     可以和入口点的地址比较。401000-40000=1000。这1000个字节存放的就是PE文件头,从401000之后就是节区了,也就是程序代码的位置。那我们把入口地址改为401024.那样就跳过了第一个对话框。那么怎么改呢很简单,点下M().

    我们看到内存分布图

    双击PE文件头。进入

    找到入口点的位置,004000E8,回到CPU界面,在内存地址窗口,输入004000E8.

    可以看到入口地址就是1000,  00 10 00 00这是在内存中的排列顺序,低地址在前,高地址在后。在我们看来顺序应该是00001000,那我们想让入口地址为00001024,就应该24 10 00 00.这样就知道该怎么修改了。点击右键,修改。,接下来的就是保存了。

         到这里几种方法已经介绍完了。对于第三个nag.也是这个道理,这里就不详细叙述了。

    实验软件下载:www.fishc.com

  • 相关阅读:
    Android 编程下 Eclipse 恢复被删除的文件
    Android 编程下背景图片适配工具类
    Android 编程下 Managing Your App's Memory
    Android 编程下代码之(QQ消息列表滑动删除)
    Android 编程下 Canvas and Drawables
    Android 编程下 AlarmManager
    Android 编程下去除 ListView 上下边界蓝色或黄色阴影
    Java 编程下字符串的 16 位、32位 MD5 加密
    C#枚举类型和int类型相互转换
    MVC和普通三层架构的区别
  • 原文地址:https://www.cnblogs.com/xiao-zhang/p/4398743.html
Copyright © 2020-2023  润新知