crackme006

crackme006

名称
软件名称aLoNg3x.1.exe
加壳方式
保护方式Serial
编译语言Delphi
调试环境Win10 64位
使用工具x32dbg,ida pro,PEid,DarkDe4
破解日期2025-06-05

脱壳

1. 先用PEid查壳

01-PEid查壳
查到无壳

寻找Serial

  • 查询到编程语言为Delphi

  • 导出Delphi符号表信息到x32dbg,用IDA Pro 打开程序
    02-ida pro 打开程序

  • 添加常见Delphi库的符号

常见Delphi库
b32vcl
bds2006
delphi
d5vcl
d4vcl
c4vcl
bds
  • 快捷键Shift+F5,如下图所示
    03-IDA Pro Signatures

  • 导出map文件,File->Produce file->Create MAP file...
    04-导出map文件

  • 安装SwissArmyKnife插件,导入上一步生成的map文件。x32dbg中插件->SwissArmyKnife->Load->MAP file
    15-导入map文件

  • 用DarkDe4打开PE文件
    16-DarDe4查看Delphi程序

  • 查看窗体结构
    07-DarDe4查看Delphi窗体结构

  • 寻找flag,点击 About-Help按钮,发现Flag:隐藏Cancella和Ok两个按钮
    08-Find-Flag

  • 在DarkDe4中可以发现Cancella的id为:2D0,Ok按钮的id为:2CC
    09-DarDe4查看控件Id

  • 查找Cancella的调用 鼠标右键->搜索->当前模块->常数 输入2D0
    10-查找常数2D0

  • 选中地址=00442EF2反汇编=mov eax,dword ptr ds:[ebx+2D0] 跳转到SetVisible函数的调用处,发现关键函数调用call <along3x.1.sub_442AF4>
    11-SetVisible的调用处

  • 分析函数调用call <along3x.1.sub_442AF4>
    12-分析隐藏Cancella算法

mov eax,dword ptr ss:[ebp-4] ;取nome字符串首地址
call <along3x.1.unknown_libname_1145> ;获取nome字符串的长度
cmp eax,5 ;nome字符串长度与5比较
jle <along3x.1.loc_442B78> nome字符串长度小于等于5则字节,跳转到along3x.1.loc_442B78
mov eax,dword ptr ss:[ebp-4] ;取nome字符串首地址
movzx eax,byte ptr ds:[eax+4]; 取nome[4]的ASCII
mov ecx,7
xor edx,edx;情况edx
div ecx ;eax除以7,商存入eax,余数存入edx中
mov eax,edx;余数存入eax
add eax,2;eax = 余数+2
call <along3x.1.sub_442A20>;求eax的阶乘
mov esi,eax ;阶乘结果存入esi
xor ebx,ebx ;清空ebx
mov eax,dword ptr ss:[ebp-4];取nome字符串首地址
call <along3x.1.unknown_libname_1145>;nome字符串的长度
test eax,eax  ;eax按位与
jle <along3x.1.loc_442B65> ;nome长度为0跳转到along3x.1.loc_442B65
mov edx,1  ;索引初值为1
along3x.1.loc_442B54: mov ecx,dword ptr ss:[ebp-4] ;取nome字符串首地址
movzx ecx,byte ptr ds:[ecx+edx-1];取nome[edx-1]的ascii
imul ecx,esi ;nome[edx-1]的ascii乘以阶乘
add ebx,ecx;nome[edx-1]的ascii乘以阶乘结果累加到ebx中
inc edx;索引自增1
dec eax;字符串长度自减1
jne <along3x.1.loc_442B54>; eax不为0跳转到along3x.1.loc_442B54
sub ebx,dword ptr ss:[ebp-8];累加结果减去strToInt(codice)
cmp ebx,7A69;结果是否等于7A69
jne <along3x.1.loc_442B74>;不等于7A69跳出
mov bl,1
  • 综上分析出算法,写下c++代码注册机
#include<stdio.h>
#include<stdlib.h>
#include<string.h>int factorial(int n)
{if (n == 1)return 1;return n * factorial(n - 1);
}int serial1(char* name)
{int len = strlen(name);if (len <= 5){return -1;}int res = 0;int resA = (name[4] % 7 + 2);resA = factorial(resA);for (int index = 0; index < len; index++){res += name[index] * resA;}res -= 0x7A69;return res;
}
int main()
{char nome[1024]={0};printf("请输入Nome得出codice解锁Cancella:\n");scanf("%s", nome);int res = serial1(nome);if (res == -1){printf("字符串长度必须大于5\r\n");return 0;}printf("序列号为:%d\r\n", res);return 0;
}
  • 查找Ok的调用 鼠标右键->搜索->当前模块->常数 输入2CC
    在这里插入图片描述
  • 选中 地址=00442DCC反汇编=mov eax,dword ptr ds:[ebx+2CC] ,跳转到SetVisible函数的调用处,发现关键函数调用call <along3x.1.sub_442BA0>
    14-SetVisible的调用处
  • 分析call <along3x.1.sub_442BA0>
    15-分析隐藏Ok算法
mov eax,dword ptr ss:[ebp-8]; 取codice字符串首地址
call <along3x.1.unknown_libname_1145> ;取codice字符串长度
cmp eax,5 ; 比较字符串长度与5
jle <along3x.1.loc_442C4A> ;字符串长度小于等于5则跳转出去
mov eax,dword ptr ss:[ebp-8]; 取codice首地址
call <along3x.1.unknown_libname_1145> ; 取codice字符串长度
mov esi,eax
cmp esi,1 ; 字符串长度与1比较
jl <along3x.1.loc_442C28> ;字符串长度小于1跳转出去
along3x.1.loc_442BF9: lea eax,dword ptr ss:[ebp-C] ;取codice首地址
call <along3x.1.System::UniqueString(System::AnsiString &)>
lea eax,dword ptr ds:[eax+esi-1]; 取codice[esi-1]的地址
push eax ; codice[esi-1]的地址入栈
mov eax,dword ptr ss:[ebp-8] ; 取codice的首地址
movzx eax,byte ptr ds:[eax+esi-1] ; 取codice[esi-1]的ascci
imul eax ; eax = codice[esi-1]*codice[esi-1]
movsx eax,ax; 取积的低16位
imul esi ; 乘以当前索引
mov ecx,19
cdq 
idiv ecx; 除以19
add edx,41; 除以19的余数+0x41
pop eax ; 将codice[esi-1]的地址赋值给eax
mov byte ptr ds:[eax],dl; 将结果的低8位赋值给codice[esi-1]
dec esi ; esi 自减1
test esi,esi 判断esi是否为0
jne <along3x.1.loc_442BF9> ; esi不为零循环继续
  • 综上分析出算法,写下c++代码注册机
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* serial2(char* codice)
{int len = strlen(codice);if (len <= 5){return NULL;}int res = len;char ans[1024] = {0};for (int index = len - 1; index >= 0; index --){ans[index] = (codice[index] * codice[index] * (index + 1) % 0x19) + 0x41;}return ans;
}
int main()
{char codice[1024] = { 0 };printf("请输入codice得出nome解锁Ok:\n");scanf("%s", codice);char* ans_str = serial2(codice);if (ans_str == NULL){printf("字符串长度必须大于5\r\n");return 0;}printf("序列号为:%s\r\n", ans_str);return 0;
}

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

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

相关文章

Conda 创建新环境时报错 HTTP 502,如何解决?

Conda 创建新环境时报错 HTTP 502&#xff0c;如何解决&#xff1f; 最近在用 Conda 创建新环境时&#xff0c;突然遇到这样一个错误&#xff1a; CondaHTTPError: HTTP 502 BAD GATEWAY for url <https://mirrors.westlake.edu.cn/ANACONDA/cloud/conda-forge/linux-64/r…

2025最全TS手写题之partial/Omit/Pick/Exclude/Readonly/Required

随着 TS 在工作中使用的越来越广泛&#xff0c;面试的时候面试官也都会加上一两个 TS 的问题来了解候选人对于 TS 的熟悉程度&#xff0c;其中就有不少手写题目&#xff0c;比如笔者在字节的一次二面&#xff0c;面试官就问到了我如何实现一个 Pick&#xff0c;在小红书的一面&…

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…

LLMs之StructuredOutput:大模型结构化输出的简介、常用方案、前沿框架之详细攻略

LLMs之StructuredOutput&#xff1a;大模型结构化输出的简介、常用方案、前沿框架之详细攻略 目录 大模型结构化输出的简介 1、特点与难点 大模型结构化输出的常用方案及对比 1、前沿框架&#xff1a;vLLM 与 XGrammar 大模型结构化输出的案例应用 大模型结构化输出的简介…

Linux中shell流程控制语句

一、if条件控制 1.1 语法解读 单路决策 - 单分支if语句样式&#xff1a;if [ 条件 ]then指令fi特点&#xff1a;单一条件&#xff0c;只有一个输出 双路决策 - 双分支if语句样式&#xff1a;if [ 条件 ]then指令1else指令2fi特点&#xff1a;单一条件&#xff0c;两个输出 …

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…

数据结构-文件

文件是性质相同的记录的集合。 记录是文件中存取的基本单位&#xff0c;数据项是文件可使用的最小单位。 操作系统研究的文件是一维的无结构连续字符序列&#xff0c;数据库中研究的文件是带有结构的记录集合。 文件在外存上的4种基本组织方式&#xff1a;顺序、索引、散列、链…

前端开发面试题总结-CSS篇

文章目录 CSS面试高频问答1、CSS选择器的优先级2、CSS3新特性3、如何垂直水平居中盒子4、什么是重绘和重排5、px/em/rem/vw有什么区别6、rem布局的原理7、如何设置比12px还要小的字体8、CSS中隐藏元素的方式有哪些 CSS面试高频问答 1、CSS选择器的优先级 2、CSS3新特性 3、如何…

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…

解决ubuntu20.04无法唤醒的问题的一种方法

解决ubuntu20.04无法唤醒的问题的一种方法 我更改了三个个地方&#xff0c;目前不清楚是哪个地方起的作用&#xff0c;也可能都起作用了 修改的第一个地方 步骤 1: 获取 Swap 分区的 UUID 首先&#xff0c;你需要知道你的 swap 分区的 UUID。你可以使用以下命令来查找它&am…

【大厂机试题解法笔记】矩阵匹配

题目 从一个 N * M&#xff08;N ≤ M&#xff09;的矩阵中选出 N 个数&#xff0c;任意两个数字不能在同一行或同一列&#xff0c;求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求&#xff1a;1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …

使用osqp求解简单二次规划问题

文章目录 一、问题描述二、数学推导1. 目标函数处理2. 约束条件处理 三、代码编写 一、问题描述 已知&#xff1a; m i n ( x 1 − 1 ) 2 ( x 2 − 2 ) 2 s . t . 0 ⩽ x 1 ⩽ 1.5 , 1 ⩽ x 2 ⩽ 2.5 min(x_1-1)^2(x_2-2)^2 \qquad s.t. \ \ 0 \leqslant x_1 \leqslant 1.5,…

pe文件结构(TLS)

TLS 什么是TLS? TLS是 Thread Local Storage 的缩写&#xff0c;线程局部存储。主要是为了解决多线程中变量同步的问题 如果需要要一个线程内部的各个函数调用都能访问&#xff0c;但其它线程不能访问的变量&#xff08;被称为static memory local to a thread 线程局部静态变…

Electron简介(附电子书学习资料)

一、什么是Electron&#xff1f; Electron 是一个由 GitHub 开发的 开源框架&#xff0c;允许开发者使用 Web技术&#xff08;HTML、CSS、JavaScript&#xff09; 构建跨平台的桌面应用程序&#xff08;Windows、macOS、Linux&#xff09;。它将 Chromium浏览器内核 和 Node.j…

如何使用DeepSeek帮助自己的工作?(Java开发)

如何使用DeepSeek帮助自己的工作&#xff1f; 作为Java开发者&#xff0c;你可以通过以下方式高效利用DeepSeek提升工作效率&#xff08;附具体操作示例&#xff09;&#xff1a; 一、日常编码加速 1. 代码生成与补全 // 输入需求描述&#xff1a; "生成SpringBoot分页…

Uniapp 二维码生成与解析完整教程

前言 使用Uniapp开发多平台应用&#xff0c;二维码生成采用uQRCode插件&#xff0c;非常nice&#x1f601;&#xff01; Coding 原理 使用canvas绘制 生成二维码数据 绘制到canvas上 使用 <uqrcoderef"uqrcodeRef"canvas-id"qrcode":value"qr…

Vue ⑤-自定义指令 || 插槽

自定义指令 自定义指令&#xff1a;自己定义的指令, 可以封装一些 dom 操作&#xff0c; 扩展额外功能。 全局注册 语法&#xff1a; Vue.directive(指令名, {"inserted" (el) {// 可以对 el 标签&#xff0c;扩展额外功能el.focus()} })局部注册 语法&#xff…

Java HttpClient实现简单网络爬虫

今天我将使用Java的HttpClient&#xff08;在Java 11及以上版本中内置&#xff09;来编写一个入门级的网络爬虫示例。 这个示例将演示如何发送HTTP GET请求&#xff0c;获取响应内容&#xff0c;并处理可能出现的异常。 以下是一个基于Java HttpClient&#xff08;Java 11&…

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…