160个CrackMe之001

news2024/10/5 18:33:20

吾爱中的逆向练习题

运行程序

 

 有两个方式 一个是账号登入

 一个是序列号输入

账号输入

方法一 爆破

我们先进行账号输入

这个是最简单的逆向 所以我们可以使用 字符串查找看看

先试用ollydbg打开

右键 ->查找 ->所有参考文本字符串

 这里我们能发现有两个报错

我们还不知道是哪一个 我们随便进入一个看看 我们先进入第一个

 打上断点 重新执行程序

触发断点 我们开始单步调试看看

 

 这里直接越过了第一个报错 说明这个不是第一个报错的位置

 发现成功语句 并且带有跳转

 我们可以通过 OllyDbg看到 这个跳转是跳转到 下面错误的位置 所以这个就是核心跳转了

我们修改为nop

 保存为新的文件

 这里就成功了

方法二 算法

在第一次的调试后我发现一些问题

 这个报错是在 字符串输入很短的时候进行报错

所以我们可以直接修改为 jmp 

jmp     short 0042FA79

  这个时候就是无条件跳转 不会发生报错

我们可以继续分析程序

在最后输出 错误和正确的时候 出现了这个

感觉和序列号一样 我们看看是不是这个

查看eax的字符串

复制下来

直接打开程序

 

 发现就是序列号

所以我们开始分析

我们开始逆向看看 先看看三个call 函数

经过测试 发现不是里面的内容 里面是一大堆跳转

所以我们思考是不是之前就已经在程序中计算出来序列号了

我们再重新执行程序 然后输入一个特定的值 我输入 2233

 发现在这里存入了 2233

这里存入了 29h

注意这里的代码

 imul 得出的结果存入 eax

所以下面

 eax的内容变为了 0802

在内存中是 0208存入的

 

 这个代码又把两个 02 08 00 00相加 变为了 0410 00 00

 然后我们去看看我们后面的序列号

 发现就是 4100

所以这里就是计算序列号

1 先取 2233 的 第一个字节 2
然后和 0x29相乘


为 02 08 

然后一倍  04 10 

我们就可以编写程序

cName = input("Input Name:\n")
iName = ord(cName[0])  # 获取字符串的第一个字符并将其转换为整数

if iName > 0x21:
    iName *= 0x29  # 乘法
    iName *= 2  # 自增一倍
    print("Serial: CW-{0:04d}-CRACKED".format(iName))
else:
    print("input error!")

取得序列号

通过serial来注册

算法

这个有了之前的方法很简单

我们先看看 程序给的字符串是什么

 

 我们去找try again这个字符串

 

 有3 个 我们都设断点 看看停在哪里

开始执行 触发断点

 触发了 我们开始看看这个程序的代码

 出现了ascii 我们开始设置最上面为eip 然后单步执行程序

 发现这个是在比对

因为我没有输入 所以会显示 让我输入值

我们可以看看是不是这个 我们重新打开程序

 

 发现成功了

所以这个就是 serial 固定不变

爆破

我们看懂代码后

 这个跳转就和之前一样 我们改为 nop 就实现了爆破

保存后 我们看看功能怎么样

 

 注册是OK的

 

 serial也是ok的

我们看看用合法的方式

 

 

 看看serial

 

这个时候 程序就成功了

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

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

相关文章

《C++ deque的介绍以及stackh和queue的模拟实现》

文章目录 一、容器适配器1.1 什么是适配器1.2 STL中stack和queue的底层结构1.3 deque的简单介绍1.3.1 deque的原理介绍1.3.2 deque的结构1.3.3 deque和vector以及list的对比1.3.4 为什么选择deque作为stack和queue的适配容器 二、stack的模拟实现三、queue的模拟实现 一、容器适…

5个超实用视频素材网站,免费下载~

推荐几个高清无水印的视频素材网站,重点是可以免费下载使用,建议收藏! 菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 可以称之为最大素材库,在这里你可以找到设计、办公、图片、视频、音频等各种素材。视频素材就有…

基于Nginx搭建LNMP

目录 一:安装 Nginx 服务 1、关闭防火墙、安装依赖包 2、创建运行用户 3、压缩包编译安装 4、优化路径 5、添加 Nginx 系统服务 二: 安装 MySQL 服务 1、安装Mysql环境依赖包 2、创建运行用户 3、编译安装 4、修改mysql 配置文件 5、更改mysql安装…

网络通信:http协议

虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议) 就是其中之一. 认识URL 统一资源定位符(Uniform Resource Locator,缩写:URL),…

springboot + vue3实现视频播放Demo(video.js Vue3-video-play视频播放器)

文章目录 学习链接前言ffmpeg安装ffmpeg配置环境变量分割视频文件 后台配置WebConfig 前端代码video.js示例安装依赖视频播放组件效果 Vue3-video-play示例安装依赖main.js中使用视频播放组件效果 学习链接 ffmpeg官网 长时长视频java存储及vue播放解决方法 【 攻城略地 】vue…

AKStream部署1:ZLMediaKit流媒体服务器(win)

环境准备: windows10/11 visual stadio 2022(.net 6) cmake 3.22.0 git bash 没讲究直接下最新的 ffmpeg : ffmpeg-5.1.2-full_build VLC播放器:VLC media player ZLMediaKit:gitee地址 1、安装上述软件 例ffmpeg下载解压至某自定…

图片转pdf怎么转?一分钟解决

在日常生活中,我们常常需要将一些图片转换成PDF格式,以便于在电子设备上查看和分享。今天,我们将分享一些关于如何将图片转换成PDF的方法。 以下是三种常用的将图片转换成PDF的方法: 我们可以借助转换工具将图片转成PDF 如PDF转…

用esp8266连网的一些互联网知识

参考太极创客的课程资料添加链接描述 TCP/IP协议簇 在网络系统中,为了保证通信设备之间能正确地进行通信,必须使用一种双方都能够理解的语言,这种语言被称为“协议”。 TCP/IP协议簇是Internet的基础,也是当今最流行的组网形式…

数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)

目录 题目描述 输入示例 输出示例 数据结构的选择 核心算法 计算左子树的规模 思路 总结 题目描述 现给定一系列不同的非负整数键,如果要求构造出一颗完全二叉树,则可以构造唯一的二叉搜索树。输出此二叉搜索树的层序遍历序列。 完全二叉树 有n…

复习之linux系统中的权限管理

1.权限的查看及读取 (1)权限的查看 # ls -l file : 查看文件的权限 # ls -ld dir :查看目录权限 (2)权限的读取 文件的属性叫做文件的元数据。 元数据(Metadata),又称中介数据、中继…

chatgpt赋能python:Python为什么运行不出来?

Python为什么运行不出来? Python是一门高级编程语言,被广泛应用于科学计算、机器学习、Web开发等领域。但是,有时候我们在编写Python程序的过程中会遇到各种各样的问题,其中之一就是程序无法运行。那么,Python为什么会…

网页投票系统怎么做如何制作网页投票链接如何投票链接

用户在使用微信投票的时候,需要功能齐全,又快捷方便的投票小程序。 而“活动星投票”这款软件使用非常的方便,用户可以随时使用手机微信小程序获得线上投票服务,很多用户都很喜欢“活动星投票”这款软件。 “活动星投票”小程序在…

mysql版本升级导致的时区问题

背景 公司各个项目组用的mysql 版本不一样,有的是5.x稳定守旧版,有的最近喜欢用8.x高级迎新版,结果出了问题。 现象,数据库中保存的时间与java读取的时间字段不一样。 最开始数据库mysql版本为5.7.28,驱动为5.1 反正…

【C++】queue和priority_queue的用法及模拟实现

目录 一、queue的简介及其使用1、queue的简介2、queue的使用2、queue的模拟实现 二、priority_queue的简介及其使用1、priority_queue的简介2、priority_queue的使用3、priority_queue的模拟实现 一、queue的简介及其使用 1、queue的简介 queue是一种容器适配器,专…

SpringBoot 学习笔记之 “异常处理”

🍏🍐🍊🍑🍒🍓🫐🥑🍋🍉🥝 异常处理 文章目录 🍏 错误处理1、默认规则2、定制错误处理逻辑3、异常处理自动配置原理4、异常处…

用Python发送通知到企业微信,实现消息推送

Hi,大家好,今天就介绍如何实现自动推送消息到企业微信,适合告警类型通知,非常方便。 在华为工作了10年的大佬出的Web自动化测试教程,华为现用技术教程!_哔哩哔哩_bilibili在华为工作了10年的大佬出的Web自…

C++服务器框架开发6——日志系统LogFormatter/size_t学习

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见:[C高级教程]从零开始开发服务器框架(sylar) 上一篇:C服务器框架开发5——日志系统LogAppender/IO类“3种stream”/双感叹号 C服务器框架开发6——日志系统logFormatter/size_t学…

【Python】深度理解Class类、Object类、Type元类;

详解Class类、Object类、Type元类 1.Class类、Object类、Type元类的表面关系2.Class、Object、Type解释1.1关系详解 2.Object类的默认方法作用详解2.2.1 init2.2.2 new2.2.3 repr2.2.4 提要:作为普通的Python开发者来讲,深入理解object、type不是必要的&…

ESP32设备驱动-MSA301加速计传感器驱动

MSA301加速计传感器驱动 文章目录 MSA301加速计传感器驱动1、MSA301介绍2、硬件准备3、软件准备4、驱动实现1、MSA301介绍 MSA301 是一款具有 I2C 数字输出的三轴低 g 加速度计,适用于消费类应用。 它具有 2g/4g/8g/16g 的动态用户可选满量程范围,并允许在 1Hz 至 500Hz 的…

Lombok 的正确使用姿势

文章目录 1.Lombok 是什么2.安装 Lombok3.Spring Boot 集成 Lombok4.使用 Lombok4.1 注解一览表4.2 部分使用介绍Getter(lazytrue)ValueBuilderSuperBuilderSneakyThrowsSlf4jCleanupNonNullWithSynchronizedval 在 Java 开发领域中,Lombok 插件已经成为一个非常流行…