程序:

点击安装程序

这是一个拼图程序

点击 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. Java多线程编程实战指南(核心篇)读书笔记(二)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...

  2. React-Native基础_5.列表视图ListView

    列表视图ListView 用来显示垂直滚动列表,需要指定两个东西,1 数据的来源 dataSource,2 渲染列表的条目布局 rendRow 'use strict' import React, { ...

  3. 基于视觉的 SLAM/Visual Odometry (VO) 开源资料、博客和论文列表

    基于视觉的 SLAM/Visual Odometry (VO) 开源资料.博客和论文列表 以下为机器翻译,具体参考原文: https://github.com/tzutalin/awesome-vis ...

  4. Java基础从头再来?

    今天遇到一个就是从后台解析的时候出现null字符串的处理 bug图如下每一个name属性都包含null 对于那些java基础好的直接撸码了,我就是不会哈哈! 最后请教别人还是解决了这个问题 简单分享下 ...

  5. 自定义view:view的绘制流程

    1.view的绘制流程 当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 Android framework 处理.绘制是从根节点开始,对布局树进行 measure 和 draw. ...

  6. [置顶] Android 状态栏那些小坑?

    背景:因为之前老板上次问我我们的app能不能自定义上面的状态栏我说可以啊!当时没管,今天试了下果然很多坑,之前github上也有很多大佬写了一个开源库有兴趣的可以点进去看下支持DrawLayout沉侵 ...

  7. 2013-05-25 14:04 zend studio10正式版如何汉化?

    选择Help菜单->Install New Software...在Work with框中复制此地 址:http://download.eclipse.org/technology/babel/ ...

  8. PyQt: “AttributeError: 'Form' object has no attribute 'exec_'” when opening second window

    # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication , QMainWindow from PyQt5 ...

  9. 一个简单的程序,统计文本文档中的单词和汉字数,逆序排列(出现频率高的排在最前面)。python实现。

    仅简单统计英文. from collections import Counter f = open('1') c = Counter() for line in f: g = (x for x in ...

  10. jQuery AJAX 跨域请求

    跨域请求 只要 dataType : 'jsonp',  jsonp:"jsoncallback",  然后返回一个json格式的就可以了 <!doctype html> ...