程序:

点击安装程序

这是一个拼图程序

点击 Options -> Flash Sizes

程序会提示是未注册版本

点击一些选项的时候会提示该程序只给注册的用户

点击 Register

随便输入一个密码,然后点击 OK

密码错误

用 PEiD 看一下该程序使用的是什么编译器

Microsoft Visual C++ 7.0

逆向:

用 OD 打开程序

首先先查找一下关键字

右键 -> 查找 -> 所有参考文本字串

拉到最顶端,右键 -> 查找文本

双击跟进该字符串所在的地方

这里有个 je 跳转指令,如果跳转实现的话就会显示 unregistered

那就让 je 不实现跳转

那 je 跳转指令改为 nop

保存程序

运行程序

点击 Options -> Flash Sizes,没有再显示 unregistered

但是点击其它选项还是会弹出提示框

继续看一下程序

je 跳转指令上的 mov 指令把 esp+0x4 处的值赋给 al

在 mov 指令处下一个断点,重新跑一下程序

esp+0x4 的地址为 0012E19C,值为 0,所以 al 的值也为 0

上图所示,mov 指令本地调用来自 004047D3 和 00404880,跟上去看看

右键

先跟 004047D3

下一个断点

按 Enter 键回到 mov 指令处

接下来跟 00404880

在此处也下一个断点

重新载入程序跑一下

程序先停在该处

可以把 00404880 的断点删除

按 Alt+B 查看断点,按 Delete 进行删除

因为 004047D3 处的 call 指令先对 mov 指令进行操作

上面有个 push 指令

push 指令把 eax 推入栈中

而 0012E19C 决定了 al 的值

所以此处的 eax 决定 0012E19C,0012E19C 决定 al

而 eax 的值取决于它上面的那条 call 指令

因为函数的返回值存放在 eax 中

在此处的 call 指令处下一个断点

重新跑一下程序

按 F7 步入该 call 指令,看看该 call 指令任何返回 eax 的值

按 F8 往下走

这里有个循环,每执行一次循环

EAX 上的 ASCII 值就会少一个字符

当字符全减完之后,它就会往下走

此时寄存器 eax 的值为 9

因为 <No Pass> 为 9 个字符

cmp 指令把密码位数和 4 进行比较

如果密码位数大于 4 的话,将执行 jnb 跳转

如果密码位数小于 4 的话,执行 xor 指令,把 al 的值变为 0

先跟着 jnb 跳转看看情况

这里有个 call 指令,它有 3 个参数,分别是 push 的那三个参数

步过 call 指令继续往下走

test 指令比较 eax 的值,如果 eax 的值不为 0 的话,将执行 jnz 跳转;如果 eax 的值为 0 的话,将不执行 jnz 跳转

跳转将跳到 xor 指令处

xor 指令将 al 清 0,pop 将 esi 出栈,然后返回,al 部分为 0,程序还是会提示注册不成功

所以改一下 xor 指令就好了

保存文件,运行一下

被限制的功能都能用了

OD 实验(十一) - 对一个程序的破解的更多相关文章

  1. OD 实验(七) - 对一个程序的破解和去广告

    程序: 这里有很多的动态链接库 双击运行程序 这个程序有次数限制 按钮也在隐藏处 主界面 退出程序,会弹出一个广告 目的: 让程序的使用次数不受限制,且没有显示次数的窗口 去除程序关闭时候的广告 逆向 ...

  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. 2017-2018-2 20155228 《网络对抗技术》 实验一:PC平台逆向破解

    2017-2018-2 20155228 <网络对抗技术> 实验一:PC平台逆向破解 实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用 ...

  9. 20165309 《网络对抗技术》实验一:PC平台逆向破解

    20165309 <网络对抗技术>实验一:PC平台逆向破解 目录 实践目标 基础知识 实验原理.内容及步骤 问题与解决 实验收获 一.实践目标 本次实践的对象是一个名为pwn1的linux ...

随机推荐

  1. angular 与jQuery混用 大坑一

    由于angular是在真实dom加载之后,运行,所以jQuery操作dom时,要先于angular添加的元素(如,ng-repeat),所以常常会出现,元素错位,解决办法:添加一个透明的站位元素:

  2. 构造字典:DictionaryBase类和SortedList类

    DictionaryBase 类 msdn对DictionaryBase的文档解释 泛型KeyValuePair类 msdnd对泛型KeyValuePair类的文档解释 SortedList类 RUN ...

  3. 给View 添加手势,点击无反应 如何给View添加点击事件,手势方法

    项目中有很多地方需要添加点击事件,重复代码很多,所以做了一个UIView的分类,专门做点击事件使用.项目地址:UIView-Tap 代码很简单,主要有一点就是注意分类不能直接添加属性,需要用到运行时相 ...

  4. 同一台电脑的多ssh 配置

    转载自:https://w3ctrain.com/2016/03/06/mutiple-ssh-key/ ps:此文基于你已经能够正常的生成sshkey 对于sshkey的功能这里就不多做介绍了,本文 ...

  5. Eclipse web工程 部署 三种方式 2

    Eclipse web工程 部署 三种方式 2.插件 tomcat插件下载: http://www.eclipsetotale.com/tomcatPlugin.html 解压缩后, com.sysd ...

  6. Java并发--并发容器之CopyOnWriteArrayList

    原文链接:http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容, ...

  7. java面试题08

    1.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? short s1 = 1; s1 = s1 + 1;编译时错误.对于shor ...

  8. MD5加盐加密

    package com.chauvet.utils; import java.security.NoSuchAlgorithmException; import java.util.Random; / ...

  9. PHP 数组转json_encode,单个数组下标为了0时不对??

    在 php 数组转json时,假如 有一个数组下标是顺序的,他json_encode后会直接变成一个简版二维json, $arr = ['1'=>1,'2'=>2]; echo (json ...

  10. css animation动画

    css 动画: 动画是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果. 必要元素: a.通过@keyframes指定动画序列:自动补间动画,确定两 ...