[逆向工程]160个CrackMe入门实战之Afkayas.1.Exe解析(二)

[逆向工程]160个CrackMe入门实战之Afkayas.1.Exe解析(二)

一、前言

在逆向工程的学习路径上,CrackMe程序是初学者最好的练手材料。今天我们要分析的是160个CrackMe系列的第二题——Afkayas.1.Exe。这个程序由Afkayas编写,难度为★(初级),包含了典型的验证机制。通过本实战,你将学会:

  • 使用x32dbg进行动态调试
  • 爆破方法
  • 分析算法逻辑并编写注册机
  • 掌握基本的汇编指令分析技巧

二、环境与工具准备

在开始逆向之前,我们需要准备以下环境:

  • 操作系统:Windows 10
  • 调试工具:x32dbg
  • 目标程序:Afkayas.1.Exe
  • 辅助工具:ExeinfoPe(查壳工具,虽然本程序无壳)

三、程序初步分析

3.1 查壳分析

无壳32位vb语言

在这里插入图片描述

3.2 运行Afkayas.1.Exe

功能:验证用户输入的用户名(Name)与序列号(Serial)是否匹配

目的:跳过账号序列号匹配验证

四、逆向破解实战

4.1 验证爆破

此部分需要同时输入用户名和序列号。

4.1.1 爆破方法
  1. 定位错误提示

    x32dbg打开程序,F9运行,搜索字符串“You Get Wrong” 找到关键跳转,直接爆破

在这里插入图片描述

将红色箭头处代码直接nop填充,打补丁另存程序

在这里插入图片描述

2.结果验证

在这里插入图片描述

4.1.2 算法分析与注册机编写

通过动态调试,我们可以发现序列号的生成规律:

1.序列号生成算法

call dword ptr ds:[eax+A0]
cmp eax,edi
jge afkayas.1.4023D2
push A0
push afkayas.1.401B5C
push ebx
push eax
call dword ptr ds:[<__vbaHresultCheckObj>]
push esi
call dword ptr ss:[ebp-C4]
lea edx,dword ptr ss:[ebp-28]
push eax
push edx
call dword ptr ds:[<__vbaObjSet>]
mov ebx,eax
lea ecx,dword ptr ss:[ebp-1C]
push ecx
push ebx
mov eax,dword ptr ds:[ebx]
call dword ptr ds:[eax+A0]        
cmp eax,edi
jge afkayas.1.402409
push A0
push afkayas.1.401B5C
push ebx
push eax
call dword ptr ds:[<__vbaHresultCheckObj>]
mov edx,dword ptr ss:[ebp-B0]
mov eax,dword ptr ss:[ebp-1C]
push eax
mov ebx,dword ptr ds:[edx]
call dword ptr ds:[<__vbaLenBstr>]
mov edi,eax
mov ecx,dword ptr ss:[ebp-18]
imul edi,edi,17CFB      ;账号长度乘以0x17cfb
push ecx
jo afkayas.1.4026BE
call dword ptr ds:[<Ordinal#516>]  ;获取输入账号字符串首字符ASCII值
movsx edx,ax
add edi,edx       ;相加生成字符串 比如 390173
jo afkayas.1.4026BE
push edi
call dword ptr ds:[<__vbaStrI4>]
mov edx,eax
lea ecx,dword ptr ss:[ebp-20]
call dword ptr ds:[<__vbaStrMove>]

在这里插入图片描述

vbastrcat函数将AKA-和后边字符串例如390173拼接在一起从而得到序列号:

AKA-390173

以上序列号是输入账号1111得到的,至此算法破解

在这里插入图片描述

2.注册机实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{char username[50] = {0};char serial[100] = {0};printf("Enter Username: ");scanf("%s", username);//账号长度自由发挥if(strlen(username) < 4) {printf("Error: Username must be at least 4 characters!\n");// 添加暂停printf("Press Enter to exit...");getchar(); // 清除输入缓冲区残留的换行符getchar(); // 等待用户按键return 1;}int firstChar = username[0];int serialNum =  strlen(username) * 0x17CFB + firstChar; //算法账号长度*固定数+首字符ASCIIsprintf(serial, "AKA-%d", serialNum);printf("Your Serial: %s\n", serial);// 添加暂停printf("Press Enter to exit...");getchar(); // 清除输入缓冲区残留的换行符getchar(); // 等待用户按键return 0;
}
//gcc -0 cm.exe cm.c

3.验证注册机

在这里插入图片描述

如果你觉得本教程对你有帮助,请点赞❤️、收藏⭐、关注支持!欢迎在评论区留言交流技术细节!

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

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

相关文章

本地电脑安装Dify|内网穿透到公网

1.安装Docker Docker: Accelerated Container Application Development 2.添加 PATH 3.安装Dify https://github.com/langgenius/dify.git 把.env.example文件名改为.env 4.更换镜像源 {"builder": {"gc": {"defaultKeepStorage": "20G…

数据结构自学Day6 栈与队列

1. 栈其实栈与队列仍然属于线性表&#xff08;有n个元素构成的集合&#xff0c;逻辑结构呈现线形&#xff09;线形表&#xff1a;顺序表&#xff0c;链表&#xff0c;栈&#xff0c;队列&#xff0c;串&#xff08;字符串&#xff09;栈&#xff08;Stack&#xff09;是一种线性…

Java 异常处理详解:从基础语法到最佳实践,打造健壮的 Java 应用

作为一名 Java 开发工程师&#xff0c;你一定遇到过运行时错误、空指针异常、文件找不到等问题。Java 提供了强大的异常处理机制&#xff0c;帮助我们优雅地捕获和处理这些错误。本文将带你全面掌握&#xff1a;Java 异常体系结构try-catch-finally 的使用throw 与 throws 的区…

Fiddler弱网测试实战指南

Fiddler是一个常用的网络抓包工具&#xff0c;它也可以用来模拟弱网环境进行测试。 在测试时需要用到弱网测试&#xff0c;也就是在信号差、网络慢的情况下进行测试。比如&#xff0c;用户在地铁、电梯、地下车库等场景经常会遇到会话中断、超时等情况&#xff0c;这种就属于弱…

解决Vue页面黑底红字遮罩层报错:Unknown promise rejection reason (webpack-internal)

vue前端页面弹出黑底红色报错遮罩层报错&#xff1a;具体报错信息&#xff1a;Uncaught runtime errors: ERROR Unknown promise rejection reasonat handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299:58)at eval (webpack-internal…

构建 Go 可执行文件镜像 | 探索轻量级 Docker 基础镜像(我应该选择哪个 Docker 镜像?)

文章目录构建 Go 可执行文件镜像典型用途探索轻量级 Docker 基础镜像构建 Go 可执行文件镜像 golang:1.23.0-bullseye 是官方 Go 镜像的一个 “build-stage” 版,用来构建 Go 可执行文件&#xff0c;而不是把它当成最终运行镜像。 dockerhub官方&#xff1a;https://hub.dock…

链表算法之【回文链表】

目录 LeetCode-234题 LeetCode-234题 给定一个单链表的头节点head&#xff0c;判断该链表是否为回文链表&#xff0c;是返回true&#xff0c;否则返回false class Solution {/*** 这里的解题思路为&#xff1a;* (1)、找中间节点* (2)、反转链表* (3)、遍历比较节点值是否相…

Playwright Python 教程:网页自动化

1. 常用工具简介及对比主流网页自动化工具对比工具支持语言浏览器支持特点适用场景PlaywrightPython, JS, .NETChromium, Firefox, WebKit跨浏览器、速度快、API简洁自动化测试、爬虫、网页操作Selenium多语言所有主流浏览器历史悠久、社区大传统自动化测试、兼容性测试Puppete…

动态数组:ArrayList的实现原理

动态数组&#xff1a;ArrayList的实现原理 大家好&#xff01;今天我们来聊聊Java集合框架中一个非常重要的数据结构——ArrayList。就像我们日常生活中使用的伸缩收纳盒一样&#xff0c;ArrayList可以根据需要自动调整大小&#xff0c;既方便又高效。那么它是如何实现这种&quo…

MIPI DSI(五) DBI 和 DPI 格式

关于 DBI 和 DPI 这两种格式的详细协议内容&#xff0c;请参考《MIPI Alliance Standard for Display Bus Interface&#xff08;V2.0&#xff09; .pdf》和《MIPI Alliance Standard for Display Pixel Interface&#xff08;DPI- 2&#xff09; .pdf》这两份文档。首先先了解…

FRP Ubuntu 服务端 + MacOS 客户端配置

一、服务端配置 1、下载frp并解压 # 创建目录并进入 mkdir -p /opt/frp && cd /opt/frp # 下载最新版&#xff08;替换URL为GitHub发布页最新版本&#xff09; wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz # 解压 …

Video Python(Pyav)解码二

在 PyAV 中&#xff0c;input_container.decode() 和 input_container.demux() 是两种处理视频流数据的不同方法&#xff0c;它们分别适用于不同的场景。下面通过代码示例和对比来详细说明它们的用法和区别。1. input_container.decode()功能直接解码&#xff1a;从容器中读取数…

闲庭信步使用图像验证平台加速FPGA的开发:第十六课——图像五行缓存的FPGA实现

&#xff08;本系列只需要modelsim即可完成数字图像的处理&#xff0c;每个工程都搭建了全自动化的仿真环境&#xff0c;只需要双击top_tb.bat文件就可以完成整个的仿真&#xff0c;大大降低了初学者的门槛&#xff01;&#xff01;&#xff01;&#xff01;如需要该系列的工程…

头文件与源文件及区别

使用场景上的区别头文件&#xff1a;变量的声明&#xff0c;函数的声明&#xff0c;宏的定义&#xff0c;类的定义等。 源文件&#xff1a;变量的定义。函数的定义实现&#xff0c;类成员函数的定义实现等。这样方便于我们去管理、规划&#xff0c;更重要的是避免了重定义的问题…

图机器学习(4)——图机器学习与嵌入算法

图机器学习&#xff08;4&#xff09;——图机器学习与嵌入算法0. 前言1. 图机器学习1.1 机器学习基本原理1.2 图机器学习的独特优势2. 广义图嵌入问题3. 图嵌入算法分类小结0. 前言 机器学习是人工智能的一个重要分支&#xff0c;它致力于让系统能够从数据中自主学习并持续优…

网络基础10--ACL与包过滤

一、ACL 定义与核心功能ACL&#xff08;访问控制列表&#xff09;是通过规则匹配实现数据包过滤或分类的核心技术&#xff0c;广泛应用于包过滤、NAT、QoS、路由策略等场景。其核心由规则条目组成&#xff0c;每条规则包含匹配条件&#xff08;如源 / 目 IP、端口、协议&#x…

Web安全 - 基于 SM2/SM4 的前后端国产加解密方案详解

文章目录概述一、背景与法规要求二、算法选型三、核心流程四、前端实现要点&#xff08;伪代码&#xff09;五、后端实现要点(伪代码)六、公钥存储策略七、全流程示例图八、总结与最佳实践推荐概述 随着信息安全法规日益严格&#xff0c;如《网络安全法》《数据安全法》和等保…

ACL动态路由实验全攻略:配置与安全实战

实验拓扑图 实验需求 步骤1.按照图示配置IP地址2.按照图示区域划分配置对应的动态路由协议3.在R7上配置dhcp服务器&#xff0c;能够让pc可以获取IP地址4.将所有环回宣告进ospf中&#xff0c;将环回17宣告进rip中&#xff0c;将rip路由引rospf中&#xff0c;ospf路由引.rip中5.要…

电动汽车制动系统及其工作原理

制动系统是实现车辆减速、停车功能的重要系统。电动汽车的制动系统按照制动实现方式分为机械制动和电机再生制动&#xff0c;机械制动根据制动力实现方式不同又可分为液压机械制动系统、气压机械制动系统和电子机械制动系统。目前&#xff0c;电动汽车的制动系统实现一般为协调…

CentOS 7 Linux 离线安装 docker-compose

CentOS 7 Linux 离线安装 docker-compose 1. docker-compose 简介 1.1. docker-compose 是什么&#xff1f; docker-compose 是 Docker 官方提供的工具&#xff0c;用于定义和运行多容器 Docker 应用程序。通过一个 YAML 文件&#xff08;通常为 docker-compose.yml&#xf…