[CrackMe]damn.exe的逆向及注册机编写

news2024/9/30 19:29:43

1. 脱壳过程

这个crackme有2个文件
在这里插入图片描述
发现加了壳
在这里插入图片描述
先来脱壳, 使用ESP守恒, pushad后立马下硬件访问断点
在这里插入图片描述
F9直接运行, 立马到popad处
在这里插入图片描述
接着走几步就到了OEP
在这里插入图片描述
下面使用LordPE来转储映像, 为了防止别人修改PE中的ImageSize, 先尝试修正下ImageSize, 然后dump full即可
在这里插入图片描述
在这里插入图片描述
接着用x64dbg调试器重新打开dump后的文件, 准备修复入口点和IAT表, 在这之前往内存里瞄了一眼, 发现主模块的PE头部被设置了只读属性, 首先先将其改成可读写
在这里插入图片描述
在这里插入图片描述
这样就舒服多了
在这里插入图片描述
使用ImportREC打开当前被调试的进程, 并且修改OEP为之前脱壳后第一句代码的RVA地址,注意, 这个地址要减去ImageBase才是RVA地址, 接着选择IAT自动搜索, 如果没什么问题会弹出如下弹框
在这里插入图片描述
然后选择获取导入表, 即可发现该exe所导入的模块, 并且其后面都是有效
在这里插入图片描述
最后选择修正转储选择要修正的转储文件即可
在这里插入图片描述

2. 逆向分析过程

这个程序比较简单, 作者的目的估计主要是为了让我们练习脱壳。脱完壳后, 再次调试就发现图片变成了CRACKED
在这里插入图片描述
但是不进行调试的状态, 就会显示是LOCKED状态
在这里插入图片描述
这里先解决这个问题, 让它永远变成cracked状态, 可以确定的是, 他做这些事肯定是在WM_INITDIALOG中的,因为在程序运行的过程中是没有任何变化, 定位WndProc然后找到WM_INITDIALOG后重新跑
在这里插入图片描述
可以看到了关键API LoadBitmapA
在这里插入图片描述
使用Resource hacker查看一下程序有什么bitmap资源, Ooops, 找到了这张图片的资源ID是101, 十六进制是0x65
在这里插入图片描述
这里圈出来的call决定了最终你将选择哪张图片
在这里插入图片描述
里面是把0x401000和0x402000处的代码计算哈希然后运算决定的, 很明显脱壳会对这个造成影响
在这里插入图片描述
这里直接选择进行爆破, 直接把0x65传入LoadBitmapA中
在这里插入图片描述
好了, 这样永远就是cracked的状态了。
在这里插入图片描述
下面继续进行破解, 运行以下后发现Register按钮是被禁用的, 尝试搜索以下EnableWindow这个API, 定位到该位置后发现上方还有2个GetDlgItemText, 很明显是为了获取name和输入的key的。在EnableWindow上面还有一个call应该就是key的生成算法
在这里插入图片描述
随便进行了一次测试, 由于这里要求密码必须是8位, 所以首先我把密码设置成8位, 这样方便调试Key运算的部分
在这里插入图片描述
这个函数最终会返回eax, 也就是说如果eax为1, 那么EnableWindow就会激活Register按钮, 那也就能顺利注册, 否则就不行
在这里插入图片描述
再看以下Key运算部分, 这里是一个jne循环, 如果ecx不为4就会循环满足某个条件会让ecx增加1, 只有ecx为4才是正确的serial
在这里插入图片描述
这里经过红色框部分的运算后, 满足2个橘色框的条件则ecx有机会增加1,经过4次判断都满足条件key即为正确
在这里插入图片描述

3. 编写注册机

这个注册机编写很容易, 为了躲避使用ror之类的带进位指令, 我直接使用了内联汇编来编写
在这里插入图片描述
下面放出核心代码:

BOOL GetSerialKey(LPCSTR pszName, LPSTR pszKeyBuf, DWORD nKeyBufSize)
{
	int iNameLen = 0;
	DWORD dwFix = 0x44414D4E;
	DWORD dwTmp = 0;
	CHAR cch = 0;
	int iKeyLen = 0;
	int iPtr1 = 1;
	int iPtr0 = 0;

	if (!pszName || !pszKeyBuf || nKeyBufSize < 9)
	{
		return(FALSE);
	}

	iNameLen = strlen(pszName);
	if (!iNameLen)
	{
		return(FALSE);
	}

	for (size_t nIdx = 0; nIdx < iNameLen; ++nIdx)
	{
		cch = pszName[nIdx];
		dwTmp += cch;
		__asm
		{
			push eax
			push ecx
			xor ecx, ecx
			mov cl, byte ptr [nIdx]
			ror dword ptr[dwFix], 1
			ror dword ptr[dwFix], cl
			pop ecx
			pop eax 
		}
		dwFix ^= dwTmp;
	}
	dwFix |= 0x10101010;
	
	for (size_t nIdx = 0; nIdx < 4; ++nIdx)
	{
		__asm
		{
			push eax 
			xor eax, eax
			rol dword ptr[dwFix], 8
			mov al, byte ptr[dwFix]
			mov cch, al

			mov byte ptr[dwTmp], al
			and cch, 0xF
			shr byte ptr[dwTmp], 4
			and byte ptr[dwTmp], 0xF
			cmp cch, 0xA
			sbb cch, 0x69
			mov al, cch
			das
			mov cch, al
		}
		pszKeyBuf[nIdx * 2 + 1] = cch;
		__asm
		{
			mov al, byte ptr[dwTmp]
			mov cch, al
			cmp cch, 0xA
			sbb cch, 0x69
			mov al, cch
			das 
			mov cch, al
			pop eax 
		}
		pszKeyBuf[nIdx * 2] = cch;
	}

	return(TRUE);
}

(完)

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

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

相关文章

《重构的时机和方法》——让你的代码更健壮、更易维护

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

简述IO(BIO NIO IO多路复用)

在unix网络变成中的五种IO模型: Blocking IO(阻塞IO) NoneBlocking IO (非阻塞IO) IO mulitplexing(IO多路复用) signal driven IO (信号驱动IO) asynchronous IO (异步IO) BIO BIO&#xff08;Blocking IO&#xff09;是一种阻塞IO模型&#xff0c;也是传统的IO操作模型之一…

不管如何吐槽,购买iPhone的用户依然义无反顾,苹果继续增长

市调机构IDC公布的二季度数据显示&#xff0c;苹果成为前五名之中除华为之外第二家取得增长的手机品牌&#xff0c;而其他国产手机品牌的出货量都在下滑&#xff0c;显示出国内的消费者仍然在热烈追捧iPhone。 二季度苹果在国内市场的手机出货量同比增长6%&#xff0c;虽然增速…

查看详细的退货信息!亚马逊在卖家中心推出新页面!

亚马逊欧洲站发布公告称亚马逊在卖家中心推出了一个新页面&#xff0c;为卖家提供详细的退货信息&#xff0c;以下是公告内容&#xff1a; 我们在卖家中心推出了一个新页面&#xff0c;为卖家提供详细的退货信息。 现在卖家可以查看每个退货订单&#xff0c;其中包含有关 ASI…

sky-notes-01

1、DTO类 DTO&#xff08;Data Transfer Object&#xff09;&#xff1a;数据传输对象&#xff0c;Service 或 Manager 向外传输的对象。 详见阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义 当前端提交的数据和实体类中对应的属性差别比较大时&#xff0c;建议使用…

【信号去噪和正交采样】流水线过程的一部分,用于对L波段次级雷达中接收的信号进行降噪(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

信号的学习笔记二

文章目录 信号捕捉signal信号捕捉sigaction信号集未决信号集和阻塞信号集的工作过程 ![在这里插入图片描述](https://img-blog.csdnimg.cn/b896346af6f1462089779e513a7e237b.png)信号集相关函数sigemptysetsigfillsetsigaddsetsigdelsetsigismember应用 以下函数设置内核信号集…

上传图片到腾讯云对象存储桶cos 【腾讯云对象存储桶】【cos】【el-upload】【vue3】【上传头像】【删除】

1、首先登录腾讯云官网控制台 进入对象存储页面 2、找到跨越访问CIRS设置 配置规则 点击添加规则 填写信息 3、书写代码 这里用VUE3书写 第一种用按钮出发事件形式 <template><div><input type="file" @change="handleFileChange" /&…

[NLP]LLM高效微调(PEFT)--LoRA

LoRA 背景 神经网络包含很多全连接层&#xff0c;其借助于矩阵乘法得以实现&#xff0c;然而&#xff0c;很多全连接层的权重矩阵都是满秩的。当针对特定任务进行微调后&#xff0c;模型中权重矩阵其实具有很低的本征秩&#xff08;intrinsic rank&#xff09;&#xff0c;因…

labelme标签格式json转化成yolov8支持是数据集格式

我们用yolov8做实例分割时&#xff0c;需要制作标签&#xff0c;如果用labelme做&#xff0c;不能直接用模型训练&#xff0c;需要利用一个脚本文件进行转换。 import base64 import random import shutil from tqdm import tqdm import math import json import os import nu…

5.2.12.读写接口实践 copy_from_user copy_to_user

5.2.12.读写接口实践 5.2.12.1、完成write和read函数 (1)copy_from_user函数的返回值定义&#xff0c;和常规有点不同。返回值如果成功复制则返回0&#xff0c;如果 不成功复制则返回尚未成功复制剩下的字节数。 copy_from_user 函数&#xff1a;static inline unsigned long _…

【业务功能篇59】Springboot + Spring Security 权限管理 【下篇】

UserDetails接口定义了以下方法&#xff1a; getAuthorities(): 返回用户被授予的权限集合。这个方法返回的是一个集合类型&#xff0c;其中每个元素都是一个GrantedAuthority对象&#xff0c;表示用户被授予的权限。getPassword(): 返回用户的密码。这个方法返回的是一个字符…

第十二章:priority_queue类

系列文章目录 文章目录 系列文章目录前言priority_queue的介绍priority_queue的使用容器适配器什么是容器适配器STL标准库中stack和queue的底层结构 总结 前言 priority_queue是容器适配器&#xff0c;底层封装了STL容器。 priority_queue的介绍 priority_queue文档介绍 优先…

路由器工作原理

路由器原理 路由概述 路由&#xff1a;跨越从源主机到目标主机的一个互联网络来转发数据包的过程。&#xff08;为数据包选择路径的过程&#xff09; 作用&#xff1a;路由器是连接不同网段的。 转发依据&#xff1a; 路由表&#xff1a;路径选择全看路由表&#xff0c;根…

大数据课程D5——hadoop的Sink

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 掌握Sink的HDFS Sink&#xff1b; ⚪ 掌握Sink的Logger Sink&#xff1b; ⚪ 掌握Sink的File Roll Sink&#xff1b; ⚪ 掌握Sink的Null Sink&#xff1b; ⚪ 掌握Si…

【前端知识】React 基础巩固(三十六)——RTK中的异步操作

React 基础巩固(三十六)——RTK中的异步操作 一、RTK中使用异步操作 引入RTK中的createAsyncThunk&#xff0c;在extraReducers中监听执行状态 import { createSlice, createAsyncThunk } from "reduxjs/toolkit"; import axios from "axios";export cons…

<MySQL> Centos 7环境安装MySQL

Centos 7环境安装MySQL 1.卸载不要的环境 停止MySQL服务 systemctl stop mariadb.service systemctl stop mysqld禁止MySQL服务开机自启 systemctl disable mysqld卸载MySQL软件包 yum remove mysql-server mysql-client删除MySQL数据目录 rm -rf /var/lib/mysql清理MySQ…

福特汽车在全球电动汽车市场的主导地位正在不断扩大

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 2023年7月27日&#xff0c;美国最大的汽车巨头之一福特汽车(F)公布了其2023年第二季度财报。 2023年7月6日&#xff0c;福特汽车宣布&#xff0c;第二季度美国市场的汽车销量已经较2023年第一季度增长了11.7%&#xff0c;令…

机器人状态估计:robot_localization 功能包高级参数详解

机器人状态估计&#xff1a;robot_localization 功能包高级参数详解 前言功能包简介相关参数高级参数 前言 移动机器人的状态估计需要用到很多传感器&#xff0c;因为对单一的传感器来讲&#xff0c;都存在各自的优缺点&#xff0c;所以需要一种多传感器融合技术&#xff0c;将…

微信朋友圈跟圈怎么设置?

朋友圈跟发功能对需要进行朋友圈营销或微信营销的公司和个体创业者的帮助极大。通常情况下&#xff0c;这些创业者或企业会管理多个微信账号来协同运营和管理客户资源&#xff0c;也就是俗称的“大号”和“小号”。如果没有朋友圈跟发软件&#xff0c;客户需要依次使用大号来发…