吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 12816|回复: 182
上一主题 下一主题

[游戏安全] C语言-植物大战僵尸-刷僵尸call;fps游戏CS-方框透视(矩阵+传统)

    [复制链接]
跳转到指定楼层
楼主
UpSir 发表于 2020-3-5 15:48 回帖奖励
C语言-植物大战僵尸-刷僵尸call;fps游戏CS-方框透视(矩阵+传统)前言:家好,我是向上先生,嘿嘿~最近在学习逆向、反汇编等等,首先我在非常感谢52pojie这个平台,差不多很多学习资源都是在这个平台得到的,也学到了非常多的知识;才申请会员通过,这是第一篇帖子。


一、植物大战僵尸辅助(远程线程注入)
主要讲解一个刷僵尸call,其他的功能自行学习,不懂的联评论后解答,首先通过CE和OD分析,通过搜索场上僵尸数量,作为突破口


我们来到OD通过CTRL+G来到41de07这里,首先我们分析一下,刷僵尸这个call应该需要哪些参数,应该会有刷在哪里,刷什么僵尸,也许不会有参数,直接在call里通过代码随机生成等等情况;然后下断点,找到上一层调用的地方,观察堆栈变化根据返回地址找到调用的call;






由于栈是先进后出,调用关系就是由上到下,我们找的时候就应该由上往下跟随











将原来的eax==1 esi == 0  改为 eax == 2  esi == 1,后面又来了两次改为eax == 2  esi == 3,得出eax为行数,esi为类型




接下来就简单了,我们需要edi的值,去CE中直接直接搜索edi的值,下访问断点是要保证od必须脱钩,否则不可以。结果edi的值为 [[6a9ec0 ]+ 0x768]。


代码讲解:
1、dll代码:
DWORD WINAPI readCount(LPVOIDlParam)是自己dll里创建线程的回调函数
BOOL APIENTRY DllMain(HANDLE hModule,,DWORD ul_reason_for_call,,LPVOID lpReserved) 是Dll的入口





功能代码讲解:
getProcessHandleByName(char* name);根据进程名获取PID

injectDll(HANDDLE handle,char* key,int address);通过远程线程注入Dll


种植无CD线程函数

刷僵尸功能

主函数,入口



Dll完整代码: dll.txt (1.35 KB, 下载次数: 44) (编译后会得到一个TestDll.dll)
功能控制完整代码: 功能.txt (3.32 KB, 下载次数: 55)
测试代码结果如图:


二、fps游戏 CS方框透视原理(矩阵+传统坐标转换)
我采用的是GDI窗口绘制,需要干的事就是创建一个窗口,这个窗口透明并且具有穿透效果和置于顶层等特点。然后就是根据敌人和自己坐标点绘制方框。


第一种方式:传统型转换坐标原理:

CE搜索自己和敌人坐标标的基址,我喜欢找z坐标,然后x、y坐标就是z坐标地址 -8、-4;x、y、z坐标不会东一个西一个,因为在3d游戏中坐标都是通过向量Vector3存储,我们找的很多都是游戏引擎规定好了的东西。就不带着大家去找了,给大家说一下方法就行了,掌握方法;
自己坐标:
CE搜索方法:通过搜索z坐标,CE选择未知的初始值,改变Z坐标,然后改变了或者增加了或者减少了,不动时未改变不断过滤;说的迷迷糊糊~~哈哈
自己坐标基址:0x223d24d4
Z坐标:+ 0x350
X坐标:+ 0x348
Y坐标:+ 0x34c


敌人坐标:
CE搜索方法:通过自己坐标位置,然后搜索值大于,值小于,改变,未改变,不断过滤。
第一个敌人基址:0x223d24e4
Z坐标:+ 0x350
X坐标:+ 0x348
Y坐标:+ 0x34c


鼠标:
CE搜索方法:通过移动鼠标,搜索改变了,未改变,不断过滤。
鼠标X: 0x20326ec0
鼠标Y: 0x20326ebc

传统坐标换算关键代码:
[C] 纯文本查看 复制代码
// 线程函数 透视
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
	DWORD addr;

	while(F1_Statue)
	{
		// 读取自己信息

		ReadProcessMemory(handle,(void*)(0x223d24d4),&addr,sizeof(DWORD),NULL);
		ReadProcessMemory(handle,(void*)(addr+0x348),&selfBody.x,sizeof(DWORD),NULL);
		ReadProcessMemory(handle,(void*)(addr+0x34c),&selfBody.y,sizeof(DWORD),NULL);
		ReadProcessMemory(handle,(void*)(addr+0x350),&selfBody.z,sizeof(DWORD),NULL);
		ReadProcessMemory(handle,(void*)(addr+0x22c),&selfBody.ct,sizeof(DWORD),NULL);
		ReadProcessMemory(handle,(void*)(addr+0x9C),&selfBody.hp,sizeof(DWORD),NULL);

		for(int i = 1;i<sum;i++)
		{
			// 获取敌人坐标
			ReadProcessMemory(handle,(void*)(0x223d24d4 + i * 0x10),&addr,sizeof(DWORD),NULL);
			ReadProcessMemory(handle,(void*)(addr+0x348),&emBox[i-1].x,sizeof(DWORD),NULL);
			ReadProcessMemory(handle,(void*)(addr+0x34c),&emBox[i-1].y,sizeof(DWORD),NULL);
			ReadProcessMemory(handle,(void*)(addr+0x350),&emBox[i-1].z,sizeof(DWORD),NULL);
			ReadProcessMemory(handle,(void*)(addr+0x22c),&emBox[i-1].ct,sizeof(DWORD),NULL);

			// 血量
			ReadProcessMemory(handle,(void*)(addr+0x9C),&emBox[i-1].hp,sizeof(DWORD),NULL);

			// 计算方框坐标tan(a-b) = [tan(a)-tan(b)]/[1+tan(a)tan(b)]
			
			ReadProcessMemory(handle,(void*)0x20326ec0,&mousePoint.x,sizeof(DWORD),NULL);
			ReadProcessMemory(handle,(void*)0x20326ebc,&mousePoint.y,sizeof(DWORD),NULL);
			//tan(b)
			//判断象限
			if((emBox[i-1].x - selfBody.x) > 0)
			{
				// 一四象限
				if((emBox[i-1].y - selfBody.y) > 0)
				{
					// 一 坐标转换代码
					float tanA = tan((mousePoint.x*3.1415/180.0));
					float tanB = (emBox[i-1].y - selfBody.y)/(emBox[i-1].x - selfBody.x);
					emBox[i-1].cx = (box.width/2) + (box.width/2)*((tanA - tanB)/(1+tanA*tanB)) -10;
					float sqrtX = sqrt((emBox[i-1].x - selfBody.x)*(emBox[i-1].x - selfBody.x) + (emBox[i-1].y - selfBody.y)*(emBox[i-1].y - selfBody.y));
					tanA = tan((-mousePoint.y*3.1415/180.0));
					tanB = (emBox[i-1].z - 68 - selfBody.z)/sqrtX;
					emBox[i-1].cy = (box.height/2) + (box.height/2)*((tanA - tanB)/(1+tanA*tanB)) + 50*tanA;
					tanB = (emBox[i-1].z - selfBody.z)/sqrtX;
					emBox[i-1].ch = (box.height/2) + (box.height/2)*((tanA - tanB)/(1+tanA*tanB)) + 50*tanA;
				}
			}
		}
		
		InvalidateRect(hwnd,NULL,true);
		Sleep(150);
	}
	return 0;
}



传统方式效果图:



第二种方式:矩阵转换坐标
原理:
所谓矩阵就是关于游戏摄像机的一组数据,一般都是4*4和4*3,这是游戏引擎决定的;然后根据这组数据套用公式直接可以得到屏幕坐标,至于公式怎么来的,这里一下子也说不清,感兴趣的可以自己去学习一下,有点复杂,就是一些列的矩阵计算。
公式:
Temp = 矩阵[2][0] * 敌人X坐标 + 矩阵[2][1] * 敌人Y坐标 + 矩阵[2][2] * 敌人Z坐标 + 矩阵[2][3];
计算比例 = 1 / Temp;
屏幕X坐标 = 屏幕/2  + (屏幕/2 )* 计算比例 *  (矩阵[0][0] * 敌人X坐标 + 矩阵[0][1] *  敌人Y坐标 + 矩阵[0][2] * 敌人Z坐标  + 矩阵[0][3]);
屏幕Y坐标 = 屏幕/2  + (屏幕/2 )* 计算比例 *  (矩阵[1][0] * 敌人X坐标 + 矩阵[1][1] *  敌人Y坐标 + 矩阵[1][2] * 敌人Z坐标  + 矩阵[1][3]);

CE搜索方法:
通过一把狙,不要也行~~,未知初始值,移动鼠标改变,不动未改变,开镜改变,收镜改变,不断过滤~~哈哈也是迷迷糊糊。主要我描述不清楚,还是要通过视频,自己在网上找一些

CS矩阵图:


红色的就是矩阵,矩阵特点:第一个值在不开镜的情况下,一般不会超过2不会小于-2且开局不动都是0;第一行第三个值不会变;有一行或列是比较大的数值。满足这几个条件一般都是矩阵~~


[C] 纯文本查看 复制代码
// 线程函数 透视
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
	float matrixData[4][4] = {0};
	DWORD addr;
	while(F1_Statue)
	{
		int temp = 0;
		for(int k = 0;k < 4;k++)
		{
			for(int j = 0; j < 4;j++)
			{
				ReadProcessMemory(handle,(void*)(0x2048BC9C + temp * 0x4),&matrixData[k][j],sizeof(DWORD),NULL);
				temp++;
			}
		
		}

		// 读取自己信息
		ReadProcessMemory(handle,(void*)(0x223d24d4),&addr,sizeof(DWORD),NULL);
		ReadProcessMemory(handle,(void*)(addr+0x348),&selfBody.x,sizeof(DWORD),NULL);
		ReadProcessMemory(handle,(void*)(addr+0x34c),&selfBody.y,sizeof(DWORD),NULL);
		ReadProcessMemory(handle,(void*)(addr+0x350),&selfBody.z,sizeof(DWORD),NULL);
		ReadProcessMemory(handle,(void*)(addr+0x22c),&selfBody.ct,sizeof(DWORD),NULL);
		ReadProcessMemory(handle,(void*)(addr+0x9C),&selfBody.hp,sizeof(DWORD),NULL);

		for(int i = 1;i<sum;i++)
		{
			// 获取敌人坐标
			ReadProcessMemory(handle,(void*)(0x223d24d4 + i * 0x10),&addr,sizeof(DWORD),NULL);
			ReadProcessMemory(handle,(void*)(addr+0x348),&emBox[i].x,sizeof(DWORD),NULL);
			ReadProcessMemory(handle,(void*)(addr+0x34c),&emBox[i].y,sizeof(DWORD),NULL);
			ReadProcessMemory(handle,(void*)(addr+0x350),&emBox[i].z,sizeof(DWORD),NULL);
			ReadProcessMemory(handle,(void*)(addr+0x22c),&emBox[i].ct,sizeof(DWORD),NULL);

			// 血量
			ReadProcessMemory(handle,(void*)(addr+0x9C),&emBox[i].hp,sizeof(DWORD),NULL);

			// 屏幕坐标
			emBox[i].cz = matrixData[2][0] * emBox[i].x + matrixData[2][1] * emBox[i].y + matrixData[2][2] * emBox[i].z + matrixData[2][3];
			emBox[i].cz = 1 / emBox[i].cz;

			// 通过矩阵数据转换为屏幕坐标
			emBox[i].cx = (box.width/2) + (box.width/2) * emBox[i].cz * (matrixData[0][0] * emBox[i].x + matrixData[0][1] * emBox[i].y + matrixData[0][2] * emBox[i].z + matrixData[0][3]);
			emBox[i].cy = (box.height/2) - (box.height/2) * emBox[i].cz * (matrixData[1][0] * emBox[i].x + matrixData[1][1] * emBox[i].y + matrixData[1][2] * emBox[i].z + matrixData[1][3]);
			emBox[i].ch = (box.height/2) - (box.height/2) * emBox[i].cz * (matrixData[1][0] * emBox[i].x + matrixData[1][1] * emBox[i].y + matrixData[1][2] * (emBox[i].z + 68) + matrixData[1][3]);

		}
		
		InvalidateRect(hwnd,NULL,true);
		Sleep(150);
	}
	return 0;
}


矩阵方式效果图:


免费评分

参与人数 91吾爱币 +84 热心值 +81 收起 理由
Snprszy + 1 + 1 太秀了 我得研究研究了 谢!
lovejingqing + 1 + 1 我一个小白 除了几个中文字,其他的一脸懵逼 膜拜大佬
52CXZ + 1 + 1 用心讨论,共获提升!
莎士卜 + 1 + 1 五体投地
Coptis2020 + 1 谢谢@Thanks!
温柔的一哥 + 1 + 1 用心讨论,共获提升!
独行风云 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
梁总 + 1 + 1 我很赞同!
爆炎 + 1 + 1 谢谢@Thanks!
huangzihang + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
opqrew99 + 1 + 1 谢谢@Thanks!
razor40K + 1 + 1 我很赞同!
华灯初上夜未央 + 1 热心回复!
不怕黑的夜晚 + 1 + 1 谢谢@Thanks!
米酷cool + 1 + 1 我很赞同!
zwp10200 + 1 + 1 我很赞同!
pumishuo + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
xofeng锋 + 1 用心讨论,共获提升!
nut1999 + 1 用心讨论,共获提升!
qiaoyong + 1 + 1 谢谢@Thanks!
a1594324 + 1 + 1 谢谢@Thanks!
limpoamp + 1 + 1 我很赞同!
ciye7 + 1 + 1 谢谢@Thanks!
87832649 + 1 + 1 我很赞同!
Jale + 1 + 1 66666大神
BG沉默 + 1 + 1 谢谢@Thanks!
松晓 + 1 热心回复!
仅心 + 1 + 1 用心讨论,共获提升!
kefeijiajia + 1 我很赞同!
zswseu + 1 + 1 我很赞同!
爱凤凤呦 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
天尊小帅 + 1 + 1 谢谢@Thanks!
N0LL + 1 + 1 谢谢@Thanks!
太簇十七 + 1 + 1 谢谢@Thanks!
JaysonLee + 1 + 1 我很赞同!
℡小疯、 + 1 + 1 谢谢@Thanks!
lypxynok + 1 + 1 谢谢@Thanks!
jimo + 1 我很赞同!
soyiC + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wbgame + 1 + 1 谢谢@Thanks!
我是小邹昂 + 1 + 1 谢谢@Thanks!
ggwwrr + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
DaKxhq54zDH + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Assembly + 1 + 1 我很赞同!
tony198911 + 1 + 1 谢谢@Thanks!
songshao + 1 鼓励转贴优秀软件安全工具和文档!
淮南哈密瓜 + 1 + 1 谢谢@Thanks!
耶稣 + 1 + 1 我很赞同!
血浸青衫 + 1 + 1 我很赞同!
御坂10032 + 1 + 1 我很赞同!
侽兒嘿 + 1 + 1 我很赞同!
魅夜 + 1 + 1 谢谢@Thanks!
我来白嫖 + 1 + 1 我很赞同!
孤丶宇 + 1 + 1 谢谢@Thanks!
9843635 + 1 + 1 热心回复!
L15263458908 + 2 + 1 感谢大佬
天空藍 + 1 + 1 thanks!
隔壁老王酷酷哒 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
呲花bia + 1 + 1 膜拜大佬
poolychoi + 1 + 1 谢谢@Thanks!
黄sir + 1 热心回复!
扯蛋大大 + 1 + 1 我很赞同!
gh0st_ + 1 谢谢@Thanks!
Raphaell + 1 + 1 热心回复!
Fasy丶逝言 + 1 我一个小白 除了几个中文字,其他的一脸懵逼 膜拜大佬
sniper9527 + 1 + 1 谢谢@Thanks!
bingshen + 1 + 1 我很赞同!
此刻i + 1 + 1 用心讨论,共获提升!
北辰東閣 + 1 谢谢@Thanks!
Rclear + 1 谢谢@Thanks!
莫凉生 + 1 + 1 我很赞同!
观花539956 + 1 + 1 热心回复!
又红又专 + 1 我很赞同!
Higher-Stark + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
hygan + 1 谢谢@Thanks!
asq56747277 + 1 + 1 谢谢@Thanks!
辰星PsychoPrior + 1 + 1 我很赞同!
w820325611 + 1 + 1 楼主牛逼
Whitte + 1 + 1 热心回复!
qaz003 + 1 + 1 楼主。。附件无法下载,提示无法读取
loveaixing + 1 + 1 为什么我附件下载不了
南冥大人 + 1 + 1 谢谢@Thanks!
mm1809 + 1 + 1 用心讨论,共获提升!
gunxsword + 1 + 1 非常赞 全是精华!
k51613210 + 1 热心回复!
CN_GA + 1 + 1 谢谢@Thanks!
Dgodog + 1 + 1 有用!尤其是第二个!
@天打五雷轰 + 1 + 1 太秀了 我得研究研究了 谢!
agosoa + 1 + 1 谢谢@Thanks!
BY丶显示 + 2 + 1 谢谢@Thanks!
sujifei + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| UpSir 发表于 2020-3-7 09:43 <
qaz003 发表于 2020-3-6 01:31
谢谢分享,附件无法下载,提示无法读取

稍后我补链接,我也不知道为啥无法读取~

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
qaz003 + 1 + 1 谢谢。。。

查看全部评分

推荐
121890575 发表于 2020-3-5 17:33
推荐
 楼主| UpSir 发表于 2020-3-8 22:11 <
qaz003 发表于 2020-3-6 01:31
谢谢分享,附件无法下载,提示无法读取

已经可以下载了,如果好不可以,我发你邮箱

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
qaz003 + 1 + 1 热心回复!

查看全部评分

沙发
Xw丶小威 发表于 2020-3-5 17:16
技术贴!支持!
3#
bjxiaoyao 发表于 2020-3-5 17:33
感谢楼主分享精彩教程
5#
13682816322 发表于 2020-3-5 17:40
良心帖啊
6#
GerMInChars 发表于 2020-3-5 17:42
很好的帖子,感谢楼主
7#
sujifei 发表于 2020-3-5 18:05
帖子很棒,非常感谢
8#
BY丶显示 发表于 2020-3-5 18:15
文章说明很详细,方法也不错,谢谢分享。
9#
安澜良 发表于 2020-3-5 18:24
这样讲解让我这个小白都有一些摸到门路了
10#
l101 发表于 2020-3-5 19:07
666,很强大,但是迷迷糊糊的感觉Σ( ̄。 ̄ノ)ノ
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2020-4-10 16:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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