• 155阅读
  • 0回复

任鸟飞谈逆向----DNF重新实现的发包函数找法 [复制链接]

上一主题 下一主题
离线任鸟飞
 

微信公众号:任鸟飞逆向
我们知道网络游戏一定要客户端和服务端通信,否则就成了单机游戏了。那么通信就一定要用到发包函数,发包函数有哪些呢?主要就是三大发包函数:send sendto 以及WSASend。通过发包函数下断,根据函数调用关系,可以很容易的找到游戏里的各种功能函数。
那么我们拿DNF来实验,看是否可以断到功能函数。
我们发现  无论是在send 头部
还是 sendto 和 WSASend 头部下断
在游戏里做任何动作,游戏都不会断下。
那是为什么呢?说好的可以找到功能函数呢?原因很简单!两种可能
第一种可能检测了断点。我们通过硬件断点方式以及在函数其他位置下断等方式发现并非是检测断点
第二种可能重新实现了发包函数。
那么基本可以确定,这个游戏重新实现了发包函数,但是我们说,所谓的重新实现,不过是按照原来的函数重新写的而已,是没有办法面目全非的。
同样也是两种办法,
第一种特征码定位,这是一个办法,但是,你并不知道他重新实现的代码处在什么模块之内,而且你也不知道他是否修改了哪一小块代码,同时你也不知道他是重新实现的这三大发包函数的哪一个,好吧,这是一个体力活,在不是完全没有办法的前提下,我是不会选择这样的方案的。
第二种这三大发包函数内层还会调用系统的发包函数 WSPSend  那么我们只要找到WSPSend,在这个函数上下断就可以断到重新实现的发包函数了。
怎么去找呢?
我们先找到一个正常send发包的进程
在send函数内部    call [eax+64] 的续表函数位置下断
进程做任意发包动作
断下以后 我们点F7 进入续表函数
进来的这个函数就是 WSPSend
记录下WSPSend 的地址 如图 719C583F  当然每台电脑是不同的
然后附加上DNF 到该地址下断  (同一台电脑哦)
做任意发包动作断下以后    通过调用关系  
可以顺利的返回到  重新实现的发包函数
这次我们再做任何发包动作  都可以断下了  都可以找到功能函数了
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个