高光外挂,不用来作弊的2B外挂
绝命时刻吧
全部回复
仅看楼主
level 14
saite240mt 楼主
最近给ZH做了一个外挂,不用来作弊的外挂——谁跟你说外挂都是用来作弊的?
然而我这个外挂的价值其实并不大,因为并不是每个MOD都愿意用W3D金属漆材质,因为它需要用3层贴图法来产生法线高光特效,对低端显卡来说是个灭绝人性的大杀器,两年前玩过变革的人肯定深有体会,这个MOD里,尤其是欧盟阵营,小到坦克飞机、大到建筑军舰,都大量使用了三层贴图法,高端独显看起来华丽逼真和CNC3差不多,而普通核显造5个建筑就能卡得游戏无法动弹。不过现在有钱淫越来越多,GTX980想买就买,追求逼真画质已不再是梦想,所以3层贴图必然是今后模型的主流技术
那么问题就来了,认真研究过光学的同志会发现,DX9引擎的CNC3,高光是及时运算出来的,不同的地图,光源方向各不同,但模型上的高光方向会随光源自动变化,永远不错位。而DX8引擎的ZH,高光却是用WSEnv配的一张死贴图,跟地图光源没半毛钱关系,更不可能随之而变。于是变革里的高光经常背对着光源方向,让那些过于追求真实的玩家很是费解,最后只能叹息——认真你就输了
而我现在做的这个外挂,就解决了这个问题,使ZH的高光方向能自动随地图光源而变,就像CNC3一样,而且这还仅仅只是一次尝试,今后这个外挂还可能有更恐怖的功能,甚至全盘接管游戏的底层逻辑和渲染方法,然后你们就懂了
2015年06月21日 02点06分 1
level 14
saite240mt 楼主
在介绍外挂原理之前,也许有人注意到了341ZH和FK3D,确切地说是BONB18,有个水面反光和地面假高光特效,当你旋转视野时就能发现,它竟然跟CNC3一样,是随地图光源而变的!每张地图的光源都不同,那么赛特你个2B当初是怎么做到的呢?
事实上我会告诉你,我给水面和地面各做了8个方向的备用高光模型,然后在每个地图的map.ini里对其外观模块做重定义,调用与地图光照方向最接近的那个高光模型。如果用这个方法来让每个单位的高光都能自适应,就得给每个单位的3个破损阶段都各做8套高光模型,假设一共有100个单位,就需要2400个模型,然后再到map.ini里去写100段重定义,76张地图就需要写7600段重定义……估计你看完这个工作量就想买豆腐去撞了。所以,本2B一定会用非人道的办法把这种简单重复性工作交给外挂来做
鬼大爷喊我是软件行业的败类呢?
2015年06月21日 02点06分 2
level 14
saite240mt 楼主
考虑到国内MOD界懂C++和WINDOWS系统内核的人几乎只有我一个人,所以我就免费透露一下原理,反正没人有本事复刻出来,我也不用担心版权问题。
这个外挂的核心原理借助了一个众人皆知的技巧——热调试法。经常做模型的人都知道W3D可以热调试,既先把游戏运行起来,然后弹出桌面去改模型,导出到Art\W3D文件夹下之后,只需要弹回游戏去重新开局,或者读档,游戏就会加载修改后的新W3D,根本不需要退出游戏再重开。而某些人甚至发现个别贴图也能热调试,只是并非是所有贴图都行,比如标准材质只有漫反射通道上的贴图行,其他通道都不行。W3D材质只有第1通道的第1张贴图行,第2张和后面通道上的所有贴图都不行,所以我这个外挂只能用W3D热调试法来实现(题外话,假如所有贴图都支持热调试,那么这个外挂还会更加简单)
2015年06月21日 02点06分 3
level 13
嗯。。。。。
2015年06月21日 02点06分 4
level 14
saite240mt 楼主
准备工作:
1、地图的光照从0到359度,按10度一划分,分为36向,既得到从0到35号方向,于是首先需要用PS的旋转复制脚本做好这36张贴图,命名为UHL00.dds到UHL35.dds。你要是嫌多,还可以分得更粗,像我当年那样分8向也行(建议最好不要低于8向)
2、给所有单位的模型添加高光层(不知道怎么加的话,等我发截图讲解),WSEnv贴图统一调用UHL00.dds,导出。也就是说默认高光都是0号方向。将这些W3D全部打包进一个特殊命名的W3DUHL.big中
3、在游戏目录下新建一个XLS表格,第一列记下每张地图的名称,第二列记下其光源方向数字,如果你不知道数字是多少,请用地图编辑器打开地图,编辑——全局光照,看光源1的第一行参数,比如参数为213,你就记下21(参数值除以采样间隔,你懂的)
2015年06月21日 02点06分 5
level 14
saite240mt 楼主
外挂原理:
1、每次启动外挂,外挂会将W3DUHL.big里所有文件释放到Art\W3D文件夹下备用,然后每隔10毫秒读一次游戏进程的特定内存地址(类似于金山游侠的原理),当玩家选定地图时,外挂能从这段内存中分析出所选地图的名称
2、外挂通知操作系统内核,将游戏进程卡死,不让它往下继续加载,然后查XLS表格,找出这张地图的光源方向编号,比如查出是21号,则将Art\W3D中的每一个W3D文件打开,查找其2进制数据中的UHL00.dds字串,将00改成21
3、外挂通知操作系统内核,让游戏进程恢复运行,于是“醒来后的”游戏进程就发现Art\W3D中所有W3D都发生了变化,误以为是MODER在做“热调试”,于是挨个重新加载,这样就完成了批量变更,由默认的0号方向变成了21号方向。
4、当玩家更换地图,或者读其他存档时,外挂会再次分析出新的地图名,于是查表求出其光源方向,比如这次查出是13号,则将所有21全部改成13即可,以此类推……
5、当玩家退出游戏时,外挂负责清空Art\W3D文件夹,这样就神不知鬼不觉地让不明真相的玩家不知道高光是怎么实现自动随光照而变的
2015年06月21日 03点06分 6
这个应该是进程的挂起和恢复吧。
2015年06月22日 00点06分
回复
�����˰�
:+10086,事实上我卡死的不是进程,而是进程下的9个线程。因为SAGE一共有9个线程,前8个是各种界面、音视频输入、输出处理,第9个才是战斗运算,据说寻路也在这个线程上
2015年06月22日 01点06分
level 14
saite240mt 楼主
说明:
1、分析地图名的功能不完善,在任务和挑战中,如果玩家读自己存的档,外挂无法分析出当前是哪张地图,因此不会去改W3D,导致高光方向可能不正确,但并不影响游戏运行
2、本外挂只适合纯玩家使用,若MODER自用,切记调试模型前先关闭外挂,否则游戏退出时会导致Art\W3D里所有的W3D文件被删,本2B概不负责赔偿青春损失费,请自行重新导出!如果你做模型从不保存MAX源文件,本2B建议你最好买一碗豆腐,随时准备碰!
3、W3D调用的贴图文件名变了,并不影响联机同步性,所以这个外挂可以在联机的时候用
4、用C++编写的外挂效率高得吓人,对I3白菜价CPU和5400转低速硬盘来说,修改10000个W3D文件不到1秒,所以完全让人察觉不到,唯独从BIG里释放文件比较耗时,100M的BIG大约需要4秒,所以我把外挂合并到了画质管理器里,这样就可以先释放BIG,再启动游戏,测底达到了隐藏外挂的目的
2015年06月21日 03点06分 7
level 13
Good。
但作为非画质党我更关心的是你分析内存地址的过程。我在试图反汇编ZH的时候发现Generals.exe是为game.dat做环境铺垫用的,也就是说单独反汇编Generals.exe或game.dat都没有用,因为前者并非真正的游戏本体,后者没有环境无法正常运行,而你在制作这个外挂的时候已经牵扯到分析游戏内存地址的过程,你是如何做到的?
2015年06月21日 03点06分 8
首先你要枚举所有进程,找出Game.dat的进程句柄,然后用ReadProcessMemery函数读这个进程句柄上,指定地址、指定长度的一段数据来做分析。具体的地址需要先用CheatEngine搜索,找规律,这货除了能搜索char、short和int外,还能搜索文本字符串
2015年06月21日 03点06分
但是SAGE很少使用全局变量或静态变量,多数变量都是函数栈上的临时数据,函数结束,变量值就成了无效的脏数据。更有甚者是临时new出来的堆内存,一旦delete之后就全FF了,所以没有固定地址,很多想法就很难实现
2015年06月21日 03点06分
@saite240mt 有没有能挂接到已经运行起来的game.dat进程上做动态调试的软件?
2015年06月21日 13点06分
回复
ʧ�ص�AI
:貌似VS2008就可以这样
2015年06月21日 14点06分
level 6
好高大上,伸手
2015年06月21日 15点06分 9
level 11
不明觉厉,还有就是:图呢?
2015年06月21日 16点06分 10
你想看程序代码的截图,还是想看高光效果的截图?
2015年06月22日 01点06分
@saite240mt 层主当然是想看放到zh里的效果图啦
2015年06月22日 06点06分
level 1
我仿佛听到了显卡核爆的声音[乖]
2015年06月22日 01点06分 11
莫非你是15年前,32M显存的古董显卡?
2015年06月22日 01点06分
@saite240mt 我的是9600gt,一代神卡,估计也要爆了。
2015年06月22日 01点06分
@saite240mt 我是把计算器插在显卡插槽上的
2015年06月22日 01点06分
回复
�����˰�
:对于这种神卡,我这个外挂还可以去高光层,也就是说像RA3那样由玩家自选模型精度,高精度模型平均2000面,带法线高光。中精度平均2000面,无法线高光。低精度就是一张死平面(类似于象棋棋子,上面写着单位名称)
2015年06月22日 01点06分
level 12
来人,上四路泰坦!
2015年06月22日 07点06分 12
level 14
saite240mt 楼主
@eastern007
你要的法线高光特效,为了确保你看得到高光效果是怎么个跟CNC3一模一样的动态样子,我特意给你录了一段视频
http://v.youku.com/v_show/id_XMTI2MzMyNjI0MA==.html


视频来自:优酷
2015年06月22日 10点06分 13
level 9
天灵灵,地灵灵!卖房兽,急急听我命!要现房,急急如律令!
2015年06月23日 04点06分 14
level 14
……这个貌似是破解吧……
2015年06月23日 04点06分 15
我哪有那个本事去破解game.dat?我压根不懂汇编,我不是都把原理合盘托出了么?难道你觉得金山游侠这种雕虫小技也能被称为“破解”?
2015年06月23日 10点06分
^_^
2015年06月23日 13点06分
level 11
虽然不懂,但看起来好牛逼的样子[咦]
2015年06月23日 14点06分 17
不需要看懂,到时候只需要运行游戏,然后旋转视野看高光效果就行了,就当这个外挂根本不存在
2015年06月24日 03点06分
这是补丁级外挂
2015年06月25日 12点06分
回复
��è�����ؼ���
:差不多可以这样理解吧,说白了就是帮游戏做一些必要的后台处理,来实现一些原来没有的功能
2015年06月25日 13点06分
level 14
saite240mt 楼主
由于W3D的法线高光特效是在原有模型的表面再渲染一层图像,然后将两层图像重叠起来,对显卡来说相当于模型的总面数翻倍,原本1000面的战舰,现在变成了2000面,对低配玩家,尤其是集显玩家来说是个惨无人道的噩梦,想想看如果你显卡不好,还屯一群战舰,游戏会卡成什么样子?
所以我专门给低配玩家补了一个功能,让高光外挂可以根据画质档位来开启或者关闭高光特效,光影等级拉到4,高光特效就会开启,低于4的话就会关闭
这样就既兼顾了有钱淫对逼真画质的要求,也照顾了集显玩家想屯战舰海玩的欲望
2015年06月25日 10点06分 18
等千元级显卡再提升至少一倍的性能之后(估计还需要等2年),我就给所有单位都做一套带法线高光特效的模型,到时候可以开着高光玩4SA兵海团战,那才叫逼真得能和CNC3相比——然而,用DX8来模拟DX9的代价实在是太大了
2015年06月25日 10点06分
回复 saite240mt :等有一天塞特大神把引擎重写,这样我们的ZH生命力就更强了
2015年06月26日 06点06分
回复 saite240mt :不过请问大神,重写引擎可行性如何?
2015年06月26日 06点06分
回复
�·��������
:我没那个本事重写引擎,因为引擎不是一个人可以完得成的大工程,像ZH用的这个DX8的SAGE引擎,是WW工作室花了好多年时间一步一步搭建起来,EA又投入了大量人力搞了两年多才勉强优化好的,如果让一个人业余来做这个事,只怕要花半辈子。所以真正可行的是,换开源引擎
2015年06月26日 07点06分
level 12
赛大牛逼
2015年06月29日 05点06分 19
level 1
完全听不懂T_T
2015年07月17日 16点07分 20
1