序列号保护机制

  1. 将用户名等信息作为自变量,通过函数F变换之后得到注册码
    序列号=F(用户名)序列号=F(用户名)序列号=F(用户名)
    破解方法:
    ①利用调试器内存中直接获取到明文注册码
    ②利用调试器提取出函数F,制作计算注册码程序
    ③直接修改比较指令跳过注册码检查
  2. 通过注册码验证用户名的正确性
    用户名=F−1(序列号)用户名=F^{-1}(序列号)用户名=F−1(序列号)
    破解方法:
    ①通过F的逆变换,找出F,从而制作计算注册码程序
    ②给定一个用户名,利用穷举法找出满足F的序列号
    ③给定一个序列号,直接利用F的逆变换,生成一个用户名(此用户名一般不包含不可显示字符)
  3. 通过对等函数检查注册码
    F1(用户名)=F2(序列号)F1(用户名) = F2(序列号)F1(用户名)=F2(序列号)
  4. 同时将用户名和注册码作为自变量(即二元函数)
    特征值=F(用户名,特征值)特征值 = F(用户名,特征值)特征值=F(用户名,特征值)

攻击序列号保护

  1. 利用数据约束性(只对用明文进行比较注册码有效)
    大多数使用明文进行注册码比较真伪过程中,真正的注册码会在某个时刻出现在内存中,大多数情况下,真正的注册码会在用户输入的注册码的内存地址-90h~+90h字节的地方
  2. 利用消息断点
    许多序列号验证时都存在一个验证按钮,当点击按钮时,将发送鼠标消息,利用此消息能够找到按钮对应的事件代码
  3. 利用提示信息
    利用输入错误的提示信息,来查找对应的验证代码处

字符串比较形式

为了防止破解者直接修改跳转指令,加密者往往会迂回的比较字符串

  1. 寄存器直接比较
  2. 函数比较a
  3. 函数比较b
  4. 串比较

制作注册机

对明码进行比较软件的攻击:
利用keymake软件,拦截程序指令,并将出现的明码直接显示出来,可以直接生成注册机

对非明码进行比较软件的攻击:
通过分析得到加密算法和逆加密算法,来编写注册机。或者通过ollydlg的Asm2Clipboard插件、IDA等工具直接将序列号算法的汇编代码提取出来,嵌入高级语言直接调用,而无需进行具体算法实现。

去除警告窗口

①将可执行文件中警告窗口的属性设置为透明或不可见
②找到创建该窗口的代码进行跳过
③利用消息断点设置断点拦截

去除时间限制

时间限制的两种方式:
①限制每次运行的时长
②每次运行的时长不限,但有总共的时间限制

程序可用的定时器函数:
SetTimer、timeSetEvent、GetTickCount、timeGetTime

程序可用的获取时间函数:
GetSystemTime、GetLocalTime、GetFileTime
或者读取系统需要频繁修改的文件(user.dat、system.dat等)的最后修改日期,然后调用FileTimeToSystemTime函数转换为系统日期格式,确定当前系统日期

破解SetTimer方法:

  1. 直接跳过SetTimer函数,不产生WM_TIMER消息
  2. 通过查找WM_TIMER消息对应的消息码0x113,定位到设置WM_TIMER处,修改消息就能取消时间限制了

去除菜单功能限制

正式版本将所有菜单全部打开,但试用版本将部分菜单隐藏置灰

菜单或窗口置灰不可用函数:
EnableMenuItem、EnableWindow

破解方法:
断点让菜单或窗口置灰不可用函数,修改传入的代表不可用或置灰的参数,修改为正常

KeyFile保护

软件采用一个包含认证信息的文件作为验证方式,当把由软件开发者发放的认证KeyFile放入软件程序目录后。软件每次启动时,检查KeyFile认证文件,从中读取数据,然后更具某种算法进行校验或处理,判断是否为正确的注册文件,如果正确,则以正式版本运行

文件相关函数:


或者通过procmon程序监视文件

网络验证

网络相关函数:
send、recv、WSASend、WSARecv

破解方法:

  1. 修改hosts文件,使域名指向本地
  2. 如果直接使用ip连接,则对inet_addr、connect设断点,将ip地址修改为本地ip
  3. 编写一个服务端程序,伪造回复认证正确的数据包

光盘验证

一些通过光盘发行的软件或游戏,在使用时需要检测光盘是否插在光驱中,如果没有则拒绝运行

一般步骤为:
先调用GetLogicalDriveString或GetLogicalDrives得到系统中安装的所有驱动器的列表,然后用GetDriveType检查每个驱动器是否为光驱,如果是再用CreateFile或FindFirstFile函数检测特定的文件是否存在,甚至进一步检测文件的属性、大小、内容等。

破解方法:
在相关函数上设置断点,找到程序启动时检测光驱的地方,修改判断指令,就可以跳过检测。
使用光盘刻录或复制工具制作多份光盘,或采用虚拟光驱模拟正版光盘

只允许一个实例

软件常用实现方法:

  1. 查找窗口法
    程序启动时,调用FindWindow、GetWindowText函数查找具有相同类名或标题名的窗口,如果找到就退出运行
  2. 使用互斥对象
    程序启动时,调用CreateMutexA函数尝试创建一个互斥对象,如果创建不了代表已经有了一个,那么就退出运行
  3. 使用共享区块
    创建一个共享区块Section,该区块拥有读取、写入、共享保护属性,让多个实例共享一个内存块,将一个代表目前运行实例的变量写入该区块

常用断点集合

加密与解密(第四版)第5章演示版保护技术相关推荐

  1. Java加密与解密笔记(四) 高级应用

    术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...

  2. T+云加密版本软件,提示请激活,伴随演示版出现

    产生原因:10天未联网,7天未登录T+服务器都会使云加密断掉 云加密含义:需要账号和密码激活的软件,可以断网.弊端10天连一次网络,7天登陆一次T+服务器. 硬加密含义:类似U盘插入电脑USB口的东西 ...

  3. 黑客攻防技术宝典Web实战篇第2版—第3章 Web应用程序技术

    3.1 HTTP 3.1.1 HTTP请求 1.所有HTTP消息(请求与响应)中都包含一个或几个单行显示的消息头,然后是一个空白行,最后是消息主体(可选). 2.每个HTTP请求的第一行由三部分组成 ...

  4. 信安教程第二版-第19章操作系统安全保护

    第19章 操作系统安全保护 19.1 操作系统安全概述 395 19.1.1 操作系统安全概念 395 19.1.2 操作系统安全需求 395 19.1.3 操作系统安全机制 396 19.1.4 操 ...

  5. 信安教程第二版-第17章网络安全应急响应技术原理与应用

    第17章 网络安全应急响应技术原理与应用 17.1 网络安全应急响应概述 353 17.1.1 网络安全应急响应概念 353 17.1.2 网络安全应急响应发展 353 17.1.3 网络安全应急响应 ...

  6. 信安教程第二版-第14章恶意代码防范技术原理

    第14章恶意代码防范技术原理 14.1 恶意代码概述 261 14.1.1 恶意代码定义与分类 261 14.1.2 恶意代码攻击模型 262 14.1.3 恶意代码生存技术 263 14.1.4 恶 ...

  7. 信安教程第二版-第13章网络安全漏洞防护技术原理与应用

    第13章 网络安全漏洞防护技术原理与应用 13.1 网络安全漏洞概述 243 13.1.1 网络安全漏洞概念 243 13.1.2 网络安全漏洞威胁 243 13.1.3 网络安全漏洞问题现状 244 ...

  8. 信安教程第二版-第11章网络物理隔离技术原理与应用

    第11章 网络物理隔离技术原理与应用 11.1 网络物理隔离概述 216 11.1.1 网络物理隔离概念 216 11.1.2 网络物理隔离安全风险 216 11.2 网络物理隔离系统与类型 217 ...

  9. PC版微信加密图片解密思路与代码实现_Python

    PC版微信加密图片解密思路与代码实现_Python 前言 PC版的微信会加密存储用户接受到的所有图片信息. 存储路径为 C:\Users\用户名\Documents\WeChat Files\微信号\ ...

最新文章

  1. LINQ 查询表达式(C# 编程指南)
  2. Testng 测试框架源码阅读(一)
  3. python-docx 如何获取当前字号_调整字号保护视力?专家有一个更好的建议
  4. python如何把一张图像的所有像素点的值都显示出来_情人节,教你用 Python 向女神表白...
  5. 【Elasticsearch】Elasticsearch的数据类型 (text、keyword、date、object、geo等)
  6. 《推荐系统笔记(十一)》Learning to rank(LTR排序问题)的介绍和RankNet算法(内含详细推导)
  7. Oracle 11g 字符集修改
  8. python用户登录界面设计_python如何做一个登录注册界面
  9. 实对称矩阵一定可以相似对角化
  10. 地球上最长的两座山脉:一座4800公里,一座8900公里
  11. Wizard of Wikipedia Knowledge-Powered Conversational agents
  12. Eclipse中Outline里各种图标的含义
  13. Oracle Becomes 2nd Largest Software Company
  14. 实时热力图_原来微信按下这个键,就能轻松知道对方的实时位置,看完涨知识了...
  15. oeasy教您玩转vim - 59 - # 编辑总结
  16. echarts世界地图
  17. Java连接阿里云大数据计算服务Maxcompute(ODPS)
  18. could not find java in ES_JAVA_HOME at /root/opt/elastic/elasticsearch-8.1.2/jdk/bin/java
  19. 线性代数(六)——二次型
  20. pandas与数据库

热门文章

  1. 前端入门学习笔记五十一
  2. 清新简约教育培训汇报总结PPT-朴尔PPT
  3. vbox官方下载地址
  4. selenium 爬抖音
  5. Unity3d 5烘焙相关
  6. 从代码模拟角度理解芝诺悖论
  7. 开关电源环路稳定性分析(03)-开环电源
  8. vue和react哪个开发效率高,vue 和 react 哪个前景好
  9. gearsec.exe
  10. 修改git提交commit信息NAME和EMAIL