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

news2024/11/16 16:43:57

目录

  • 🕒 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
博客链接:🔎 作者博客主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/547057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式系统原理

高可用是指系统无中断的执行功能的能力,代表了系统的可用程度,是进行系统设计时必须要遵守的准则之一。 而高可用的实现方案,无外乎就是冗余,就存储的高可用而言,问题不在于如何进行数据备份,而在于如何规避…

MacOS Ventura 13.4 (22F66) 带 OC 引导双分区黑苹果镜像

苹果今日向 Mac 电脑用户推送了 macOS 13.4 更新(内部版本号:22F66),本次更新距离上次发布隔了 41 天,主要解决了与Apple Watch自动解锁、蓝牙键盘、屏幕使用时间和VoiceOver相关的问题,推荐大家安装升级。…

Vue 级联组件添加按钮并添加点击事件加传参

我这里采用的是jqvue实现的此功能,首先是要把按钮追加进去,当然头开始写真实dom会导致页面上也追加显示,但是我想实现的是在级联组件上追加所以,选择创建虚拟dom,然后传参这点实在是研究试错了半天,最后选择…

聚观早报|ChatGPT 推出官方 iOS App;大疆称将接收OPPO哲库工程师

今日要闻:ChatGPT 推出官方 iOS App;大疆称将接收OPPO哲库工程师;菜鸟、盒马启动上市计划;苹果公司限制员工使用ChatGPT;张勇:阿里云将分拆上市 ChatGPT 推出官方 iOS App 北京时间 5 月 19 日&#xff0c…

苹果扩充AirTag应用场景,苹果Find My应用更加广泛

根据美国商标和专利局(USPTO)公示的清单,苹果近日获得了一项技术专利,将追踪器附着人体或者服装上,从而监测健康和活动数据。 AirTag 不仅可以追踪某件事物之外,还可以通过安装在人体的不同位置&#xff0c…

人工智能本来是个很简单的事,咋被人们整的这么神秘?

(1) 很多人以为大模型的参数量大是因为数据多。 其实大模型的参数量和超参数的配置相关。主要的超参数有下面几个: 词表大小:Vocab_Size最大位置编码大小:Max_Position_embeddings隐层节点数大小:Hidden_Si…

Linux - 第16节 - 网络基础(应用层二)

1.HTTP协议 我们在套接字部分编写的代码和应用层一中编写的网络计算器代码都是在应用层工作的,是应用层代码,因此应用层代码包括: (1)基本系统socket套接字系列接口的使用。 (2)定制协议&#x…

一个炎爆术分享给大家~

先来强势围观&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"https://cdnjs.cloudflare.com/ajax/libs/three.js/r120/…

23种设计模式之外观模式(Facade Pattern)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的外观模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬不…

云从科技从容大模型:大模型和AI平台什么关系?为什么造行业大模型?

原创&#xff1a;亲爱的数据 2023年5月18日&#xff0c;坐标广州南沙&#xff0c;来自云从科技的“云从从容大模型”正式亮相。 自此&#xff0c;云从科技从CV四小龙“进阶”成为一家AI大模型公司&#xff0c;同时&#xff0c;别忘记云从还有一个身份常被人提起&#xff1a;首家…

纯虚函数与抽象类

纯虚函数与抽象类 虚析构函数状态转换的引入C中的状态转换C中的状态转换职责链模式 纯虚函数和虚基类使用规则实例接口继承和实现继承 虚析构函数 在上一次博客中写到了这么一段代码&#xff1a; class object { private: int value;public:object(int x 0) : value(x) {}~o…

嵌入式音视频开发过程中如何控制码率?

一、码率控制的意义&#xff1a; 在音视频领域&#xff0c;码率控制模式有着举足轻重的地位。那什么是码率控制&#xff1f;码率控制是指通过调节图像的压缩比例&#xff0c;从而决定输出编码码率的过程。 二、H264有多少种码率控制模式&#xff1a; H264码率控制模式分别有&am…

DailyMart01:一点小想法,一个新的开始!

大家好呀&#xff0c;我是飘渺&#xff01; 截至目前&#xff0c;我已在公众号和知识星球上发布了多个系列文章&#xff0c;涵盖了SpringBoot老鸟系列、SpringCloud微服务系列、运维监控系列、分库分表系列和Kubernetes云原生系列。尽管每个系列的重点各有不同&#xff0c;它们…

【MYSQL】事务的4大属性,对隔离级别的详细讲解

目录 1.原子性和持久性 1.1.手动提交事务 1.2.自动提交事务 1.3.事务的原理&#xff1a; 2.隔离性 1.读未提交&#xff08;Read Uncommitted&#xff09; 2.读提交&#xff08;Read Committed&#xff09; 3.可重复读 4.串行化 3.一致性 4.理解读提交和可重复读的实现…

iptables

目录 iptables概述 netfilter/iptables 关系&#xff1a; 四表五链 四表&#xff1a; 五链&#xff1a; 数据包到达防火墙时&#xff0c;规则表之间的优先顺序&#xff1a; 规则链之间的匹配顺序&#xff1a; 主机型防火墙&#xff1a; 网络型防火墙&#xff1a; ipta…

Uart,RS232,RS485串口通讯协议学习

目录 定义 UART&#xff08;通常被称为串口,简单意味着使用广泛&#xff0c;具有普适性) RS232 RS232电平转换 RS485 -Recommended Standard (再推荐标准) 485和232的对比 RS485组网 总结 定义 串口是我们都很熟悉的&#xff0c;尤其是需要串口调试的时候,打印信息插…

C语言函数大全-- _w 开头的函数(4)

C语言函数大全 本篇介绍C语言函数大全-- _w 开头的函数 1. _wstrtime 1.1 函数说明 函数声明函数功能wchar_t *_wstrtime(wchar_t *buffer);用于获取当前系统时间并返回一个宽字符字符串表示&#xff0c;格式为 "HH:MM:SS"&#xff08;小时:分钟:秒&#xff09; …

2023 Vue开发者的React入门

Vue 和 React 都是流行的 JavaScript 框架&#xff0c;它们在组件化、数据绑定等方面有很多相似之处 本文默认已有现代前端开发(Vue)背景&#xff0c;关于 组件化、前端路由、状态管理 概念不会过多介绍 0基础建议详细阅读 Thinking in React-官方文档 了解 React 的设计哲学 R…

彻底理解粘性定位 - position: sticky(IT枫斗者)

彻底理解粘性定位 - position: sticky 介绍 粘性定位可以被认为是相对定位(position: relative)和固定定位(position: fixed)的混合。元素在跨越特定阈值前为相对定位&#xff0c;之后为固定定位。例如: .sticky-header { position: sticky; top: 10px; }在 视口滚动到元素…

【JavaWeb】--05.Request和Response、JSP、会话技术

文章目录 Request和Response1.概述2.Request对象2.1 Request继承体系2.2Request获取请求数据2.3 IDEA创建Servlet2.4 请求参数中文乱码问题POST请求解决方案GET请求解决方案 2.5 Request请求转发 3.Response对象3.1 Response设置响应数据功能介绍3.2 Response请求重定向3.3 路径…