宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 5148|回复: 3

[转贴] 游戏中加密解密算法分析常用方法

[复制链接]
  • TA的每日心情
    开心
    2024-12-9 18:45
  • 签到天数: 124 天

    [LV.7]常住居民III

    admin 发表于 2009-11-27 23:33:01 | 显示全部楼层 |阅读模式

    欢迎您注册加入!这里有您将更精采!

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    游戏中的加密解密算法,在脱机中是必不可少的,可有的朋友不知道怎么去找它。并且,想写出真正功能完善的辅助,不了解游戏的数据结构和协议,是不可能实现的,即使你用超强的算法利用找到的CALL去实现一个辅助,那意味着你的更新工作会很大。
      而游戏的加解密算法一般是很少会去改动的,所以,辅助,使用封包去实现,意义很多。
      另外,想写脱机的你,不通过封包,是写不成的(有些功能可以调用游戏DLL里的东西)。
      好了,我来说说找算法的原理和方法吧。
      首先,我们还是要了解游戏是怎么来操作数据的:
      最基本的大家应该知道,就是:

      客户端生成明文包-->调用加密函数加密->交给SEND函数去发给服务器。

      而复杂的话可能就是:

      客户端生成明文包-->调用加密函数一加密->交调用加密函数二加密->给SEND函数去发给服务器。
      
      再复杂的可能是:

      游戏启动是接服务器发来一个密钥-->客户端生成明文包-->调用加密函数一(利用密钥)加密-->调用加密函数二->给SEND函数去发给服务器。

      基本上就是那样,当然更复杂和变态的可能还有:服务器发来密钥后,客户端对密钥进行一次加密,然后才可以用,不管怎么说这要看游戏编写者想怎么来保护数据了。
      
      不过,最其码你知道了这些方法,那就你就有个思路去跟踪了。

      另外,大家要了解的就是,发包和接包函数:

      有的游戏是用SEND、RECV,有的是用WSASEND、WSARRECV,也可能混用,这你可要找对了。(小方法:可以用WPE拦截看一下,包括游戏启动时。)

      上MSDN查看资料后,我们了解到:
      SEND有个参数BUF,它是用来存将要发送数据的缓冲区。
      RECV也有这么个参数,它是用来接收的缓冲区。
      WSASEND有个参数是lpBuffers,它是一个指向WSABUF结构数组的指针。记住,是指针!
      WSARECV也一样。

      然后,进入游戏,开OD,我这里就先不找例子了,光给大家说说原理和方法,这是我发这个主题的原因(你会了方法,哪个游戏都一样,正所谓那个什么什么鱼,不如什么什么渔来着,忘了!)

      以下是跟踪数据的方法(就是看数据SEND.BUF中的数据是从哪里来的,其中SEND的断不要取消,同时要多看数据区的数据变化):
      1、开OD,下断:BP SEND,游戏里说句话。断下后,在OD的数据区里看一下BUF里的东西和BUF的地址。
      2、然后,给BUF下硬件写入WORD断点。F9运行一下。再说一句话,这时就能断下是谁给这个BUF写了数据。
      3、你可能看到是:REP MOVS [EDI],[ESI],对了,这里ESI就是数据的来源,而EDI就是数据要存放的地方,也就是它的下一级SEND.BUF。
      4、这时注意数据区EDI的数据。取消硬件断点,F9一下会断到SEND,看一下EDI也就是这时指向的SEND.BUF中的数据是否有变化,如果有,那么调用这个REP MOVS指令的CALL就是加密CALL。
      5、如过没有,再对ESI指向的空间下硬件写入WORD断,运行游戏,再说一句话。断下另一个地方的REP MOVS,然后和第4步一样,注意数据区的数据变化。

      整个过程就是4-5步这样的。你也可以一次就追下所有的REP MOVS,原理都一样!

      提示:整个过程都要注意看数据区的数据变化。

      而对于WSASEND,它的参数是一个指向WSABUF结构数组的指针。大家上MSDN看一下它的参数。和找SEND的方法一样。

      另外大多数游戏的加密和解密都是用的都是同一个,而跟踪的方法都一样,不同的是一个是往回找,所以叫逆向,一个是往下找。找到任意一个就行了。

      自我感觉跟接包的方法要方便一些,因为它接包后才要调用解密,这样往下找感觉要比往上找好,呵呵,再提示一下,要是跟RECV,断下RECV后一定要注意先F8一下,要让这条指令执行了,它的BUF中的数据才是服务器发来的数据。

      好了,这次就说这么多吧,也不知道说清楚了没有,高手看了不要笑,如果我说的有不对的地方,请指证,我怕误人子弟,呵!

    该用户从未签到

    xiebing 发表于 2010-4-8 11:45:34 | 显示全部楼层
    我试了一下,没找到,总是自动断下来!

    该用户从未签到

    xiebing 发表于 2010-4-8 11:46:05 | 显示全部楼层
    老大给个实例就好了!

    该用户从未签到

    topzhp 发表于 2010-4-17 18:31:49 | 显示全部楼层
    多谢老大,有空试下!
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    免责声明

    本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

    QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

    Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-12-22 22:26 , File On Powered by Discuz! X3.49

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