如果星际不连局域网,无论是single player还是Multiple Player,程序都能修改自己的金钱和气的数值。但是如果是在局域网网内的话,只要一修改,就会出现结束游戏(...dropped the player...),我在想星际是不是有一种什么机制来防止在局域网中的作弊呢?~~~欢迎大家交流探讨~~~~

解决方案 »

  1.   

    中规中矩地玩?我谁也打不过。中规中矩地玩?我谁也打不过。
     aabbss() ( )  aabbss() ( )  aabbss() ( )  aabbss() ( ) 
    我和你的情况是一样的.呵呵
    没想到玩星际的高人还不少啊.
    双星的都有!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  2.   

    多谢大家的支持!!!
    暗黑和星际的确是非常经典的游戏,但是正如yaogreat所说,游戏和作弊是两码事一样,我们只讨论技术,而不会涉及到道德之类的东西。
    to kpld8888(kpld) :你的话中有话啊,挺有意思。
    to joise:你的话有道理,因为在你回复之前,我已经注意到这个可能性了,而且我试过不同的种族,无论使用哪一个,存钱的虚拟内存地址都是在0x00501370、0x00501374的地方,但是不是唯一的,他们随机地交替出现,而气矿的虚拟内存地址的对应为0x005013A0、0x005013A4.
    并且可以肯定的一件事是存钱的数据类型是4个字节大小,这个我试过了。
    (测试的星际版本是1.10)
    但是如果真的是在多人模式下储存钱的那块内存有备份,怎么样能同时修改这两个内存地址为同一数值呢?我曾试着把网线拔掉,再修改内存钱,数目是对了,但是一旦把网线接上,马上又给踢掉了。请大家继续讨论~~~~~~
      

  3.   

    呵呵,这个问题以前也研究过。
    我想,并不是储存钱的那块内存有备份,也不是像w3guy(Jaz)所说的其他玩家的内存中有备份,
    因为我曾经直接改了程序采矿加钱的部分,就是说本来每点水晶矿加8,把它改成了另外一个值。这样不管是单机还是网络,所有有关钱的数目应该一样了。在单机模式下没问题,局域网的时候一采矿就掉。
    所以说根本不是当前数据有其他备份的问题,程序应该有其它的判断方法。当时没时间去弄了,不然我想应该总可以找出是什么原因的~
      

  4.   

    gavinyu(扛着A枪兵的AK) 所说的情况并不能证明w3guy(Jaz) 的说法不可能,因为你修改了自己的加矿数量,但是没有修改别人的,有可能在别的玩家的计其上保存的不是你的矿产总数,而是你采矿的次数,不过这样也太麻烦了。呵呵
      

  5.   

    to w3guy(Jaz):即使像你所说,就算是星际这个程序本身也不可能在同一时刻把所有局域网中其他玩家的备份内存改变。会不会是这样呢?星际这个程序本身在某一个玩家(比如A玩家)每采取一点矿(8)时,就会向局域网中其他玩家发送一个消息,用来说明A玩家采了一点矿,发送A玩家的当前矿的数目,由于每点矿的大小为8,那么这些玩家在各自的程序中判断A玩家的当前矿数目与本地内存的A玩家的备份矿数目的差额是否等于8.如果相等就是合法的,否则就是不合法,因此会把A玩家踢掉.因为我在修改时只是简单的把本地内存的矿数目改变,而既没有向其他玩家发送消息,也没有满足差额大小为8的要求,因此被踢掉了?
      

  6.   

    to mrh123: 应该差不多像你说的那样吧。首先多人游戏中每个玩家都存储着其他玩家的当前状态,否则没法玩。当A玩家的状态发生变化,它肯定会发数据通知其他玩家,假定它是这样实现的,发送A所做的动作以及这个动作的结果给其他所有玩家,那么修改A的数据而不被系统检测到几乎是不可能的。比如:
    A 采了一点矿,它会把采了一点矿和采过后的总矿数发给其他玩家,其他玩家接受到数据后,在自己的机器上对A的数据做采一点矿的处理然后把总矿数和发来的总矿数做比较,如何不符合,则A 会被踢出。
      

  7.   

    mrh123 ,真要有什么结果的话必须去试验,找到根本原因,否则光这样这样假设没什么用的。 比如如果像w3guy(Jaz)所说,那么可能用加速器或其他手段改变采矿的速度就可以了;而又可能发现这样做了之后还不行,于是又假设程序会对采矿的速度有判断。像这样一路假设下去,就会有一大堆对程序检测机制的猜测。
      

  8.   

    to w3guy(Jaz):其实我觉得多人游戏中每个玩家都存储其他玩家的当前状态是不大可能的;星际中任何一个玩家的每一个兵或者建筑都是由一个线程(我想应该是这样的)来控制的,当某一个玩家的状态改变时,它最多就应该会向其他玩家发送那些状态改变了的新的数据;如果任何一个玩家都存储其他玩家的状态,那么它首先应该会接受其他玩家发送过来的数据,然后更新保存的状态为新状态,然后再更新地图上的显示(比如兵的移动,建筑物的建造状态等),这样一来游戏的同步速度应该会变慢的;但是从该钱而被踢掉的情况来看,一个玩家对于其他玩家来讲不存储任何数据也是不可能的~~~~我机械地通过程序改变我的矿数,但是应该说没有任何消息发送到其他玩家,因为这是我还没有用矿来造兵或者建筑,但是被踢掉了;之所以会这样我想可能存在一个专门的线程来监视玩家的资源(矿或者气)的状态改变,一旦改变了,这个线程就发送消息到其他玩家,由于被改变后的资源数目一般很大(例如我改了1000000),它不如我们以前所说的差额为8的要求,因此被踢掉了!我应该试一下,改钱时把新值改为原来的数值+8.to gavinyu:的确,做这个需要去测试,但是在测试之前需要有目的,有方法,对嘛?我想大家都遇到过难题,当自己的想法不能得到验证而又没有新的想法时,总想听听大家的意见.通过交流,产生新的假想,又否定这个假想,再产生新的假想,...这个过程可能需要时间,但是这个过程会出现新的火花的吧!
      

  9.   

    >其实我觉得多人游戏中每个玩家都存储其他玩家的当前状态是不大可能的
    我是指每个玩家都“存储着”其他玩家的当前状态, 不是指每次更新都要把全部数据发过去。你不要理解错了。> 星际中任何一个玩家的每一个兵或者建筑都是由一个线程
    不可能的,没有任何一个即时战略游戏是这样实现的。你用任务管理器看看你的warcraft 有几个线程。>当某一个玩家的状态改变时,它最多就应该会向其他玩家发送那些状态改变了的新的数据
    这就是我的意思,游戏只发送变化的东西,不是每次都把自己所有的数据都发送。关于用加速器的问题,游戏为了保证公正性,会根据其他玩家的速度自动调节你的速度的,你再怎么加用处也不会大。
      

  10.   

    mrh123,我说了我改了之后一采矿就掉,你还认为是差额的问题么?
    关于加速器或其他手段改变采矿速度,我的意思其实是改变发送到其他玩家的采矿次数,比如说如果我知道了通信数据格式,可以欺骗性的发送采矿的数据。而对此程序又有可能也会对此判断,前后两次的时间差不能少于某个数值等等。
      

  11.   

    有一种方法,可以在打星际的时候,不论是在局域网,还是 在站网上都可以。你需要找截获网络封包的软件,然后分析封包的数据结构,比如一个机枪兵的属性(血,攻击力……)这些数据都是被装在封包中,然后在网上传递的。通过修改封包数据,可以实现作弊(比如更改攻击力等属性)。
    你可以在GOOGLE搜索“外挂教程”,那里有详细的介绍。