crackmenet1 网络验证破解之入门级

本文介绍了一款入门级CrackMe的破解过程,通过分析客户端算法并编写伪服务器程序来实现任意名称的成功注册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言: 今天无聊的很,看到看雪很早以前的一篇文章,手痒,加上很久没写什么技术文章了,入门级又简单写,为了给自己多加篇日志隧写此文,大牛就不必浪费时间看

感谢:   crackmenet1作者 riijj 、 看雪论坛平台

原贴地址: http://bbs.pediy.com/showthread.php?t=32100

难度:  入门级

作者批注: 这是一个网络验证的 crackme,两个档案分别是 crackme 和 server,操作方法是,先运行 server,然后运行 crackme。这个 crackme 是十分容易的入门级,新手 可以尝试爆破,或找出正确序号。
要求: 这个 crackme 理论上没有 keygen ,但是兄弟们可以试试,不调试 server 程序(假设自己触摸不到 server 程序真身)只从crackme的结构分析,写出一个可 以替代 真正server的“伪server程序”如果能够使用自己的“伪server程序”成功完成注册的话(任何注册名字都成功),那便算是这个crackme的完美破解

解:

直接将 crackmenet1.exe 托入IDA Pro 看关键算法


流程:

1、 取注册名,计算其各个字节的和总值(范围不超过char) ,最后得到异或运算的 keyValue

2、将服务器返回的值前6字节与 keyValue 进行异或运算,得到比较值 cmpRes

3、用 cmpRes 与 "CHKPS"  进行字符串对比,相等则成功

破解思路:

1、以客户端同算法算出注册名的异或关键值

2、发送异或后的"CHKPS"

实现代码:

#include "stdafx.h"
#include <WinSock2.h>
#include <windows.h>

#pragma comment(lib, "Ws2_32.lib")

int _tmain(int argc, _TCHAR* argv[])
{
	// MSDN copy listen Example Code
	WSADATA wsaData;
	int iResult = 0;
	SOCKET ListenSocket = INVALID_SOCKET;
	sockaddr_in service;
	iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
	if (iResult != NO_ERROR) {
		wprintf(L"Error at WSAStartup()\n");
		return 1;
	}
	ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (ListenSocket == INVALID_SOCKET) {
		wprintf(L"socket function failed with error: %u\n", WSAGetLastError());
		WSACleanup();
		return 1;
	}
	service.sin_family = AF_INET;
	service.sin_addr.s_addr = inet_addr("127.0.0.1");
	service.sin_port = htons(8877);
	iResult = bind(ListenSocket, (SOCKADDR *)&service, sizeof (service));
	if (iResult == SOCKET_ERROR) {
		wprintf(L"bind failed with error %u\n", WSAGetLastError());
		closesocket(ListenSocket);
		WSACleanup();
		return 1;
	}
	else
		wprintf(L"bind returned success\n");

	if (listen(ListenSocket, SOMAXCONN) == SOCKET_ERROR)
		wprintf(L"listen function failed with error: %d\n", WSAGetLastError());
	// 下面开始关键算法计算
	fd_set readfds;
	while ( true )
	{
		char name[24] = { 0 };
		char regkey[24] = { 0 };

		readfds.fd_array[0] = ListenSocket;
		readfds.fd_count = 1;
		iResult = select(NULL, &readfds, NULL, NULL, NULL);
		int aptFD = accept(ListenSocket, NULL, NULL);

		recv(aptFD, name, 20, 0);
		recv(aptFD, regkey, 20, 0);
		Sleep(500);
		// 根据客户端逆出来的算法计算异或的key值
		UCHAR orKey = 1;
		int namelen = strlen(name);
		for (int i = 0; i < namelen; ++i)
			orKey += name[i];
		// 计算异或后的返回值
		CHAR reskey[6] = { "CHKPS" };
		for (int i = 0; i < 6; ++i)
			reskey[i] ^= orKey;
		send(aptFD, reskey, 6, 0);
	}
	closesocket(ListenSocket);
	WSACleanup();
	return 0;
}


运行伪server后任何注册都将成功,效果图:



1)服务端配套程序 (2)客户端/代理端易语言模块 (3)使用及防破解技术教程 (4)防破解、功能演示源码 (5)加入千人售后交流群 (6)永久售后技术支持 (7)永久免费更换绑定授权 (8)永久免费升级E盾版本 二、e盾网络验证个人版有哪些防破解科技? 【防破解科技一】:独创的一对一版本模式,每位作者易语言模块单独编译发放, 加密算法完全独立,无法山寨方式破解 【防破解科技二】:独创的云计算功能, 可将重要算法、代码、数据等编写为DLL文件存放在服务器运行,实现代码分离 【防破解科技三】:独创的SE本地授权合体网络验证功能,实现了本地授权和网络验证的一体化双验证,防破解能力翻倍 【防破解科技四】:独创的自定义JS功能,服务端可定义编写JS函数,运算数据、运算防破解,或用作动态数据返回 【防破解科技五】:独创的VM优化功能,使用E盾的VM优化器可将VMP无法虚拟变形的代码完全保护,有效防止了特征扫描 三、E盾网络验证系统是如何绑定授权的? E盾网络验证系统的授权方式为服务端绑定作者的服务器机器码,并且支持作者任何时间更换自己的服务器,方便快捷。 验证模块和相关源码没有任何绑定限制,可任意PC进行编程。 四、需要作者自己租用服务器吗? 是的,E盾只有购买验证费用,无后续费用,服务器需要作者自行租用。 五、验证服务端需要什么样的服务器? E盾服务端支持任何Windows系统作为服务器,建议使用阿里云ECS或腾讯云等服务器较为稳定快速,其价格为 45-68元不等,或使用其他知名品牌服务器。 系统版本建议Windows Server 2008企业中文版。 六、E盾有哪些验证模式? 验证登录方式有两种: 卡模式登录(直接卡号登录) 、 用户模式(卡号作为充值卡,注册,充值,登录)。 验证绑定方式有多种:绑机模式、绑号模式、扣点模式、1窗口1卡模式、多机器绑定模式等可自由设定。 七、E盾网络验证支持验证多少个软件? 支持无限个软件验证,多软件进行验证方法有如下2种: 方法1:在一个服务端中管理多软件、添加软件名称,每个卡类型指定某软件。 方法2:在不同的服务端中管理不同的软件、独立服务端目录、独立端口。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值