“破解我!“---160个CrackMe练习002-Afkayas.1.Exe

news2024/12/23 22:38:43

文章目录

  • 前言
  • 题目分析
  • 程序分析
  • Keygen

前言

系列之002,记录学习。


题目分析

在这里插入图片描述
一道一星的题目

惯例查壳。
在这里插入图片描述
32-bit的文件,用的是 VB 写的。

关于Visual Basic

Visual Basic(VB)是由微软公司开发的包含环境的事件驱动编程语言。它源自于 BASIC 编程语言。VB 拥有图形用户界面(GUI)和快速应用程式开发(RAD)系统,可以轻易的使用 DAO、RDO、ADO 连接数据库,或者轻松的创建 ActiveX 控件。程序员可以轻松地使用 VB 提供的组件快速建立一个应用程序。

虽然VB现在已经不再更新了,但是并不妨碍我们的学习。

也是惯例,运行程序观察一下

!这里会出现一个问题(我不同虚拟机都遇到过)
就是找不到msvbvm50.dll的问题,这里可以上https://cn.dll-files.com/msvbvm50.dll.html下载。
然后放到文件夹下:

把文件放到你的系统路径。它的默认路径是在:
C:\Windows\System (Windows 95/98/Me),
C:\WINNT\System32 (Windows NT/2000),
C:\Windows\System32 (Windows XP, Vista, 7, 8, 8.1, 10).
在 64位 Windows 上,32位 DLL 文件的默认路径是
C:\Windows\SysWOW64\, 64 位 DLL 文件在
C:\Windows\System32\ 。
确保覆盖已有的全部文件(但保留一个原文件备份)。
重启电脑。

然后就解决问题了。

重新运行程序。

在这里插入图片描述
name + serial 的验证方式,看起来和上一题差不多;

在这里插入图片描述


程序分析

载入xdbg后,搜索字符串,找到 You Get Wrong这句话,点击过去。

这里除了搜索字符串还可以根据调用堆栈的情况来找到此处,在运行程序后输入name和serial,弹出错误信息后不点击确定,而是返回xdbg查看堆栈情况 Alt+K,
在这里插入图片描述
找到一个,虽然都是msvbvm50的函数,大部分都看不懂,但是这一个的返回地址是在00402622,比较符合我们的预期,一般00400000是整个程序的开始。所以这里点击这个rtcMsgBox右键跟随目标。然后往上翻一点就可以看到错误信息了。

在这里插入图片描述

接着往上一直翻, 继续在 push ebp处打下断点, 这次是在00402310处。

在向上的过程中,你会看到一个
在这里插入图片描述
正确信息和 一个je 跳转 ,je指令的跳转是根据ZF标志位来进行的,ZF标志位为 1 的时候实现跳转。

因此这里第一种爆破方式就是 直接 nop 掉 je指令;

在这里插入图片描述

第二种就是 在运行到je指令的时候 将 ZF标志位手动改成 0 ;

在这里插入图片描述

还有第三种就是 修改 test指令, 因为test本质上是 and 指令 ,如果 and 结果为 0 就会将ZF标志位置为1.
在这里插入图片描述

Keygen

重新运行一下程序,因为需要把我们先前做的更改去掉。

这里依旧在push ebp处打下断点,然后让程序自动断在此处。开始一步一步向下追码,先F8单步步过就好。

一直到
在这里插入图片描述

xdbg的功能蛮强大的,很多注释都会给出来,(当然那几串中文是自己注释的)

一般在临近 有 000111出现的地方,(这次的输入是 000111 + 123456)就该注意了

这里显示call 调用了一个函数,可以看到Len B str 就像是计算字符串长度,也可以上网查阅相关信息;

在调用后

在这里插入图片描述

eax 变成了 6 也可以验证我们的猜想,你也可以尝试不同的输入,去验证。

接着向下, 用 imul 乘以一个固定的值 17CFB 接着 再加上 '0’的 hex值也就是 0x30

这里得出的结果是 8EE12 转换成十进制 585234

再接着一直往下跑,

在这里插入图片描述

会先看到一个 AKA- 再接着又是一个 VB函数 写着 Str Move 这里的意思很明白了,拼接字符串的意思

那么我们的serial 也就出来了 AKA-585234
在这里插入图片描述
验证成功 ,开始写 Keygen。

def keygen(name):
    key = ord(name[:1]) + len(name) * 0x17CFB
    print(f"Your serial : AKA-{key}")


if __name__ == "__main__":
    name = input("please enter your name: ")
    keygen(name)

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

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

相关文章

酒店预订订房小程序源码系统 带完整搭建教程

酒店预订订房小程序源码系统是一种基于互联网技术的线上预订平台,旨在为用户提供方便快捷的酒店预订服务。该系统通常包括前端用户界面、后端服务器和数据库三个部分,其中前端界面主要展示酒店信息、订房需求信息、订单信息等,后端服务器负责…

国风AI绘画平台Trik;「一个女孩的一生」走红;音视频转文字的精准处理指南;神经网络原理动画 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🉑 智谱AI推出第三代基座大模型ChatGLM3,瞄向了 GPT-4V https://github.com/THUDM/ChatGLM3 10月27日,智谱AI宣布…

EVM6678L 开发教程: 烧写 IBL(Intermediate Bootloader)

目录 EVM6678L 开发教程: 烧写 IBL烧写出厂IBL修改IBL引导格式 EVM6678L 开发教程: 烧写 IBL 参考: C:\ti\mcsdk_2_01_02_06\tools\boot_loader\ibl\doc\README.txtC:\ti\mcsdk_2_01_02_06\tools\boot_loader\ibl\doc\evmc6678-instructions.txtC:\ti\mcsdk_2_01_02_06\tools…

js 异常数组 [空白,Array(10),空白,Array(10),空白]

异常数组 [空白,Array(10),空白,Array(10),空白] 的解决方案

Elasticsearch(二)---搭建

搭建es 不允许root用于运行 创建esuser用户: useradd esuser 设置密码 passwd esuser 让esuser拥有sudo的权限,需要修改/etc/sudoers文件 需要先给/etc/sudoers添加写的权限 [rootnode1 ~]# vim /etc/sudoers 改完之后将写权限删除 三台服务器上操…

halcon canny 和opencv c++ canny 实现对比

Opencv和C实现canny边缘检测_opencv边缘增强-CSDN博客 一、canny实现步骤 1、图像必须是单通道的,也就是说必须是灰度图像 2、图像进行高斯滤波,去掉噪点 3、sobel 算子过程的实现,计算x y方向 、梯度(用不到,但是…

如何选购适合自己的内衣洗衣机?性价比高内衣洗衣机推荐

内衣洗衣机,在几年前或许是个新事物,但近两年却是成为了很普遍的家电产品,由于近几年内衣洗衣机需求量的增加,我们在商场的电子产品区都能见到它,就像普通的家庭洗衣机那样,直接摆在展台上销售,…

分布式:一文掌握分布式ID生成方案

目录 背景1、UUID2、数据库自增ID2.1、主键表2.2、ID自增步长设置 3、号段模式4、Redis INCR5、雪花算法6、美团(Leaf)7、百度(Uidgenerator)8、滴滴(TinyID)总结比较 背景 在复杂的分布式系统中,往往需要对大量的数据进行唯一标识,比如在对一个订单表进…

从零开始的目标检测和关键点检测(一):用labelme标注数据集

从零开始的目标检测和关键点检测(一):用labelme标注数据集 1、可视化标注结果2、划分数据集3、Lableme2COCO,将json文件转换为MS COCO格式 前言:前段时间用到了mmlab的mmdetction和mmpose,因此以一个小的数…

python练习(猜数字,99乘法表)

python练习(猜数字&#xff0c;99乘法表) 猜数字 import random num1random.choice(range(1,101))for i in range(11):num2input("plz input a number:")num2int(num2)if num1<num2:print("太大了&#xff0c;小一点")elif num1>num2:print("…

【每日一题】2003. 每棵子树内缺失的最小基因值-2023.10.31

题目&#xff1a; 2003. 每棵子树内缺失的最小基因值 有一棵根节点为 0 的 家族树 &#xff0c;总共包含 n 个节点&#xff0c;节点编号为 0 到 n - 1 。给你一个下标从 0 开始的整数数组 parents &#xff0c;其中 parents[i] 是节点 i 的父节点。由于节点 0 是 根 &#xf…

可视化 | 数据可视化降维算法梳理

文章目录 &#x1f4da;数据描述&#x1f407;iris&#x1f407;MNIST &#x1f4da;PCA&#x1f407;算法流程&#x1f407;图像描述 &#x1f4da;Kernel-PCA&#x1f407;算法流程&#x1f407;图像描述 &#x1f4da;MDS&#x1f407;算法流程&#x1f407;图像描述 &#…

从初级测试工程师到测试专家,你的晋升路线是什么?

最近&#xff0c;我们讨论了软件测试工程的的分级&#xff0c;大家都贡献了自己的想法。 对于大家来说&#xff0c;软件测试人的分级其实也代表了我们的进阶方向&#xff0c;职业发展。总体来说&#xff0c;测试工程师未来发展有三个方向&#xff1a; 技术精英 行业专家 管理…

【Proteus仿真】【Arduino单片机】SG90舵机控制

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用SG90舵机等。 主要功能&#xff1a; 系统运行后&#xff0c;舵机开始运行。 二、软件设计 /* 作者&#xff1a;嗨小易&#xff08;QQ&#x…

pytorch复现3_GoogLenet

背景&#xff1a; GoogLeNeta是2014年提出的一种全新的深度学习结构&#xff0c;在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果&#xff0c;但层数的增加会带来很多负作用&#xff0c;比如overfit、梯度消失、梯度爆炸等。GoogLeNet通过引入i…

代码精简10倍,责任链模式yyds

1 推荐看的文章1 责任链设计——责任链验证推翻 if-else 炼狱 2 推荐看的文章2 代码精简10倍&#xff0c;责任链模式yyds

引入了mybatis-spring-boot-starter,还需要引入mysql-connector-java吗?

spring boot集成mybatis&#xff0c;是需要引入mybatis-spring-boot-starter&#xff0c;有文章说不需要引入mysql-connector-java&#xff0c;但实际用下来并不行&#xff0c;我看了里面的pom文件&#xff0c;终于知道怎么一回事。 <!--引入mybatis的依赖--><depende…

HTTP协议说明

1.用于HTTP协议交互的信息被称为HTTP报文。请求端&#xff08;客户端&#xff09;的HTTP报文叫做请求报文&#xff0c;响应端&#xff08;服务器端&#xff09;的叫做响应报文。HTTP 报文本身是由多行&#xff08;用 CRLF 作换行符&#xff09;数据构成的字符串文本。 HTTP报文…

[Linux C] signal 的使用

前言&#xff1a; signal 是一种通信机制&#xff0c;可以跨进程发送&#xff0c;可以同进程跨线程发送&#xff0c;可以不同进程向指定线程发送。 信号的创建有两套api&#xff0c;一个是signal&#xff0c;一个是sigaction&#xff0c;signal缺陷很多&#xff0c;比如没有提…

亚马逊美国站衣物收纳商品合规标准是什么?如何办理?

随着秋季的来临&#xff0c;不少人翻箱倒柜地寻找换季用品。相信现在很多人都和小编一样&#xff0c;出门时打算找个外套穿上&#xff0c;但想到要去柜子里翻半天&#xff0c;就立刻打消了想要出门的念头。 但当翻箱倒柜地找到了换季用品&#xff0c;却又要一件一件地把翻出来…