软件安全、逆向分析、加密与解密--crackme2详解

news2024/11/16 3:45:42

本次使用到的软件有:PEiD、IDA、X32dbg

刚学逆向不久,可能有些地方会有错误,欢迎各位大佬指导

执行

运行程序

点击About

点击确定,输入如图数据

点击try Now

点击确定,回到主界面

点击Exit,退出

查壳,使用PEiD打开

可以看到,这个程序使用MASM32/TASM32编程得到,没有加壳。使用PEiD中的插件Krypto ANALyzer,可以看到程序使用的MD5加密算法,并显示地址000004C3::004010C3

在IDA中打开程序,点击G键

在窗口中输入004010C3,点击确定,跳转到MD5算法的函数代码中

向上得到该地址位于函数sub_401000中,猜想由函数sub_401000执行MD5算法

点击sub_401000后点击X键

点击确定,在伪代码中看到sub_401000被调用的地方

点击tab键转到流程图

点击空格键

得到函数sub_401000被调用的地址

.text:00401B13                 call    sub_401000

在流程图中看到调用函数GetDlgItemTextA 后进行跳转,猜想GetDlgItemTextA为关键函数

空格键转到代码中,得到调用函数GetDlgItemTextA的地址

.text:00401AA3                 call    GetDlgItemTextA

空格键回到流程图,可以看到还有另外一个类似的函数lstrcmpA,在调用后进行判断并跳转

空格键转到代码中,可以看到函数lstrcmpA被调用的地址

.text:00401B27                 call    lstrcmpA

打开x32dbg进行动态调试,在刚才找到的三个关键地址处使用F2断点

开始执行程序,在地址004019E4处停下

F9继续运行,弹出程序窗口,输入如下数据

点击try now,程序继续运行,在断点00401AA3处停下

点击F8

右键在内存窗口中转到cm-2.403380,在内存窗口的内存1中显示为,是输入的数据name

F9,在第二个断点00401B13处停下,此处调用函数sub_401000

使用F7单步跟进

看到右侧隐藏FPU处如图所示,右键点击EDI,在内存窗口中转到窗口1,是输入的数据,存放在地址为00403380的内存中

右键点击ESI,在内存窗口中转到窗口2,地址为004056A8

右键点击EIP,在内存窗口中转到窗口3,地址为0019F89C

F9进入地址为00401B27断点处

此时内存窗口2为

在右侧窗口中看到有

右键点击2.esp+4转到内存窗口,地址为004079D0,可在内存窗口看到,猜测为Serial

点击F8

跳转到

可猜想地址 00401B2E处 指令jne cm-2.401B45是关键指令,判断是否登录成功的关键指令。

双击该指令,将jne改为je,点击确定

F9继续运行

Ctrl F2重新运行,输入和刚才一样的数据,F9运行

Good Serial成功

将输入的数据aaabbbccc通过加密器进行MD5加密得到

d1aaf4767a3c10a473407a4e47b02da6

而在刚才的内存窗口2显示为

是aaabbbccc经MD5加密后的数据,存在地址为004056A8的内存中

在内存窗口4中

猜测为aaabbbccc的Serial---AB96E4D27581103D06C16A7347B02DA6

测试,将X32dbg关闭,不保存更改,重新打开CM-2.exe,输入以下数据

点击try now

成功

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

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

相关文章

Docker:SpringBoot项目创建Docker镜像并推送到阿里云容器镜像仓库

0. 准备工作 os:macos 15.0 jdk:1.8 docker:26.0.0 1. 阿里云容器镜像服务创建实例 创建个人版 个人实例创建成功 个人镜像加速器地址 2. 安装Docker Desktop Docker Desktop是Docker的一个集成工具,非必须,过程…

指纹与指甲检测系统源码分享

指纹与指甲检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

这个时代唯一“不变“的又是{变}

这个时代唯一不变的就是“变”,所以每个人都得有规划意识,首先要对自己的价值有清晰的认知,你核心卖点是什么。第二,你取得的成绩是通过平台成就的还是通过自身努力取得的,很多人在一家平台待久了之后,身上…

在Unity UI中实现UILineRenderer组件绘制线条

背景介绍 在Unity的UI系统中,绘制线条并不像在3D世界中那样直观(使用Unity自带的LineRender组件在UI中连线并不方便,它在三维中更合适)。没有内置的工具来处理这种需求。如果你希望在UI元素之间绘制连接线(例如在UI上连接不同的图标或控件)&a…

26. 构建一个矩形平面几何体

定义矩形几何体顶点坐标 一个矩形平面,可以至少通过两个三角形拼接而成。而且两个三角形有两个顶点的坐标是重合的。 注意三角形的正反面问题:保证矩形平面两个三角形的正面是一样的,也就是从一个方向观察,两个三角形都是逆时针…

Docker 消息队列RabbitMQ 安装延迟消息插件

介绍 RabbitMQ的官方推出了一个插件,原生支持延迟消息功能。该插件的原理是设计了一种支持延迟消息功能的交换机。当消息投递到交换机后可以暂存一定时间,到期后再投递到队列。 查看版本号 docker exec rabbit名字 rabbitmqctl version根据版本下载 插…

neo4j(spring) 使用示例

文章目录 前言一、neo4j是什么二、开始编码1. yml 配置2. crud 测试3. node relation 与java中对象的关系4. 编码测试 总结 前言 图数据库先驱者 neo4j:neo4j官网地址 可以选择桌面版安装等多种方式,我这里采用的是docker安装 直接执行docker安装命令: docker run…

一键更换软件源的工具——chsrc

前言 经常用pip,ubuntu的apt,或者centos的yum等包下载工具的人不可避免的一件事就是——“更换软件源”,因为以上三个包下载工具的软件源一般都是默认为国外的官方网站,由于国情问题,下载速度就会非常慢,所…

华为OD机试 - 最大矩阵和 - 卡德恩算法(动态规划)(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

线性代数(宋浩版)(4)

2.4逆矩阵 (不要把矩阵放在分母上) 方阵的行列式 性质1 性质2 性质3 伴随矩阵(只有方阵才有) 1.求出所有元素的代数余子式(矩阵先求行列式)。 2.按行求的代数余子式按列放。 定理1(重要&…

MySQL篇(窗口函数/公用表达式(CTE))

目录 讲解一:窗口函数 一、简介 二、常见操作 1. sumgroup by常规的聚合函数操作 2. sum窗口函数的聚合操作 三、基本语法 1. Function(arg1,..., argn) 1.1. 聚合函数 sum函数:求和 min函数 :最小值 1.2. 排序函数 1.3. 跨行函数…

ECMAScript与JavaScript的区别

目录 一、什么是ECMAScript? 二、什么是JavaScript? 三、ECMAScript与JavaScript的关系 3.1 ECMAScript规范版本 3.2 JavaScript的实现 四、ECMAScript与JavaScript的主要区别 4.1 规范与实现的区别 4.2 版本更新 4.3 环境支持 4.4 语言特性 五…

C# 使用Socket通信,新建WinForm服务端、客户端程序

一、新建WinForm Socket服务端程序 注:rtbReceviceMsg为RichTextBox控件 服务端程序、界面 服务端代码 public partial class Form1 : Form {public Form1(){InitializeComponent();}public virtual void TriggerOnUpdateUI(string message){if (this.InvokeRequir…

【SpringCloud】服务注册与发现 - Eureka

目录 服务注册/服务发现-Eureka背景问题描述解决思路什么是注册中心CAP 理论常见的注册中心 Eureka 介绍搭建Eureka Server创建Eureka-server 子模块引入eureka-server依赖项目构建插件完善启动类编写配置文件启动服务 服务注册引入eureka-client依赖完善配置文件启动服务 服务…

如图,从左到右在每个小格子中填入一个整数,使得其中任意三个相邻格子中所填整数之和都相等,若前m个格子中所填整数之和是2024,则m的值为?

1、如果图: 任务三个相邻的格子中所填整数之和都相等,则可以列个几个式子: 9ab abcbc(-5)c(-5)1 则可以求出: a-5,b1,c9 2、前m个格子中所填数之和是2024,则表示9abc(-5)1...第m个格子2024 …

LaTex2024 下载安装运行HelloWorld—全流程笔记

LaTex安装教程🚀 这是读博之后写的第一篇文章,来到新课题组之后,新课题组主要是用Latex,在之前的课题组,还是比较常用world,所以就研究了一下Latex的下载和安装,虽然网上已经有了不少教程&#…

编程基础:函数栈帧的创建和销毁

函数栈帧的创建和销毁 一、什么是函数栈帧二、常见的寄存器三、函数指令三、函数栈帧的创建和销毁(一)普通值传递1、开始执行函数2、main函数的函数栈帧的开辟(1)main 栈帧空间的开辟和默认初始化(2)main 局…

S-Procedure的基本形式及使用

理论 Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- \textbf{Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- } Lemma 1. ( S- Procedure[ 34] ) : Define the quadratic func- tions w.r.t. x ∈ C M 1 \mathbf{x}\in\mathbb{C}^M\times1 x…

Leetcode—815. 公交路线【困难】(unordered_map+queue)

2024每日刷题&#xff08;163&#xff09; Leetcode—815. 公交路线 bfs实现代码 class Solution { public:int numBusesToDestination(vector<vector<int>>& routes, int source, int target) {if(source target) {return 0;}unordered_map<int, vector…

如何用安卓玩Java版Minecraft,安卓手机安装我的世界Java版游戏的教程

安卓手机使用FCL启动器安装我的世界Java版游戏的教程。如何用安卓玩Java版Minecraft 视频教程&#xff1a;https://www.bilibili.com/video/BV1CctYebEzR/ 前言 目前&#xff0c;安卓设备上可以用来运行Java版Minecraft的启动器主要有以下几款&#xff1a; PojavLauncher&a…