吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 5231|回复: 95

[原创逆向图文] CRC32算法

  [复制链接]
zsky 发表于 2019-10-7 16:46 | 显示全部楼层 |阅读模式

CRC算法简介
        “CRC” 的全称是 “Cyclic Redundancy Checksum” 或者 "Cyclic Redundancy Check",是对数据的校验值,中文名是“循环冗余校验码”,常用于校验数据的完整性。最常用的CRC 算法是 CRC32(即数据校验值为32位)
CRC算法代码量小,容易理解,目前应用十分广泛。
CRC算法也广泛应用在游戏安全领域,用于对游戏代码的校验,防止别人通过修改代码来达到某一目的,比如对于FPS游戏,可能用户修改了减少子弹的关键代码,使自己达到无限子弹的效果
手写CRC检测算法
我们参考《加密与解密》第四版279页CRC32算法,自己手写一个CRC检测程序
   
[C] 纯文本查看 复制代码
#include <stdio.h>
#include <windows.h>

int crc32_table[256];

//生成具有256个元素的CRC32表
void Crc_Make_Table()
{
	int crc = 0;
	for (int i = 0; i < 256; i++)
	{
		crc = i;
		for (int j = 0; j < 8; j++)
		{
			if (crc & 1)
				crc = (crc >> 1) ^ 0XEDB88320;		//CRC32多项式的值,也可以是04C11DB7
			else
				crc >>= 1;
		}
		crc32_table[i] = crc;
	}
}

//根据CRC32数据表来计算字符串或者文件的CRC32值
int Calc_Crc32(char * data, int len)
{
	int crc = 0XFFFFFFFF;	//CRC初值是-1,即0XFFFFFFFF
	for (int i = 0; i < len; i++)
	{
		crc = crc32_table[(crc ^ data[i]) & 0XFF] ^ (crc >> 8);
	}
	return ~crc;
}

//返回代码段的基址和大小
DWORD GetTextAddrAndSize(int * pTextSize)
{
	HMODULE hModule = GetModuleHandle(NULL);
	PIMAGE_DOS_HEADER pidh = (PIMAGE_DOS_HEADER)hModule;
	PIMAGE_NT_HEADERS32 pnh = PIMAGE_NT_HEADERS32(pidh->e_lfanew + (DWORD)pidh);
	//获取节的数量
	int secNum = pnh->FileHeader.NumberOfSections;
	//获得节表的基址
	PIMAGE_SECTION_HEADER  psh = PIMAGE_SECTION_HEADER(sizeof(_IMAGE_NT_HEADERS) + (DWORD)pnh);

	for (int i = 0; i < secNum; i++)
	{
		if (!strcmp((const char *)psh->Name, ".text"))
		{
			*pTextSize = psh->Misc.VirtualSize;
			return psh->VirtualAddress + (DWORD)hModule;
		}
		psh++;
	}

	*pTextSize = 0;
	return 0;
}

int main()
{
	int textSize = 0;
    DWORD dwTextAddr = GetTextAddrAndSize(&textSize);

	//下面我们将CRC32校验用于自身代码,来模拟游戏中的CRC校验
	printf("请尝试修改内存,并过掉检测!\n");
	//先生成一个CRC32表
	Crc_Make_Table();

	//初始内存校验值
	int sum = Calc_Crc32((char *)dwTextAddr, textSize);
	
	while (1)
	{
		int tempSum = Calc_Crc32((char *)dwTextAddr, textSize);

		if (tempSum != sum)
		{
			MessageBox(NULL, "检测到您修改了代码!", "封号!", MB_OK);
		}

		Sleep(2000);
	}

	getchar();
	return 0;
}


运行程序下断被检测
我们运行程序,并用OD附加
1.png
程序正常执行,但是当我们按下F2下断点的时候(将代码数据改为CC)
2.png
这时,就会被程序检测到,如果是游戏程序的话,这个时候就会被检测进行惩罚了,,比如封号啥的,,下面我们就来尝试过掉这个CRC检测
实战过CRC检测
我们对上面401051这个地址下内存访问断点,程序断下
3.png
整体观察这段代码
4.png
就是一个死循环校验
5.png
通过堆栈观察,返回到上层函数
6.png
发现这个je就是关键位置,如果程序检测到代码改变,zf就是0,je不跳转,然后MessageBox就执行了(被检测到),所以我们将je改为jmp,使其强制跳转
7.png

这样,不论我们怎么修改代码,程序都不会被检测到了


过掉本程序检测的方式有很多,比如还可以全部将检测到之后执行的代码全部NOP掉等。大家可以发挥想象力,自行实践。


这里写的CRC例子虽然非常简单,但是“麻雀虽小,五脏俱全”,其他的一些大的检测也无非是加入了一些混淆技术,或者多重CRC等



参考书籍
《加密与解密第四版》
参考文章
https://www.freebuf.com/articles/system/210304.html


最后,还是那句话,技术不分对错,人心才分善恶,希望大家努力学习技术,为游戏安全贡献出自己的一份力量,也希望自己在未来的日子更上一层楼。加油~~~~~~~








评分

参与人数 21威望 +1 HB +32 THX +15 收起 理由
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
行行行行行行 + 1
WolfKing + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
消逝的过去 + 1
冷亦飞 + 1
zyyujq + 1 + 1
小菜虫 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
别来无恙 + 1
慕枫二二 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
徐闯 + 1
ldljlzw + 1
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
playboy + 1
小猪呼噜噜 + 1 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
zwj00544 + 1 + 1
我是好人 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
拿着雪糕 + 1
s54490549 + 1 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
macolma + 1 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
1151425395 + 1 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
Shark恒 + 1 + 20 + 1 [快捷评语]--你将受到所有人的崇拜!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
1814427397 发表于 2019-10-7 22:52 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
故林 发表于 2019-10-18 08:39 | 显示全部楼层

大佬厉害,最近玩DOF私服,想破他翻检测他那个检测不知道是不是写在dll里,但是vmp又不会,有什么方法吗大佬
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
1151425395 发表于 2020-1-4 20:41 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
s54490549 发表于 2020-6-1 20:06 | 显示全部楼层

大佬 请教大佬技术,安卓crc校验你会弄吗? 请加下我Q 739789885非常感谢
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
拿着雪糕 发表于 2022-2-4 16:42 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
KbRDG16 发表于 2022-2-22 11:56 | 显示全部楼层

谢谢大神的奉献
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
不苦小和尚 发表于 2022-2-22 11:57 | 显示全部楼层

这个好像是滴水的教程
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zwVqG0972 发表于 2022-2-22 11:57 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
JaKFGXc1 发表于 2022-2-23 20:01 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表