当前位置: 首页 > news >正文

【信息安全案例】——软件解密技术(以OllyDbg为例)

目录

  • 🕒 1. 软件解密技术
    • 🕘 1.1 概述
    • 🕘 1.2 爆破
    • 🕘 1.3 跟踪注册
    • 🕘 1.4 写出注册
  • 🕒 2. 破解相关问题
    • 🕘 2.1 破解程度
    • 🕘 2.2 破解线索
  • 🕒 3. 实验:使用 OllyDbg 破解 PDF转换器
    • 🕘 3.1 OllyDbg 布局介绍
    • 🕘 3.2 OllyDbg 基本使用
    • 🕘 3.3 流程

🕒 1. 软件解密技术

🕘 1.1 概述

在这里插入图片描述

  • 针对数据的解密在于如何推导密钥
  • 而针对软件的解密技术则在于寻找注册码完成注册甚至跳过注册,因此软件解密又被称为软件破解,即crack

🕘 1.2 爆破

  • 本质——修改程序流程,跳过注册保护的步骤
  • 方法——对程序代码进行静态分析
  • 工具——W32Dasm等静态反汇编软件

例:某知名录屏软件破解补丁
在这里插入图片描述
在这里插入图片描述

🕘 1.3 跟踪注册

  • 本质——分析软件注册码计算过程,计算注册码
  • 方法——对程序代码进行动态分析
  • 工具——OllyDbg等动态调试软件

🕘 1.4 写出注册

  • 本质——根据软件注册码计算方法,编写注册机
  • 方法——基于动态分析
  • 工具——编程语言

例:Typora注册机
在这里插入图片描述在这里插入图片描述

🕒 2. 破解相关问题

🕘 2.1 破解程度

软件破解程度通常分为两种:

在这里插入图片描述

完全破解:对于需要输入指定注册码的软件,通过对程序的跟踪找到预置的正确注册码,并将软件成功注册

  • 使用的技术手段:跟踪注册-动态分析

在这里插入图片描述

暴力破解:若软件本身没有提供注册功能或加密技术比较复杂,无法得到正确注册码,只能通过修改程序改变运行方向

  • 使用的技术手段:爆破-静态分析

🕘 2.2 破解线索

在这里插入图片描述

使用W32Dasm 等反汇编工具打开目标软件的EXE文件,将其由不可读的机器语言 反汇编为 可读的汇编语言

对该汇编代码进行静态分析,找出与软件注册相关的语句

****: ********  MOV/PUSH  EAX,[********]
****: ********  MOV/PUSH  EDX,[********]
****: ********  CALL  ********
****: ********  TEST  EAX,EAX
****: ********  JNZ   ********

通常软件程序内部都会调用一个子程序(即 CALL ****)来验证输入的注册码是否正确

例如对于注册码显式存在的程序,一般都会将输入的注册码和正确的注册码放进寄存器,然后调用验证子程序进行判断,并将结果返回,主程序根据子程序返回的结果决定是否注册成功

🕒 3. 实验:使用 OllyDbg 破解 PDF转换器

🕘 3.1 OllyDbg 布局介绍

以“pdftiger.exe”为目标程序,主界面如下
在这里插入图片描述

反汇编窗口:当载入目标程序后,在该窗口内显示源汇编代码

  • 但不包含基本信息、对话框信息和引入表信息
  • 自动定位到程序入口点
  • 反汇编窗口共4列
    • 地址栏:代码的虚拟地址VA(程序访问存储器所使用的逻辑地址就称为虚拟地址,也就是常说的内存偏移地址)
    • 十六进制:十六进制形式表示的源码
    • 反汇编:目标程序的源汇编代码
    • 注释:API函数信息等

在这里插入图片描述
信息窗口

  • 在动态调试时,该窗口内显示出当前代码行的各个寄存器信息,或API函数的调用、跳转等信息
  • 用来辅助了解当前代码行的寄存器情况

在这里插入图片描述

数据窗口

  • 该窗口默认以十六进制方式显示目标软件在内存中的数据
  • 数据窗口分3列,分别为VA地址、HEX数据和ASCII码,也可设置为Unicode等模式

在这里插入图片描述

寄存器窗口

  • 该窗口 动态显示CPU各个寄存器的内容,包括
    • 数据寄存器:EAX、EBX、ECX、EDX
    • 指针及变址寄存器:ESP、EBP、ESI、EDI
    • 段寄存器:CS、DS、SS、ES
  • 目标软件使用过程中,输入的用户名、机器码、注册码等信息一般都会放在这些寄存器中,因此在动态分析时要多查看寄存器内容

在这里插入图片描述

堆栈窗口

  • 显示堆栈的内容,也就是EBP和ESP所指向的内容
  • 堆栈较为重要,API函数或子程序都会利用它来传递参数、变量等信息
  • 若传递的信息是字符串形式,会在注释里显示
  • 对于注册码明文比较的目标程序,在堆栈中可能就会显示出正确注册码

在这里插入图片描述

🕘 3.2 OllyDbg 基本使用

跳转到指定VA:【Ctrl+G】

  • 在弹出的对话框中输入想要跳转的代码行的VA地址,如“0049232E”,单击【确定】
    在这里插入图片描述

搜索代码:【Ctrl+F】

  • 在弹出的对话框中输入想要搜索的汇编指令,如“push ebp”,单击【查找】
    在这里插入图片描述

增加标签:【:】

  • 选中某行汇编代码,在键盘上敲下“:”,为该行代码增加标签,VA地址将红色显示,可快速定位
    在这里插入图片描述

增加注释:【;】

  • 选中某行汇编代码,在键盘上敲下“;”,为该行代码增加注释,便于标记代码功能
    在这里插入图片描述

修改代码:【Ctrl+E】

  • 使用十六进制直接修改本行汇编代码
    在这里插入图片描述

动态调试:【F9】

  • 载入目标程序后,按【F9】可以运行程序
  • OllyDbg 将实时记录用户操作后的内存情况
    在这里插入图片描述

【F7】

  • 单步跟踪目标程序,一条代码一条代码地执行,遇到call语句会进入指定位置,遇到retn返回
  • 右侧寄存区窗口中的指针ESP也发生变化
    在这里插入图片描述

下断点:【F2】

  • 进行动态调试时,要让目标程序中断在关键代码处,再根据显示的动态信息进行代码分析
  • 因此需要给目标程序下断点
    在这里插入图片描述

🕘 3.3 流程

启动PDFTiger,点击【立即购买】,弹出输入注册码的对话框,随便输入注册码,单击【确定】,弹出对话框,出现提示字符串“注册码错”,将其作为破解线索。
在这里插入图片描述

在这里插入图片描述

使用OllyDbg 打开目标程序“PDFTiger.exe”
在这里插入图片描述

主界面如图所示:
在这里插入图片描述

进入反汇编窗口,右键选择【搜索】-【所有模块】-【字符串】

OllyDbg 会打开另外一个窗口

在这里插入图片描述

在窗口下方搜索框内输入“注册码错”进行搜索

在这里插入图片描述
选中该行按下双击后,反汇编窗口内会自动定位到所在的汇编代码
在这里插入图片描述

“注册码错”的上方有一个“jmp”跳转,选中后发现其跳转目的地在“注册码错”的下方

我们希望跳转一定会执行,这样就可以跳过“注册码错”了

在这里插入图片描述

继续检查是否还有待跳转箭头的干扰语句

“jmp”的下一行 “mov dword…”,选中后发现它是某条跳转语句的目的地,有箭头指向它

也就是说,若上文某个语句先执行,并成功跳转到该行,程序会一直按序运行到“注册码错”

在这里插入图片描述
在“jmp”和“注册码错”之间只有一个干扰语句

我们希望这样的来自上文的跳转指令不会执行,因此将对应的跳转指令 改为 空指令“nop”

如果发现没有小箭头,可以这样调出
在这里插入图片描述

那么是哪个跳转语句 跳到了这个位置呢?

选中该位置,在信息窗口中显示跳转来自四条语句,将四条语句都修改为nop指令才可以

选中该提示信息,右键选中【显示引用】
在这里插入图片描述

在弹出的对话框中选中第一个引用,单击即跳转到引用位置
在这里插入图片描述

然后选中该行代码,右键单击选择【二进制】-【用NOP填充】

在这里插入图片描述

继续重复上述操作,直至四条语句均修改完毕
在这里插入图片描述

在反汇编区,右键【补丁】
在这里插入图片描述

在弹出的窗口中选择【修补文件】,将其另存为“PDF破解版.exe”

双击“PDF破解版.exe”,随意输入注册码,发现已注册成功

在这里插入图片描述


❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

相关文章:

【信息安全案例】——软件解密技术(以OllyDbg为例)

目录 🕒 1. 软件解密技术🕘 1.1 概述🕘 1.2 爆破🕘 1.3 跟踪注册🕘 1.4 写出注册 🕒 2. 破解相关问题🕘 2.1 破解程度🕘 2.2 破解线索 🕒 3. 实验:使用 OllyD…...

【华为OD机试真题2023B卷 JAVAJS】阿里巴巴找黄金宝箱(I)

华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 阿里巴巴找黄金宝箱(I) 知识点数组前缀和整数范围 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 一贫如洗的樵夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0~N的箱子,每个箱子上面…...

记录一次windows mysql5.7安装失败的过程

首先下载mysql安装包 windows版本 https://dev.mysql.com/downloads/installer/ 接着 在执行安装mysql msi安装包最后一步的时候,显示 Failed to start service MySQL57. 只有在任务处于完成状态(RanToCompletion、Fau 这时候 检查要么windows下面mysql的卸载残留没…...

前端知识复习一

1.页面导入样式时,使用link和import有什么区别? link属于html标签,import是css提供的。页面加载的同时,link同时也会加载;import引用的css等到页面加载完再加载 2.js函数有哪几种声明方式? 表达式和声明…...

低代码赋能生物药企数字化

一、关于复宏汉霖 汉霖是复星在2010年投资孵化的一家生物医药公司,经过这十几年的发展,2019年在港股上市,是生物药企18A企业之一。 经过这些年的发展,我们在管线方面布局了肿瘤、肢体、免疫、眼科类,从早研阶段到临床…...

【计算机视觉】最后显示的CIFAR-100数据集照片很模糊怎么解决?

文章目录 一、前言二、如何解决2.1 使用图像增强技术2.2 使用插值方法2.3 使用更高分辨率的图像数据集2.4 手动调整图像尺寸 三、总结 一、前言 如果从CIFAR-100数据集加载的图像显示模糊,可能有几个可能的原因: 分辨率较低:CIFAR-100数据集…...

OJ 系统未解决或者有疑问问题:

34101 - 全排列问题 时间限制 : 1 秒 内存限制 : 128 MB 输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 输入 n(1≤n≤9) 输出 由 1~n 组成的所有不重复的数字序列,每…...

《游戏编程模式》--优化模式--学习

在线阅读: 优化模式 游戏设计模式 参考文章: GameDesignPattern_U3D_Version/Assets/010OptimizationPatterns at master TYJia/GameDesignPattern_U3D_Version GitHub 数据局部性介绍了计算机的存储层次以及如何使用其以获得优势。 脏标识帮你避开…...

电脑照片怎么导入苹果手机?三个妙招帮你解决!

案例:电脑有很多照片,该如何导入苹果手机? 【家人们,电脑里面的照片怎么样可以快速导入到苹果手机?求方法!】 导入电脑照片到苹果手机是一个常见的需求,尤其是当您希望在手机上随时欣赏和分享这…...

换个花样玩C++(13)一文深度全面剖析类构造,析构,赋值运算和移动构造

为什么我要把C++类的构造,析构函数,赋值运算符重载函数,移动构造函数还要拿出来嚼一嚼,因为最近面试的一些3-7年经验的程序员,我每次都会问一些特别基础的问题,但是我总是得不到想要的答案,我就在思考,是不是大家都觉得有些知识点太简单了,流于高大上的东西,而我个人…...

这是一篇使用ChatGPT生成的关于隐私计算的文章

标题:隐私计算:直白介绍和算法实现 简介: 随着数字化时代的发展,隐私保护成为了一个日益重要的话题。隐私计算作为一种保护个人隐私的方法,具有广泛的应用前景。本篇博客将为您提供一个直白的介绍,解释隐私…...

Docker持久化固定容器IP

基于Docker引擎创建Docker容器,在默认条件下创建容器是bridge桥接模式,启动容器IP地址是DHCP随机分配并且递增的,而且容器之间可以互相通信,网段也是固定的。 当Docker容器一旦关闭再次启动,就会导致容器的IP地址再次重…...

Filter和Interceptor和Aspect

Filter过滤器 过滤器可以拦截到方法的请求和响应(ServletRequest request, ServletResponse response),并对请求响应做出过滤操作。 过滤器 依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,一个过滤器实例只能在 容…...

maven 项目依赖加载不出来

1.依赖加载不出来,查看pom.xml放的位置是否对了 2.1下载mvn到本地,进行解压 2.2新建系统变量MAVEN_HOME,值直接指向安装目录D:\apache-maven-3.9.2 2.3path变量中增加:%MAVEN_HOME%\bin 2.4若仓库位置不在C盘用户下&#xff0…...

Python collections模块

1.简介 collections 是 python 的内置模块,提供了很多方便且高性能的关于集合的操作,掌握这些知识有助于提高代码的性能和可读性。 2.常用功能 2.1 namedtuple 功能详解 namedtuple() 返回一个新的元组子类,且规定了元组的元素的个数&…...

Qt-学习 QJson协议解析

内容来源于哔站视频,仅仅作为自己的笔记记录,感兴趣的小伙伴去原作品大call(此处给作者三鞠躬),Json以及Json在Qt中的使用 【Qt/C/C】_哔哩哔哩_bilibili 目录 1、Json介绍: 1.1 Json的定义 1.2 Json的数据格式 1…...

Git的安装与连接

在软件开发中,版本控制是非常重要的一环。Git是一种流行的版本控制工具,它可以帮助开发者管理代码并协作开发。本文将介绍如何连接Git。 首先,我们需要安装Git。在Windows上,可以从Git官网下载安装程序。在Linux上,可…...

MySQL5.0完全卸载教程

一、停止MySQL服务 在系统服务中找到mysql服务并停止即可。 二、卸载mysql应用程序 在控制面板中卸载mysql应用程序 三、删除mysql文件夹 找到mysql一开始安装路径的文件夹,然后删除掉该整个文件夹。 四、删除注册表 (1)按winR键,…...

rpm包编译工具rpmbuild使用介绍

rpmbuild是一个命令行工具,用于构建RPM(Red Hat Package Manager)软件包。RPM是一种用于在Linux系统上安装和管理软件的标准格式。rpmbuild可以将源代码或二进制文件打包成RPM软件包,并为之配置元数据、依赖项、文件列表等。rpmbu…...

vue3中使用cherry-markDown步骤

附cherry-markDown官网及api使用示例 官网:GitHub - Tencent/cherry-markdown: ✨ A Markdown Editor api:Cherry Markdown API 考虑到复用性,我在插件的基础上做了二次封装,步骤如下: 1.下载 npm install cherry-ma…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

golang循环变量捕获问题​​

在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下: 问题背景 看这个代码片段: fo…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下&#xf…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...