程序:

这里有很多的动态链接库

双击运行程序

这个程序有次数限制

按钮也在隐藏处

主界面

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

目的:

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

去除程序关闭时候的广告

逆向:

修改次数限制:

用 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 就好了

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

OD 实验(七) - 对一个程序的破解和去广告的更多相关文章

  1. OD 实验(十一) - 对一个程序的破解

    程序: 点击安装程序 这是一个拼图程序 点击 Options -> Flash Sizes 程序会提示是未注册版本 点击一些选项的时候会提示该程序只给注册的用户 点击 Register 随便输入 ...

  2. OD 实验(九) - 对一个程序的破解

    程序: 运行程序 点击 About 这是要注册的 点击 Register 输入邮箱和注册码,点击 Register Now 逆向: 用 OD 打开程序 右键 -> 查找 -> 所有参考文本 ...

  3. OD 实验(六) - 对一个程序的破解

    程序: 双击进行安装,安装过程默认就好了 安装完成 运行程序 输入 User 为 sch01ar,点击 Create 点击 Log In 这里显示为未注册版本 看看未注册版本有哪些功能被限制 这里会显 ...

  4. OD 实验(十七) - 对一个程序的逆向分析

    程序: 运行程序 弹出一个对话框,点击 OK 来到主界面,点击 Help -> Register Now 这是输入注册码的地方 按关闭程序的按钮 会提示剩下 30 天的使用时间 用 Ressco ...

  5. OD 实验(十三) - 对一个程序的逆向

    程序: 运行程序 点击 Start,它就会进行对系统的扫描 点击 About -> Enter Registration Code 随便输入一下内容,点击 OK,会弹出该弹窗 用 PEiD 看一 ...

  6. OD 实验(八) - 对一个程序的逆向

    程序: 运行 弹出 NAG 窗口,提示要花 20 美元注册 然后会进入主窗口 提示剩余 5 天的使用时间 点击,菜单栏 -> Help -> About 显示未注册版本 逆向: 用 OD ...

  7. OD 实验(十) - 对一个 VB 程序的逆向

    前话: VB 程序用 OD 进行逆向的话,可以先查找相关的变量和字符串,以寻找突破口 变量: __vbaVarTstEq __vbaVarCompEq __vbaVarTstNe __vbaVarCo ...

  8. [android]亲自破解Flappy Bird(去广告+永生)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3544785.html  听说最近Flappy Bird很火,但 ...

  9. 实验七:Linux内核如何装载和启动一个可执行程序

    原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 题目自拟,内容围绕对Linu ...

随机推荐

  1. Gradle 1.12用户指南翻译——第六十四章. 发布到Ivy(新)

    其他章节的翻译请参见:http://blog.csdn.net/column/details/gradle-translation.html翻译项目请关注Github上的地址:https://gith ...

  2. ajax跨域问题解决方案

    今天来记录一下关于ajax跨域的一些问题.以备不时之需. 跨域 同源策略限制 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的文档属性.也就是说,受到请求的 URL 的域必须与当前 Web 页面 ...

  3. python中封装

    封装 引子 从封装的本身意思去理解,封装就是用一个袋子,把买的水果.书.水杯一起装进袋子里,然后再把袋子的口给封上,照这样的理解来说,封装=隐藏,但是,这种理解是片面的 ## 如何封装 在python ...

  4. ICE实现服务器客户端

    本文将结合实际项目,做一个基于ice的实际项目实例应用,该实例完成客户端调用服务端接口完成消息发送,计算的功能.1,创建java项目ICEServer,导入ice.jar. 2,在项目下创建slice ...

  5. 【剑指offer】翻转单词顺序,C++实现

    原创博文,转载请注明出处! 本题牛客网地址 本题代码的github地址 本系列文章的索引地址 # 题目 # 思路       两次翻转,第一次翻转整个句子,第二次翻转每个单词(单词之间用逗号隔开) # ...

  6. Hello Pythoner!

    首先,欢迎你来到pyer的博客,希望你能有所收获! 然后,pyer之前学C#(原博客地址:初行-博客园),后来转的Python,目前从事服务端研发工作. 最后,相逢便是缘,如果看过pyer的博客后有什 ...

  7. 使用stsadm.exe工具实现SharePoint网站备份还原

    一.过程描述: 首先在源站点机器上用stsadm.exe备份网站集,讲备份文件拷贝到目标服务器(也可直接在备份时配置备份路径为目标机器路径),然后执行还原操作:首先新建网站集,然后用SharePoin ...

  8. java中static关键字的理解(转载)

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  9. LG4848 崂山白花蛇草水

    题意 神犇 Aleph 在 SDOI Round2 前立了一个 flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇 Aleph 的实力,他轻松地进了山东省省队,现在便是他履行诺言的时候了. ...

  10. java创建多线程&创建进程

    概述 并发和并行是即相似又有区别: 并行:指两个或多个事件在同一时刻发生: 并发:指两个或多个事件在同一时间段内发生. 进程是指一个内存中运行中的应用程序.每个进程都有自己独立的一块内存空间,一个应用 ...