• OD 实验(七)


    程序:

    这里有很多的动态链接库

    双击运行程序

    这个程序有次数限制

    按钮也在隐藏处

    主界面

    退出程序,会弹出一个广告

    目的:

    让程序的使用次数不受限制,且没有显示次数的窗口

    去除程序关闭时候的广告

    逆向:

    修改次数限制:

    用 OD 打开程序

    按 F8 走一下程序

    程序在这里走到了一个循环,程序会在这个循环中走很久

    要想退出这个循环,可以在 004BD452 处下一个断点,然后按 F9

    然后接着往下走

    当运行到这个地方的时候,就会启动程序

    在这个地方应该按 F7 步入,而不是步过

    要是步过,之后就会 exit 退出程序

    这 call 指令这个地方下一个断点,重新载入程序运行

    按 Alt+B 查看断点

    按 Delete 删除该断点

    回到主界面,按 F7 步入

    F7 步入第一个 call

    按 F8 往下走

    走到动态链接库的地方

    按 F8 接着往下走

    走到这个地方会启动程序

    在这个地方下一个断点

    如果在这里直接按 F2 下断点的话,重新载入程序的时候,断点会不见

    动态链接库应该下硬件断点

    右键 -> 断点 -> 硬件执行,来下硬件断点,硬件断点只能下 4 个

    重新载入程序,按 F9 运行

    菜单栏 -> 调试 -> 硬件断点,可以查看硬件断点的信息

    重新载入并按 F9 运行

    程序停在了这个硬件断点处

    按 F7 步入

    进来之后,菜单栏 -> 调试 -> 硬件断点,可以删除该硬件断点

    按 F8 继续往下走

    走到这个地方,又启动了程序

    在此处按 F2 下一个断点

    这个 call 之后还有一大堆的指令,不像刚才那样后面是 exit 退出

    按 F7 步入进去看看有什么

    都是 jmp 跳转指令

    按 F8 往下走

    又到了动态链接库的地方

    按 F8 继续往下走

    在这个地方启动了程序,在这个地方下一个硬件断点

    重新载入并运行程序后按 F7 步入,进来之后删除下的硬件断点

    按 Ctrl+F8 让程序跑起来

    跑起来会发现,程序会重复地一直循环跑

    看来那个 call 没必要步入

    按 F8

    启动了程序,然后按绿色的按钮

    指令往下走了一步

    此处的 call 通往程序的主界面,还带有计数的功能

    cmp eax,0x1 比较 eax 和 1 的关系

    如果 eax 等于 1,ZF 就会置 1,然后 je 跳转语句将会进行跳转

    也就是说 eax 等于 1 的话,程序会进入主界面

    可以修改这条 call 指令来达到程序直接进入主界面,而没有对使用次数进行计数

    这样每次 eax 的值将会为 1

    保存文件并运行

    直接进入到主界面

    去广告:

    用 OD 载入刚才保存的程序

    按 F9 运行,运行之后关闭程序,出现广告,这时候按 F12 暂停

    然后按上面的 K 按钮,快捷键为 Alt+K,显示调用堆栈

    通过查看调用堆栈就能知道哪些函数被调用过

    只有这个函数调用是在程序代码中实现的,其它的是在动态链接库中进行调用的

    双击箭头指的空白处看看该函数的调用

    在这里下一个断点

    然后重新载入程序并运行

    关闭主界面后

    程序停在了该断点处,而没有弹出广告界面

    按 F8 往下走

    这时弹出了广告界面

    这说明广告界面的出现是因为这个 call 指令

    把这个 call 指令改为 nop 就好了

    保存文件后运行,关闭程序后就不会再弹广告了

  • 相关阅读:
    erl_0012 timer:tc 测试模块函数调用运行耗时
    erl_0011 erlang 定时器相关
    erl0010
    erl0009
    erl0008
    erl0007
    erl0006
    erl0005
    开开心心过生活、踏踏实实做技术
    Android-理解Intent
  • 原文地址:https://www.cnblogs.com/sch01ar/p/9599659.html
Copyright © 2020-2023  润新知