[网络游戏][暗黑]CEBN破解详解--给在ZIXIA摸黑的弟兄们,对crack感兴趣的也看过来

sting 2003-05-06 01:05:00 2023人围观

CEBN破解详解--给在ZIXIA摸黑的弟兄们,对crack感兴趣的也看过来
  只发天涯,转载请注明转自天涯
  
  终于等到了这一天,今天上网发现,跑了一个多星期的bot终于被封,对我来说,这意味着我在zixia的日子就此告一段落。
  在zixia混了一段时间,交了不少朋友,得到很多乐趣,现在应该是离开的时候了。我的兴趣一直在变,也说不准以后会不会回来,因此先在这个帖子里,做个告别的纪念--当然天涯还是会经常来的。临走时给至今尚在zixia中摸黑的弟兄们做点贡献,把我的破解留给大家。另外也算为cebn的anti-cheating从一个cracker的角度提供一些参考。
  如果不想看完整个文章,现在就想知道破解方法,直接跳到4.g;如果你只对crack感兴趣,请从3开始往下看;否则,慢慢看吧。
  
  1,我的暗黑战网生涯回顾
  我玩Diablo的历史很久,从一代刚出来的时候开始,d1,d1x(hell fire),d2,d2x(lod)都玩过,不过都是在单机或者LAN上。大约在两三个月前突然心血来潮,想上战网转转,就这么到了ZIXIA,这是我玩的第一个战网游戏。别人玩暗黑一般都是冰火女巫起家,我则从一开始就选了AMA(到现在还一直不怎么会用sor)。正好两位同学也混ZIXIA,算得上TH,就顺便跟他们rob了把DP(ed199)和lj TT,开始了KC生涯。在牛场混了一段时间,发现我的AMA杀牛很不爽,主要是装备太lj:没有物免,momo一碰就挂;mana leech很少,lf几次mana就光了。后来有一次,发现一个很强的AMA,用ms杀牛比TT还快,大受打击,从此决定也练个弓系AMA。当时也不知道什么弓好,只听说WF是个好东西,是AMA都想要。于是我直接跟TH同学说,听说你有WF,给我一把玩玩吧--就这么把WF rob来了,这就是我后来一直用的6% wf,即使后来自己出了jp wf,我也没换。
  玩了一段时间以后,开始到各种暗黑论坛转,看各种技术文章,发现暗黑里居然可以用bot,可以用maphack,大喜。我一直热衷于修改各种游戏:从刚开始用fpe、diskedit改rpg,到后来用softice给街机模拟器上的格斗游戏锁血,再后来自己动手写d2的单机装备修改器(前段时间用shadowmaster,发现他的界面风格和我的特像)。就这么run起了bot,
  别人用bot是为了mf,我则纯粹为了好玩,因此别人run P用sor我却用ama,也根本不管什么MF值。不过我的运气似乎一直很好,第一次上战网就有TH让我rob,第一次挂bot跑了一小时左右就出了个jp wf(当时BC34,因为正好穿了双bt。前几天看大家说mf跟人品有关,我自己是不大信的,不过要按标准,我的人品大概还算不错:从不翻箱子,不翻尸体,不主动hostile别人,不刷屏,带人很敬业,等等--我只在暗黑中寻找自己的乐趣)。这把jp wf现在就在那个那个谁的pet mm身上,大家去rob他啊。
  我用maphack比较糊涂,其实从开始上zixia的时候同学就教我用了,一直以为是d2x自带的功能。maphack用了很长时间也不知道可以用来偷窥别人装备。有一次在游戏里有人/w我,问我的物免腰带卖不卖(8 15 15的,当时也不知道好不好),特不理解,把角色在地上转了一圈,从各个角度看了又看,也没弄懂他是怎么知道的。到后来终于学会偷窥,从此多了一项乐趣。
  好景不长,没过多久CEBN就出来了,不但bot用不了,连maphack也禁了。没有了bot,zixia的速度确实快了很多,但没有了maphack也确实让人不爽。当时正好新练了一char,为pass、完成各种任务花了我很多功夫(我玩diablo一般都是双开,自己带自己,完成所有任务,打开所有WP的),后来在牛场level up的时候,经常跑着跑着就进了牛堆,死很多回--这让我很不爽,于是就决定自己动手crack了。事实上,onlyer的anti-cheating模型出乎意料的简单,我大概花了两个小时就搞定了怎么在游戏中用maphack,花了一天左右时间就搞定了怎么彻底绕开anti-cheating检测算法来挂bot,花了一晚上的时间就把anti-cheating线程人工反汇编成C++代码。到现在,我至少知道5种不同的绕开anti-cheating方法。后面慢慢说。
  以前除了好玩,我基本上不挂bot,因为上zixia不久,TH同学就退出江湖了,把所有财产都给了我,根本用不着mf。呵呵,当时感觉就像一夜醒来,给天上掉个大金块打中了。这些财产包括:所有绿色套装,所有elite装备,7+若干(包括jp),wf若干,etc。。。不过我玩diablo,兴趣基本上不在于装备,我有很多自己的乐趣,这几个月来,从开始的kc, help pass,到后来,聊天,gamble,shopping,洗头环,洗猪都玩过。当然没玩过的也很多,比如pvp, trade。
  crack以后,突然意识到这是发财的大好时机。另外,想到整个zixia只有我能挂bot,这种欲望简直就难以抑制!想想看,以前一个晚上能run那么600次,现在能轻松run到1000多次,这感觉很好!于是在cebn出来不到一个星期的时候,我就挂起了bot。其实从一开始我就很清楚,这种时候run bot肯定会被发现--别人一晚建几十个游戏你建1000多个,这不是bot是什么。嗬嗬,这一天终于来了,今天发现账号被删(或者被封了,我不知道),不明白的是他们好像动手晚了点。损失了一套7+ 三件套、两个ire,和lj mf装备若干;得到了什么,嗬嗬,猜猜看。:P
  
  
  2,为什么要crack,为什么要公布crack
  为什么要crack:很简单,我对crack一直很有兴趣,甚至比对游戏本身的兴趣更大。crack本身就是一种对技术的挑战,其过程也是很有乐趣的。
  为什么要公布crack:首先,onlyer的基本想法我是赞同的,我并不想,也无意让zixia回到以前大家都挂bot的时代,anti-cheating这东西随便做一个很容易,要做好很难,而做的不好的anti-cheating还不如不做。其次,我倾向于允许使用maphack。zixia的管理员说这从技术上做不到,禁止了bot也就禁止了maphack,禁止maphack不过是禁止bot的副产品。我说禁止bot和禁止maphack其实可以分开(从后面的分析中你会看到,这不是什么问题),问题在于onlyer想不想让你用。另外,说实话,onlyer的anti-cheating模型做的很简单,我不破解也会有别人破解,而且你会看到,破解起来是多么简单。事实上根据我的观察和别人在bbs上的讨论,除我以外,已经有人在用maphack,甚至有人用tradehack。这其实是更大的不公平,还不如回到大家都能用maphack的时代,这是我决定公开破解方法的原因之一。最后,我希望从一个cracker的角度,提出我的意见,希望cebn的anti-cheating能做得越来越好。
  
  3,我常用的破解工具:
   -- softice, 动态跟踪的强力工具,我最欣赏它可以设内存读写断点,这在crack时非常有用。
   -- vc debugger,这个不用说了吧。
   -- dependency walker,vc自带工具,用来粗略查看程序中用了哪些dll,调用了哪些api
   -- os debug symbol,调试符号,帮助你在动态跟踪时很容易看出什么时候程序调用了哪些api
   -- W32 Dasm,静态反汇编工具,静态分析指令流程很有用
   -- UltraEdit,找到破解方法后,编辑文件修改程序指令
   -- Process Hacker,我写程序时用的自己写的辅助工具,几年前在csdn上发布过。功能非常多:可以挂起进程/线程,可以远程加载/卸载/隐藏任意进程中的dll,编辑任意进程的内存数据,查看线程的call stack,甚至可以看各种密码框(包括IE)中显示为*号的密码哦。
  
  待续。。。
  
  by sting
  stingxp@yahoo.com
  2003,5,5
  
发表评论
  • sting 2003-05-06 01:06:16
      4,cebn破解详解
      a)我的习惯是,破解之前先想一想:如果让我来做anti-cheating,我会怎么做,想一想在客户端作anti-cheating,要检测什么,什么时候进行检测。首先, cebn凭什么断定你在cheating:在我看来,判断是否cheating的根据无非就是要检测d2x进程里有没有可疑的dlls加载进来,有无可疑的代码在跑,原程序的指令有没有被修改。其次,什么时候进行检测:检测是比较耗时的工作,显然不能太频繁,否则会严重影响程序的性能,因此一般来说应该每隔一段时间检测一次,这在技术上一般有两种方法可以做到:用windows定时器,或者新开几个线程,每隔一段时间检测一次。我比较倾向于使用后者,因此我猜想cebn也是这样。
      b)于是把cebn跑起来,用process hacker观察,发现在进入游戏后,大约有10个左右的线程在跑。通过实验各种组合,挂起各个线程然后加载maphack看看会不会被检测出来,结果发现,只要挂起倒数第二个线程就可以了,出乎意料的简单是不是?
      c)接下来研究这个线程什么时候启动,什么时候停止。很快发现,它在进入游戏时创建,退出游戏时停止。这意味着,如果用挂起线程的方法使用maphack,那么在进入下一个游戏的时候就会被发现--因为你无法及时把他挂起。那么,如果每次在推出时先把maphack卸载,进入下一个游戏时再停止线程/加载maphack会如何?从理论上讲这应该行得通,但不幸的是(我用的)maphack本身有问题,卸载的时候没有卸载干净,会被检测出来。那只好每用一次maphack就重起cebn一次了,这样虽然还可以接受,但也很不爽。不过可以看出,这是一个既能禁止bot又能使用maphack的好方法,最开始的时候我就是这么用的。所以我说这个anti-cheating做的很简单是有道理的--只用了个process hacker就搞定了。这是我的第一种破解方法。
      d)每次用了maphack必须重起,久了就会比较烦。于是决定研究cebn的anti-cheating代码,看看有什么更好的破解方法。用W32 Dasm对cebn.exe进行反汇编,很快发现cebn.exe中只有一处创建线程,入口在0x404A32。看了看汇编代码,线程主循环用C描述大概是这个样子:
      void anti_cheating_entry() {
       // 调整线程优先级
       SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL );
       while( _alive ) {
       // anti-cheating检测
       checksum = doDetecting(...);
       // 保存检测结果
       *_checksum = checksum;
       // 挂起一段时间
       WaitForSingleObject(_handle, _interval);
       }
       // ......
      }
      这是很常见的多线程程序的线程循环写法。顺便说一点,这个线程只负责检测是否cheating,不向服务器报告:这可以解释zixia bbs上有人说加载了maphack只要不动就不会被发现这一现象--这是因为检测结果在主线程循环中提交给服务器端,而主线程是消息驱动的,只要不产生消息,主线程就处于挂起状态。值得注意的是,线程循环的最后一行调用WaitSingleObject睡眠一段时间(_interval),设想一下,如果调整把_interval设为无限,线程不就自动永远挂起了吗。在CEBN中,_interval是个全局变量,加载后内存地址为0x408E0C,其初始值为1分钟,线程启动前重设为14秒(即每隔14秒检测一次)。换句话说,只要进入游戏后,随便用个可以修改进程内存的工具(比如fpe),把cebn进程0x408E0C处的数据改为0xFFFFFFFF即可。这是我的第二种方法,比第一种更容易对不对。其实只要onlyer乐意,抬抬手把_interval值设为0xFFFFFFFF,就可以有效的禁止BOT又能用maphack了,这是我前面为什么说他根本就不想让大家用maphack的原因。
      e)第二种方法虽然做法不同,但目的其实和第一种一样:就是要在第一次检测之后挂起线程,再加载maphack。这两种方法都没有完全破解,其最大的缺点是用一次maphack就必须重起cebn一次。
      
      待续。。。
      
      by sting
        stingxp@yahoo.com
        2003,5,5 
      
  • sting 2003-05-06 01:07:50
      应一个朋友要求,先发这一部分。
  • 一言难尽4607 2003-05-06 03:06:03
      oh?
      你不玩啦?
      太好啦!
      把dd都送给我吧!
  • 11ts 2003-05-06 08:50:05
      喜欢:)
      
  • 八翼天使 2003-05-06 09:50:57
      呀,斯汀不玩了么?遗憾啊。
  • 辽东散人 2003-05-06 11:07:26
      我该怎么办呀?呜呜呜哇哇哇,呜呜呜哇哇哇,刚攒了一箱子宝石啊,斯汀,你不用,给谁呀?没有你的领导,以后怎么玩啊?没主意啦,呜呜呜哇哇哇......:(
      
      
  • sting 2003-05-06 11:46:35
      前途要紧,不能再玩拉。;P
      你才是真正的领导啦,我不过是一菜鸟,天涯的zixia玩家都是在你的领导下聚集起来的。
  • 胜子 2003-05-06 11:47:29
      晕,
      不是吧,
      :(
  • sting 2003-05-06 12:39:24
      to 一言难尽4607
      如果你不想run M就run散人把,每天跑个百八十回,jp没有,日用品还是会有的。哈哈。。。
      以后我就看你们玩,也挺有乐趣。:P
用户反馈
客户端