文章目录

  • 查壳
  • 分析程序
  • 用户名算法分析(前14位)
  • 序列号算法分析(后4位)
  • 算法总结
  • 注册机探索
  • 验证结果

这个Crackme和上一个是同一个作者,保护方式是KeyFile。难度两颗星

查壳

同样是汇编写的,作者伪造了一个Delphi的OEP。

分析程序

这个软件的KeyFile保护没有必要用监控工具了。验证直接就在入口处,直接单步往下跟就可以了

首先检测CRACKME3.KEY这个文件是否存在

然后从文件中读取0x12个字节,并检测文件内容是否少于0x12个字节,

那么我们就伪造一个CRACKME3.KEY文件,并且再里面随便输18个字母


然后将文件内容放入堆栈,开始计算前14个字节。

这个文件总共需要18个字节,前14个字节为用户名,后4个字节为序列号。每一部分都有一个算法,下面分析用户名算法部分

用户名算法分析(前14位)

用户名算法的校验过程如下:

  1. bl初始值为0x41
  2. 然后取出用户名第i位的ASCII值,
  3. 将用户名第i位的ASCII值和bl进行异或
  4. 用户名右移一位
  5. bl++
  6. 然后将每一轮用户名第i位和bl异或的结果相加保存到[0x4020F9]这个地址,这个地址保存的值就是用户名计算的结果
  7. i++
  8. 整个过程循环0xE次
  9. 将用户名计算的结果和0x12345678进行异或,如下图

序列号算法分析(后4位)

接下来将0x14个字节的文件内容压入堆栈,然后执行0040133C这个函数

这个函数的作用就算将文件内容右移14位,也就是去掉前14位用户名的部分,然后将最后四位赋值给eax

最后比较后四位是否等于[0x4020F9],也就是前12位用户名计算的结果,根据比较的结果提示是否破解成功

算法总结

总结一下前面的分析,文件内容必须是18个字符,前14位是用户名,后4位是序列号。序列号必须等于用户名计算的结果。

注册机探索

接下来写出注册机,代码如下:

#include <iostream>
#include <windows.h>
using namespace std;int main()
{char username[15] = { 0 };char serial[5] = { 0 };int temp = 0x41;int result = 0;printf("请输入用户名,长度必须为14:");scanf_s("%s", username, 15);for (int i = 0; i < 14; i++){username[i] ^= temp;result += username[i];temp++;}result ^= 0x12345678;char* p = (char*)&result;for (int i = 0; i < 4; i++){printf("%c", p[i]);}printf("\n");system("pause");return 0;
}

验证结果

随便输入一个12位的用户名,然后把计算出来的序列号复制过去替换后四位,乱码不需要管,再打开目标程序

破解完成,最后需要相关文件可以到我的Github下载:

https://github.com/TonyChen56/160-Crackme

160个Crackme034拆解KeyFile验证升级版相关推荐

  1. 160个Crackme032用ProcessMonitor拆解KeyFile保护

    文章目录 查壳 添加签名 导入符号 KeyFile前置知识 原理 如何防止被破解 相关API函数 拆解KeyFile保护 实战破解KeyFile 校验结果 破解Name/Serial 用Darkde4 ...

  2. MVC框架的Model数据验证

    1.新建一个实体类 需要引入命名空间:using System.ComponentModel;using System.ComponentModel.DataAnnotations; public c ...

  3. 以前的记录(加密与解密)

    常见的演示版保护技术 5.1序列号保护方式 5.1.1序列号保护机制 软件验证序列号的过程,其实就是验证用户名和序列号之间的数学映射关系. 给定一个用户名,利用穷举法找到一个满足式的序列号,这只适用于 ...

  4. 最新郁金香VC++基础项目实战(完整)

    郁金香VC++基础视频教程课程目录 下载地址:百度网盘 一.前言  1. C,C++,VC之间的关系,VC环境的安装配置 ---第1课      A.C,C++,VC之间的关系,VC环境的安装配置  ...

  5. OD破解演示版保护技术

    1.菜单功能限制 可解密试用版和正式版为同一文件,注册之前部分功能不能试用,注册之后所有部分都可以使用. 1.1相关函数 1.EnableMenultem()函数 2.EnableWindow()函数 ...

  6. ICLR 2021 | 基于自监督学习的小样本分类,代码已开源

    作者 | 张曼黎 编辑 | 陈大鑫 深度神经网络往往要求为每个新任务收集大量标记训练数据,实用性也因此受到限制.给定来自一组源任务的数据,有两种迁移学习方法可以克服这种限制:小样本学习 (FSL) 和 ...

  7. python3爬取数据存入mysql_Python如何爬取51cto数据并存入MySQL

    实验环境 1.安装Python 3.7 2.安装requests, bs4,pymysql 模块 实验步骤1.安装环境及模块 2.编写代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  8. 神策数据:从产品与运营视角,了解教育行业转介绍

    一.转介绍基础信息 1.什么是转介绍? 转介绍是一种利用老用户在私域社交场景分享获取新用户的拉新方式.它并不是一个新的概念,之前线下培训机构就经常使用--家长们拉来新的家长购买课程,就可以得到一定的返 ...

  9. python爬取mysql_Python如何爬取51cto数据并存入MySQL

    实验环境 1.安装python 3.7 2.安装requests, bs4,pymysql 模块 实验步骤1.安装环境及模块 可参考 2.编写代码 # 51cto 博客页面数据插入mysql数据库 # ...

最新文章

  1. java 爬虫 异步_Java 爬虫遇上数据异步加载,试试这两种办法!
  2. Windows Service
  3. 两台电脑之间用网线之间传文件
  4. 5GS 协议栈 — PFCP 协议 — BAR 缓存行为规则
  5. [转]---UAP中如何判断当前APP在哪个平台设备上运行
  6. hdu 1723(简单dp)
  7. hdu 3590——PP and QQ
  8. laravel increment出现了翻倍递增_股票连续多少个涨停板就可以市值翻倍?
  9. 今天起支付宝还信用卡开始收费 每月2000免费额度
  10. 现在的计算机电源都要经过,电脑待机后必须关闭电源才能开启
  11. 被邻居偷偷拉了条网线到他家,然后在他家装WiFi,我怎么让他不能使用我的网络?
  12. php中的数据库操作和字符串操作session与cookie操作,PHP的cookie与session原理及用法详解...
  13. 使用axis公布weblogic(一个)
  14. 工作中使用到的单词(软件开发)_2022_0815备份
  15. 最方便的办法下载bilibili视频
  16. win7/win10系统防火墙禁止单个应用联网步骤
  17. speedoffice表格如何方框内打勾
  18. linux网卡发送优化,Linux 性能分析总结之网络(六)
  19. oracle floor
  20. matlab去除摩尔纹,索尼ILCE-7RM2测评——理论画质篇

热门文章

  1. Py之paddlehub:paddlehub的简介、安装、使用方法之详细攻略
  2. SWIG:SWIG的简介、安装、使用方法之详细攻略
  3. MAT之PSO:利用PSO+ω参数实现对一元函数y = sin(10*pi*x) ./ x进行求解优化,找到最优个体适应度
  4. 蓝桥杯_算法训练_关联矩阵
  5. github RL: DP
  6. PowerDesigner中NAME和COMMENT的互相转换,需要执行语句
  7. JAVA 解析xml字符串
  8. OpenLayers 3 之 地图样式(ol.style)详解
  9. setfacl设置特定目录的权限
  10. 配置ip地址四种方法,方便学习linux的朋友